ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* \stopbuffer in macro
@ 2005-05-30 19:51 Peter Münster
  2005-05-30 21:50 ` Taco Hoekwater
  2005-05-30 22:09 ` Hans Hagen
  0 siblings, 2 replies; 7+ messages in thread
From: Peter Münster @ 2005-05-30 19:51 UTC (permalink / raw)


Hello,

how could I build some macros, that make usage of \startbuffer and
\stopbuffer?
Example:
\def\startXXX[#1]{\doSomeMagicSetups{#1}%
  \startbuffer[...]}
\def\stopXXX{\stopbuffer
  \doSomeSpecialWorkHere}
And then:
\startXXX[some options]
some text
\stopXXX

TIA for any help!
Cheers, Peter

---------------------------------------------------

For those, who are interested, here in detail what I'm trying to do:

I still like the LaTeX listings.sty package very much, but porting it to
ConTeXt would be too much work for me. So why not using a wrapper?

Somewhere in the PATH I put the file createListing.sh:
#!/bin/bash
echo '\documentclass{article}\usepackage{listings}
      \lstset{language=C++,tabsize=4}\pagestyle{empty}
      \begin{document}\begin{lstlisting}{}' >$1-lst-ltx.tex
cat $1-lst.tmp >>$1-lst-ltx.tex
echo '\end{lstlisting}\end{document}' >>$1-lst-ltx.tex
latex $1-lst-ltx
dvips -E -o $1-lst-ltx.eps $1-lst-ltx

Then the ConTeXt-file:

\starttext
Here is a listing:

\startbuffer[lst]
#include <stdiostream.h>
int main(){
    return 0;
}
\stopbuffer
\immediate\write18{./createListing.sh \jobname}%
\externalfigure[\jobname-lst-ltx][]

And here we go on...
\stoptext

But this would be much better:

