%D \module %D [ file=buff-ini, %D version=2011.11.22, % previous big effort 2000.01.05, %D title=\CONTEXT\ Buffer Macros, %D subtitle=Buffers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Buffer Macros / Buffers} \registerctxluafile{buff-ini}{1.001} \unprotect % number is messy and not needed as we store the number anyway % we can get rid of \c!number \newcount\nofdefinedbuffers \let\currentbuffer\empty \def\doifelsebuffer#1% {\ctxcommand{doifelsebuffer("#1")}} \def\resetbuffer {\dosingleempty\doresetbuffer} \def\doresetbuffer[#1]% {\ctxcommand{erasebuffer("#1")}} \unexpanded\def\dostartdefinedbuffer {\bgroup \obeylines \doquadrupleempty\dodostartbuffer} \let\dostartbuffer\dostartdefinedbuffer % used in some modules \def\dodostartbuffer[#1][#2][#3][#4]% [category] [name] [start] [stop] {\iffourthargument \def\next{\dododostartbuffer{#1}{#2}{#3}{#4}}% \else \def\next{\dododostartbuffer {}{#1}{#2}{#3}}% \fi \next} \def\dododostartbuffer#1#2#3#4% \donothing needed ! {\normalexpanded{\dodowithbuffer{#2}{#3}{#4}{\donothing}{\egroup\noexpand\getvalue{#4}}}} \setvalue{\e!start\v!buffer}% {\bgroup \obeylines \dosingleempty\redostartbuffer} \def\redostartbuffer[#1]% {\dododostartbuffer{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}} \def\dowithbuffer#1#2#3% name, startsequence, stopsequence, before, after {\normalexpanded{\dodowithbuffer{#1}{#2}{#3}}} \unexpanded\long\def\dodowithbuffer#1#2#3#4#5% name, startsequence, stopsequence, before, after {#4% \bgroup \ctxcommand{erasebuffer("#1")}% \setcatcodetable \vrbcatcodes \long\def\nododowithbuffer {\egroup #5}% \long\def\dododowithbuffer##1#3% is detokenize needed? TEST {\ctxcommand{grabbuffer("#1","#2","#3",\!!bs\detokenize{##1}\!!es)} % space ? \dododowithbuffer \nododowithbuffer}% \dododowithbuffer} \def\setbuffer {\dosingleempty\dosetbuffer} \let\endbuffer\relax \long\def\dosetbuffer[#1]#2\endbuffer % seldom used so we just pass #2 {\ctxcommand{assignbuffer("#1", \!!bs\detokenize{#2}\!!es)}} \def\namedbufferparameter#1#2{\csname\??bu#1#2\endcsname} \unexpanded\def\setupbuffer {\dodoubleempty\dosetupbuffer} \def\dosetupbuffer[#1][#2]% {\ifsecondargument \getparameters[\??bu#1][#2]% \else \getparameters[\??bu][#1]% \fi} \newtoks\everydefinebuffer \unexpanded\def\definebuffer {\dodoubleempty\dodefinebuffer} \def\dodefinebuffer[#1][#2]% {\iffirstargument \global\advance\nofdefinedbuffers\plusone \setevalue{\??bu#1\c!number}{\number\nofdefinedbuffers}% \def\currentbuffer{#1}% \getparameters[\??bu#1][#2]% \the\everydefinebuffer \else % fatal error \fi} \def\thebuffernumber #1{\csname\??bu#1\c!number\endcsname} \def\thedefinedbuffer#1{def-\csname\??bu#1\c!number\endcsname} \appendtoks \setuevalue{\e!start\currentbuffer}% {\noexpand\dostartdefinedbuffer [\currentbuffer]% [def-\number\nofdefinedbuffers]% [\e!start\currentbuffer]% [\e!stop\currentbuffer]}% \setuevalue{\e!get\currentbuffer}% {\noexpand\dogetdefinedbuffer [\currentbuffer]% [def-\number\nofdefinedbuffers]}% \to \everydefinebuffer \def\doprocessbufferlist#1#2% {\doifelsenothing{#1} {\dododogetbuffer\empty} {\processcommalist[#1]#2}} \unexpanded\def\getbuffer % no [settings yet] {\dosingleempty\dogetbuffer} \unexpanded\def\dogetbuffer[#1]% [name] {\namedbufferparameter\empty\c!before \doprocessbufferlist{#1}\dododogetbuffer \namedbufferparameter\empty\c!after} \def\dogetdefinedbuffer[#1][#2]% {\namedbufferparameter{#1}\c!before \dododogetbuffer{#2}% \namedbufferparameter{#1}\c!after} \def\dododogetbuffer#1% {\ctxcommand{getbuffer("#1")}} \definebuffer[\v!hiding] \setupbuffer[\v!hiding][\c!before=,\c!after=] % \let\processTEXbuffer\getbuffer % handy synonym \unexpanded\def\processTEXbuffer {\dosingleempty\doprocessTEXbuffer} \def\doprocessTEXbuffer[#1]% {\pushcatcodetable \catcodetable\ctxcatcodes \getbuffer[#1]% \popcatcodetable} \setupbuffer [\c!before=, \c!after=] % only mkiv: % % \startbuffer[x] % x % \stopbuffer % % \savebuffer[x][temp.log] \unexpanded\def\savebuffer{\dodoubleempty\dosavebuffer} \def\dosavebuffer[#1][#2]{\ctxcommand{savebuffer("#1","#2")}} %D Experimental: no expansion of commands in buffer! % \startbuffer[what] % context("WHAT") % \stopbuffer % \startbuffer % context("JOBNAME") % \stopbuffer % % \ctxluabuffer[what] \ctxluabuffer \def\ctxluabuffer {\dosingleempty\doctxluabuffer} \def\mkvibuffer {\dosingleempty\domkvibuffer} \def\mkvibufferraw{\dosingleempty\domkvibufferraw} \def\doctxluabuffer [#1]{\ctxcommand{getbufferctxlua("#1")}} \def\domkvibuffer [#1]{\ctxcommand{getbuffermkvi("#1")}} \protect \endinput