summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/buff-ini.mkiv
diff options
context:
space:
mode:
authorMojca Miklavec <mojca.miklavec@gmail.com>2012-05-14 17:38:55 +0000
committerMojca Miklavec <mojca.miklavec@gmail.com>2012-05-14 17:38:55 +0000
commit15995e10bfc68edf79970c4ea4fbb6678566c46e (patch)
tree2de7ca2a83f2d37ef043ad7429a5cb945bb79ddb /Master/texmf-dist/tex/context/base/buff-ini.mkiv
parentc9a39f716f1e5ec820ed3aab2c9aef25c5a9d730 (diff)
ConTeXt 2012.05.14 16:00
git-svn-id: svn://tug.org/texlive/trunk@26371 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/buff-ini.mkiv')
-rw-r--r--Master/texmf-dist/tex/context/base/buff-ini.mkiv210
1 files changed, 111 insertions, 99 deletions
diff --git a/Master/texmf-dist/tex/context/base/buff-ini.mkiv b/Master/texmf-dist/tex/context/base/buff-ini.mkiv
index 7bd382fe2e9..239a274c0a8 100644
--- a/Master/texmf-dist/tex/context/base/buff-ini.mkiv
+++ b/Master/texmf-dist/tex/context/base/buff-ini.mkiv
@@ -5,7 +5,7 @@
%D subtitle=Buffers,
%D author=Hans Hagen,
%D date=\currentdate,
-%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%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
@@ -20,143 +20,143 @@
% 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}
+\unexpanded\def\resetbuffer
+ {\dosingleempty\buff_reset}
-\def\doresetbuffer[#1]%
+\def\buff_reset[#1]%
{\ctxcommand{erasebuffer("#1")}}
-\unexpanded\def\dostartdefinedbuffer
- {\bgroup
+\setuvalue{\e!start\v!buffer}%
+ {\begingroup % (3)
\obeylines
- \doquadrupleempty\dodostartbuffer}
-
-\let\dostartbuffer\dostartdefinedbuffer % used in some modules
+ \dosingleempty\buff_start}
-\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\buff_start[#1]%
+ {\buff_start_indeed{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}}
-\def\dododostartbuffer#1#2#3#4% \donothing needed !
- {\normalexpanded{\dodowithbuffer{#2}{#3}{#4}{\donothing}{\egroup\noexpand\getvalue{#4}}}}
+\def\buff_start_indeed#1#2#3#4% \donothing needed !
+ {\normalexpanded{\buff_pickup{#2}{#3}{#4}{}{\buff_stop{#4}}}}
-\setvalue{\e!start\v!buffer}%
- {\bgroup
+\unexpanded\def\grabbufferdata % was: \dostartbuffer
+ {\begingroup % (4)
\obeylines
- \dosingleempty\redostartbuffer}
+ \doquadrupleempty\buff_grab_direct_indeed}
-\def\redostartbuffer[#1]%
- {\dododostartbuffer{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}}
+\unexpanded\def\grabbufferdatadirect % name start stop
+ {\begingroup % (6)
+ \buff_start_indeed\empty}
-\def\dowithbuffer#1#2#3% name, startsequence, stopsequence, before, after
- {\normalexpanded{\dodowithbuffer{#1}{#2}{#3}}}
+\def\buff_grab_direct_indeed % [category] [name] [start] [stop]
+ {\iffourthargument
+ \expandafter\buff_grab_direct_indeed_a
+ \else
+ \expandafter\buff_grab_direct_indeed_b
+ \fi}
-\unexpanded\long\def\dodowithbuffer#1#2#3#4#5% name, startsequence, stopsequence, before, after
- {#4%
- \bgroup
+\def\buff_grab_direct_indeed_a[#1][#2][#3][#4]{\buff_start_indeed {#1}{#2}{#3}{#4}}
+\def\buff_grab_direct_indeed_b[#1][#2][#3][#4]{\buff_start_indeed\empty{#1}{#2}{#3}}
+
+\unexpanded\def\buff_pickup#1#2#3#4#5% name, startsequence, stopsequence, before, after
+ {\begingroup % (1)
+ #4%
+ \begingroup % (2)
+ \edef\catcodetableofbuffer{\number\catcodetable}%
\ctxcommand{erasebuffer("#1")}%
- \setcatcodetable \vrbcatcodes
- \long\def\nododowithbuffer
- {\egroup
+ \setcatcodetable\vrbcatcodes
+ \def\buff_finish
+ {\endgroup % (1)
+ \endgroup % (2)
#5}%
- \long\def\dododowithbuffer##1#3% is detokenize needed? TEST
- {\ctxcommand{grabbuffer("#1","#2","#3",\!!bs\detokenize{##1}\!!es)} % space ?
- \dododowithbuffer
- \nododowithbuffer}%
- \dododowithbuffer}
+ \def\buff_gobble##1#3% is detokenize needed? TEST
+ %{\ctxcommand{grabbuffer("#1","#2","#3",\!!bs\detokenize{##1}\!!es)} % space ?
+ {\ctxcommand{grabbuffer("#1","#2","#3",\!!bs>##1\!!es,\catcodetableofbuffer)}% space ?
+ \buff_gobble
+ \buff_finish}%
+ \buff_gobble}
-\def\setbuffer
- {\dosingleempty\dosetbuffer}
+\unexpanded\def\buff_stop#1%
+ {\endgroup % (3 & 4 & 5 & 6)
+ \getvalue{#1}}
-\let\endbuffer\relax
+\unexpanded\def\setbuffer
+ {\dosingleempty\buff_set}
-\long\def\dosetbuffer[#1]#2\endbuffer % seldom used so we just pass #2
- {\ctxcommand{assignbuffer("#1", \!!bs\detokenize{#2}\!!es)}}
+\let\endbuffer\relax
-\def\namedbufferparameter#1#2{\csname\??bu#1#2\endcsname}
+\def\buff_set[#1]#2\endbuffer % seldom used so we just pass #2
+ {\ctxcommand{assignbuffer("#1",\!!bs\detokenize{#2}\!!es,\number\catcodetable)}}
-\unexpanded\def\setupbuffer
- {\dodoubleempty\dosetupbuffer}
+% beware, never adapt the global buffer settings, actually we might introduce
+% a broken parent chain for this purpose but on the other hand it's not that
+% different from framed cum suis
-\def\dosetupbuffer[#1][#2]%
- {\ifsecondargument
- \getparameters[\??bu#1][#2]%
- \else
- \getparameters[\??bu][#1]%
- \fi}
+\installcorenamespace{buffer}
-\newtoks\everydefinebuffer
+\installcommandhandler \??buffer {buffer} \??buffer
-\unexpanded\def\definebuffer
- {\dodoubleempty\dodefinebuffer}
+\setupbuffer
+ [\c!before=,
+ \c!after=]
-\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}
+\newcount\c_buff_n_of_defined
-\def\thebuffernumber #1{\csname\??bu#1\c!number\endcsname}
-\def\thedefinedbuffer#1{def-\csname\??bu#1\c!number\endcsname}
+\let\currentdefinedbuffer\s!dummy
\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]}%
+ \global\advance\c_buff_n_of_defined\plusone
+ \setexpandedbufferparameter\c!number{\number\c_buff_n_of_defined}%
+ \edef\currentdefinedbuffer{def-\number\c_buff_n_of_defined}%
+ \setuevalue{\e!start\currentbuffer}{\buff_start_defined{\currentbuffer}{\currentdefinedbuffer}{\e!start\currentbuffer}{\e!stop\currentbuffer}}%
+ \setuevalue{\e!get\currentbuffer }{\buff_get_stored{\currentbuffer}{\currentdefinedbuffer}}%
\to \everydefinebuffer
-\def\doprocessbufferlist#1#2%
- {\doifelsenothing{#1}
- {\dododogetbuffer\empty}
- {\processcommalist[#1]#2}}
+\unexpanded\def\buff_start_defined
+ {\begingroup % (5)
+ \buff_start_indeed}
+
+\def\thebuffernumber #1{\namedbufferparameter{#1}\c!number}
+\def\thedefinedbuffer#1{def-\namedbufferparameter{#1}\c!number}
\unexpanded\def\getbuffer % no [settings yet]
- {\dosingleempty\dogetbuffer}
+ {\dosingleempty\buff_get}
-\unexpanded\def\dogetbuffer[#1]% [name]
+\unexpanded\def\buff_get[#1]% [name]
{\namedbufferparameter\empty\c!before
- \doprocessbufferlist{#1}\dododogetbuffer
+ \doifelsenothing{#1}
+ {\buff_get_stored_indeed\empty}
+ {\processcommalist[#1]\buff_get_stored_indeed}%
\namedbufferparameter\empty\c!after}
-\def\dogetdefinedbuffer[#1][#2]%
+\unexpanded\def\buff_get_stored#1#2%
{\namedbufferparameter{#1}\c!before
- \dododogetbuffer{#2}%
+ \buff_get_stored_indeed{#2}%
\namedbufferparameter{#1}\c!after}
-\def\dododogetbuffer#1%
+\unexpanded\def\buff_get_stored_indeed#1%
{\ctxcommand{getbuffer("#1")}}
-\definebuffer[\v!hiding] \setupbuffer[\v!hiding][\c!before=,\c!after=]
-
-\let\processTEXbuffer\getbuffer % handy synonym
+\definebuffer
+ [\v!hiding]
\setupbuffer
+ [\v!hiding]
[\c!before=,
\c!after=]
+\unexpanded\def\processTEXbuffer % keep case, maybe also lower
+ {\dosingleempty\buff_process_tex}
+
+\def\buff_process_tex[#1]%
+ {\pushcatcodetable
+ \catcodetable\ctxcatcodes % \setcatcodetable
+ \buff_get_stored_indeed{#1}%
+ \popcatcodetable}
+
% only mkiv:
%
% \startbuffer[x]
@@ -165,26 +165,38 @@
%
% \savebuffer[x][temp.log]
-\unexpanded\def\savebuffer{\dodoubleempty\dosavebuffer}
+\unexpanded\def\savebuffer
+ {\dodoubleempty\buff_save}
-\def\dosavebuffer[#1][#2]{\ctxcommand{savebuffer("#1","#2")}}
+\def\buff_save[#1][#2]%
+ {\ctxcommand{savebuffer("#1","#2")}}
%D Experimental: no expansion of commands in buffer!
% \startbuffer[what]
-% tex.print("WHAT")
+% context("WHAT")
% \stopbuffer
% \startbuffer
-% tex.print("JOBNAME")
+% context("JOBNAME")
% \stopbuffer
%
% \ctxluabuffer[what] \ctxluabuffer
-\def\ctxluabuffer {\dosingleempty\doctxluabuffer}
-\def\mkvibuffer {\dosingleempty\domkvibuffer}
-\def\mkvibufferraw{\dosingleempty\domkvibufferraw}
+\unexpanded\def\ctxluabuffer {\dosingleempty\buff_ctxlua}
+\unexpanded\def\mkvibuffer {\dosingleempty\buff_mkvi}
+% what was: \mkvibufferraw
+
+\def\buff_ctxlua[#1]{\ctxcommand{getbufferctxlua("#1")}}
+\def\buff_mkvi [#1]{\ctxcommand{getbuffermkvi("#1")}}
+
+% used elsewhere
+
+\unexpanded\def\doprocesstexbuffer#1{\buff_process_tex[#1]} % still used?
+
+\let\dostartbuffer\grabbufferdata % for old times sake
+
+% new (expandable):
-\def\doctxluabuffer [#1]{\ctxcommand{getbufferctxlua("#1")}}
-\def\domkvibuffer [#1]{\ctxcommand{getbuffermkvi("#1")}}
+\def\getbufferdata[#1]{\buff_get_stored_indeed{#1}}
\protect \endinput