\def\startLST[#1]{\dosomesetups{#1}\startbuffer[...]}

\def\stopLST{\stopbuffer\immediate\write18{./createListing ...}%
  \externalfigure[...][...]}

And then:
\startLST[some options for \lstset{}]
some code
\stopLST

-- 
http://pmrb.free.fr/contact/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \stopbuffer in macro
  2005-05-30 19:51 \stopbuffer in macro Peter Münster
@ 2005-05-30 21:50 ` Taco Hoekwater
  2005-05-30 22:09 ` Hans Hagen
  1 sibling, 0 replies; 7+ messages in thread
From: Taco Hoekwater @ 2005-05-30 21:50 UTC (permalink / raw)


Peter Münster wrote:
> Hello,
> 
> how could I build some macros, that make usage of \startbuffer and
> \stopbuffer?
> Example:
> \def\startXXX[#1]{\doSomeMagicSetups{#1}%
>   \startbuffer[...]}
> \def\stopXXX{\stopbuffer
>   \doSomeSpecialWorkHere}
> And then:
> \startXXX[some options]
> some text
> \stopXXX

I hope this helps:

%%%%%%%%%%%%%%%%%% buf.tex
% use colors
\setupcolors[state=start]

% this defines a new type of buffer called XXX, so that
% the commands \startXXX ... \stopXXX, \getXXX and
% \typeXXX are now defined

\definebuffer[XXX]

% two sentinel definitions are placed before and after
% the actual buffer content, as fetched by \getXXX

\setupbuffer[XXX][before={\beforeXXX},after={\afterXXX}]

% Do not call \getXXX directly, but use a special
% command to pass options to \beforeXXX and \afterXXX

\def\finishXXX{\dosingleempty\dofinishXXX}
\def\dofinishXXX[#1]{{\getparameters[XXX][Color=green,#1]\getXXX }}

% within the next commans, there is now a set if parameters
% starting with \XXX, initialized by the \getparameters
% call in the macro above.

\def\beforeXXX{\startcolor[\XXXColor]}
\def\afterXXX{\stopcolor}

% below here is an example

\starttext
\startXXX
   Here is some text
\stopXXX

\finishXXX % defaults to using green text.

\finishXXX[Color=blue] % same text, but in blue

\stoptext
%%%%%%%%%%%%%%%%%%% buf.tex

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \stopbuffer in macro
  2005-05-30 19:51 \stopbuffer in macro Peter Münster
  2005-05-30 21:50 ` Taco Hoekwater
@ 2005-05-30 22:09 ` Hans Hagen
  2005-06-02 16:08   ` Peter Münster
  1 sibling, 1 reply; 7+ messages in thread
From: Hans Hagen @ 2005-05-30 22:09 UTC (permalink / raw)


Peter Münster wrote:
> Hello,
> 
> how could I build some macros, that make usage of \startbuffer and
> \stopbuffer?
> Example:
> \def\startXXX[#1]{\doSomeMagicSetups{#1}%
>   \startbuffer[...]}
> \def\stopXXX{\stopbuffer
>   \doSomeSpecialWorkHere}
> And then:
> \startXXX[some options]
> some text
> \stopXXX


\definebuffer[crap]

\setupbuffer[crap][before=\blank\bgroup here we start,after=and here we 
end\egroup\blank]

\starttext

\input tufte

\startcrap
oeps oeps oeps oeps oesp
oeps oeps oeps oeps oesp
oeps oeps oeps oeps oesp
oeps oeps oeps oeps oesp
\stopcrap

\input tufte

\getcrap

\input tufte

\stoptext


wikiable

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \stopbuffer in macro
  2005-05-30 22:09 ` Hans Hagen
@ 2005-06-02 16:08   ` Peter Münster
  2005-06-02 17:27     ` Taco Hoekwater
  0 siblings, 1 reply; 7+ messages in thread
From: Peter Münster @ 2005-06-02 16:08 UTC (permalink / raw)


On Tue, 31 May 2005, Hans Hagen wrote:

> \definebuffer[crap]
> 
> \setupbuffer[crap][before=\blank\bgroup here we start,after=and here we 
> end\egroup\blank]

[...]

Hello Hans and Taco,
thank you for your hints, but I think, I did not explain my question well
enough...
I fact, all I need is to know, how I could write some verbatim text between
2 commands (\startXXX...\stopXXX) into a file, but with my own macros.
Here an example in detail:

\newcount\LSTnum
\newwrite\LSTfile
\def\LSTfileprefix{\jobname-LST\LSTnum}

\def\startLST[#1]#2\stopLST{%
  \immediate\openout\LSTfile=\LSTfileprefix.tmp
  \immediate\write\LSTfile{#2}%  Here I seek a solution for verbatim text!
  \immediate\closeout\LSTfile
  \immediate\write18{createListing.sh \LSTfileprefix #1}% #1 is for \lstset
  \externalfigure[\LSTfileprefix]
  \advance\LSTnum by 1
}

and then, the user types only:

\startLST[language=C]
main()
{
	return 0;
}
\stopLST

It's already possible to do this with some further macros (\finishLST after
\stopLST for example), but I prefer only one \start/\stop pair.

Greetings, Peter

-- 
http://pmrb.free.fr/contact/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \stopbuffer in macro
  2005-06-02 16:08   ` Peter Münster
@ 2005-06-02 17:27     ` Taco Hoekwater
  2005-06-02 20:41       ` Hans Hagen
  2005-06-03 19:48       ` Peter Münster
  0 siblings, 2 replies; 7+ messages in thread
From: Taco Hoekwater @ 2005-06-02 17:27 UTC (permalink / raw)



This should help:

   \def\startLST[#1]%
     {\def\stopLST{End of #1}%
      \dostartbuffer[LST][startLST][stopLST]}

This is almost the same as:

    \definebuffer[LST]
    \def\stopLST{End of LST}

Except that it is a little bit more low-level and thereby allows
an argument to \startLST. Using a local definition if \stopLST
is another trick, to lift the argument to the end of the buffer.

A less sophisticated  but clearer approach is:

    \def\startLST[#1]%
     {\def\LSTArgs{#1}%
      \dostartbuffer[LST][startLST][stopLST]}

    \def\stopLST{End of \LSTArgs}

Full example:

   \def\startLST[#1]%
     {\def\stopLST{End of #1}%
      \dostartbuffer[LST][startLST][stopLST]}

   \starttext
   \startLST[whatever]
   bla bla
   \stopLST
   alb alb
   \stoptext

You'll have to fill in the commands etc. yourself of course.

Greetings, Taco

Peter Münster wrote:
> On Tue, 31 May 2005, Hans Hagen wrote:
> 
> 
>>\definebuffer[crap]
>>
>>\setupbuffer[crap][before=\blank\bgroup here we start,after=and here we 
>>end\egroup\blank]
> 
> 
> [...]
> 
> Hello Hans and Taco,
> thank you for your hints, but I think, I did not explain my question well
> enough...
> I fact, all I need is to know, how I could write some verbatim text between
> 2 commands (\startXXX...\stopXXX) into a file, but with my own macros.
> Here an example in detail:
> 
> \newcount\LSTnum
> \newwrite\LSTfile
> \def\LSTfileprefix{\jobname-LST\LSTnum}
> 
> \def\startLST[#1]#2\stopLST{%
>   \immediate\openout\LSTfile=\LSTfileprefix.tmp
>   \immediate\write\LSTfile{#2}%  Here I seek a solution for verbatim text!
>   \immediate\closeout\LSTfile
>   \immediate\write18{createListing.sh \LSTfileprefix #1}% #1 is for \lstset
>   \externalfigure[\LSTfileprefix]
>   \advance\LSTnum by 1
> }
> 
> and then, the user types only:
> 
> \startLST[language=C]
> main()
> {
> 	return 0;
> }
> \stopLST
> 
> It's already possible to do this with some further macros (\finishLST after
> \stopLST for example), but I prefer only one \start/\stop pair.
> 
> Greetings, Peter
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \stopbuffer in macro
  2005-06-02 17:27     ` Taco Hoekwater
@ 2005-06-02 20:41       ` Hans Hagen
  2005-06-03 19:48       ` Peter Münster
  1 sibling, 0 replies; 7+ messages in thread
From: Hans Hagen @ 2005-06-02 20:41 UTC (permalink / raw)


I once made the option

   \usememorybuffers

but i'm not sure if it does the same

====

Taco Hoekwater wrote:

> This should help:
> 
>   \def\startLST[#1]%
>     {\def\stopLST{End of #1}%
>      \dostartbuffer[LST][startLST][stopLST]}
> 
> This is almost the same as:
> 
>    \definebuffer[LST]
>    \def\stopLST{End of LST}
> 
> Except that it is a little bit more low-level and thereby allows
> an argument to \startLST. Using a local definition if \stopLST
> is another trick, to lift the argument to the end of the buffer.
> 
> A less sophisticated  but clearer approach is:
> 
>    \def\startLST[#1]%
>     {\def\LSTArgs{#1}%
>      \dostartbuffer[LST][startLST][stopLST]}
> 
>    \def\stopLST{End of \LSTArgs}
> 
> Full example:
> 
>   \def\startLST[#1]%
>     {\def\stopLST{End of #1}%
>      \dostartbuffer[LST][startLST][stopLST]}
> 
>   \starttext
>   \startLST[whatever]
>   bla bla
>   \stopLST
>   alb alb
>   \stoptext
> 
> You'll have to fill in the commands etc. yourself of course.
> 
> Greetings, Taco
> 
> Peter Münster wrote:
> 
>> On Tue, 31 May 2005, Hans Hagen wrote:
>>
>>
>>> \definebuffer[crap]
>>>
>>> \setupbuffer[crap][before=\blank\bgroup here we start,after=and here 
>>> we end\egroup\blank]
>>
>>
>>
>> [...]
>>
>> Hello Hans and Taco,
>> thank you for your hints, but I think, I did not explain my question well
>> enough...
>> I fact, all I need is to know, how I could write some verbatim text 
>> between
>> 2 commands (\startXXX...\stopXXX) into a file, but with my own macros.
>> Here an example in detail:
>>
>> \newcount\LSTnum
>> \newwrite\LSTfile
>> \def\LSTfileprefix{\jobname-LST\LSTnum}
>>
>> \def\startLST[#1]#2\stopLST{%
>>   \immediate\openout\LSTfile=\LSTfileprefix.tmp
>>   \immediate\write\LSTfile{#2}%  Here I seek a solution for verbatim 
>> text!
>>   \immediate\closeout\LSTfile
>>   \immediate\write18{createListing.sh \LSTfileprefix #1}% #1 is for 
>> \lstset
>>   \externalfigure[\LSTfileprefix]
>>   \advance\LSTnum by 1
>> }
>>
>> and then, the user types only:
>>
>> \startLST[language=C]
>> main()
>> {
>>     return 0;
>> }
>> \stopLST
>>
>> It's already possible to do this with some further macros (\finishLST 
>> after
>> \stopLST for example), but I prefer only one \start/\stop pair.
>>
>> Greetings, Peter
>>
> 
> _______________________________________________
> ntg-context mailing list
> ntg-context@ntg.nl
> http://www.ntg.nl/mailman/listinfo/ntg-context
> 
> 
> 


-- 

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: \stopbuffer in macro
  2005-06-02 17:27     ` Taco Hoekwater
  2005-06-02 20:41       ` Hans Hagen
@ 2005-06-03 19:48       ` Peter Münster
  1 sibling, 0 replies; 7+ messages in thread
From: Peter Münster @ 2005-06-03 19:48 UTC (permalink / raw)


On Thu, 2 Jun 2005, Taco Hoekwater wrote:

> This should help:
> 
>    \def\startLST[#1]%
>      {\def\stopLST{End of #1}%
>       \dostartbuffer[LST][startLST][stopLST]}

Thank you very very much!!
This can be the base for some really nice modules, that I'm going to write.
Of course, I'll put them on the wiki!
Greeting, Peter

-- 
http://pmrb.free.fr/contact/

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-06-03 19:48 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-05-30 19:51 \stopbuffer in macro Peter Münster
2005-05-30 21:50 ` Taco Hoekwater
2005-05-30 22:09 ` Hans Hagen
2005-06-02 16:08   ` Peter Münster
2005-06-02 17:27     ` Taco Hoekwater
2005-06-02 20:41       ` Hans Hagen
2005-06-03 19:48       ` Peter Münster

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).