summaryrefslogtreecommitdiff
path: root/tex/context/base/buff-ini.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/buff-ini.mkiv')
-rw-r--r--tex/context/base/buff-ini.mkiv85
1 files changed, 64 insertions, 21 deletions
diff --git a/tex/context/base/buff-ini.mkiv b/tex/context/base/buff-ini.mkiv
index 4ea3042b6..c10680085 100644
--- a/tex/context/base/buff-ini.mkiv
+++ b/tex/context/base/buff-ini.mkiv
@@ -23,13 +23,15 @@
\let\currentbuffer\empty
\def\doifelsebuffer#1%
- {\ctxcommand{doifelsebuffer("#1")}}
+ {\clf_doifelsebuffer{#1}}
+
+\let\doifbufferelse\doifelsebuffer
\unexpanded\def\resetbuffer
{\dosingleempty\buff_reset}
\def\buff_reset[#1]%
- {\ctxcommand{erasebuffer("#1")}}
+ {\clf_erasebuffer{#1}}
\setuvalue{\e!start\v!buffer}%
{\begingroup % (3)
@@ -39,8 +41,11 @@
\def\buff_start[#1][#2]%
{\buff_start_indeed{}{#1}{\e!start\v!buffer}{\e!stop\v!buffer}}
-\def\buff_start_indeed#1#2#3#4% \donothing needed !
- {\normalexpanded{\buff_pickup{#2}{#3}{#4}{}{\buff_stop{#4}}}}
+% \def\buff_start_indeed#1#2#3#4#5% \donothing needed ! #5=undent)
+% {\normalexpanded{\buff_pickup{#2}{#3}{#4}{}{\buff_stop{#4}}\plusone}}
+
+\def\buff_start_indeed#1#2#3#4%
+ {\normalexpanded{\buff_pickup{#2}{#3}{#4}{}{\buff_stop{#4}}\plusone}}
\unexpanded\def\grabbufferdata % was: \dostartbuffer
{\begingroup % (4)
@@ -64,35 +69,70 @@
\let\buff_finish\relax
\let\buff_gobble\relax
-\unexpanded\def\buff_pickup#1#2#3#4#5% name, startsequence, stopsequence, before, after
+% \unexpanded\def\buff_pickup#1#2#3#4#5#6% name, startsequence, stopsequence, before, after, undent
+% {\begingroup % (1)
+% #4%
+% \begingroup % (2)
+% \edef\catcodetableofbuffer{\number\catcodetable}%
+% \clf_erasebuffer{#1}%
+% \setcatcodetable\vrbcatcodes
+% \def\buff_finish
+% {\endgroup % (1)
+% \endgroup % (2)
+% #5}%
+% \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,\ifnum#6=\plusone true\else false\fi)}% space ?
+% \buff_gobble
+% \buff_finish}%
+% \buff_gobble}
+
+% % \def\startgrab
+% % {\begingroup
+% % \setcatcodetable\vrbcatcodes
+% % \ctxlua{tokens.pickup("\\startgrab","\\stopgrab") context("\\endgroup")}}
+% %
+% % \def\stopgrab
+% % {}
+
+\unexpanded\def\buff_pickup#1#2#3#4#5#6% name, startsequence, stopsequence, before, after, undent
{\begingroup % (1)
#4%
\begingroup % (2)
- \edef\catcodetableofbuffer{\number\catcodetable}%
- \ctxcommand{erasebuffer("#1")}%
+ \scratchcounter\catcodetable
+ \clf_erasebuffer{#1}%
\setcatcodetable\vrbcatcodes
- \def\buff_finish
+ \unexpanded\def\dofinishpickupbuffer
{\endgroup % (1)
\endgroup % (2)
#5}%
- \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}
+ % todo: we need to skip the first lineending which is na active character
+ % but sometimes we have something different ... this is a side effect of
+ % checking for optional arguments i.e. the next token is already tokenized
+ % and for that reason we have the \relax as well as the \string
+ \clf_pickupbuffer
+ {#1}%
+ {#2}%
+ {#3}%
+ {\string\dofinishpickupbuffer}%
+ \scratchcounter
+ \ifnum#6=\plusone\s!true\else\s!false\fi
+ % \relax}
+ \expandafter\relax\string}
\unexpanded\def\buff_stop#1%
{\endgroup % (3 & 4 & 5 & 6)
\getvalue{#1}}
+% \installctxfunction\dopickupbuffer{commands.dopickupbuffer}
+
\unexpanded\def\setbuffer
{\dosingleempty\buff_set}
\let\endbuffer\relax
\def\buff_set[#1]#2\endbuffer % seldom used so we just pass #2
- {\ctxcommand{assignbuffer("#1",\!!bs\detokenize{#2}\!!es,\number\catcodetable)}}
+ {\clf_assignbuffer{#1}{\detokenize{#2}}\catcodetable\relax}
% 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
@@ -141,7 +181,7 @@
\namedbufferparameter{#1}\c!after}
\unexpanded\def\buff_get_stored_indeed#1%
- {\ctxcommand{getbuffer("#1")}}
+ {\clf_getbuffer{#1}}
\unexpanded\def\getdefinedbuffer[#1]%
{\buff_get_stored{#1}{\thedefinedbuffer{#1}}}%
@@ -155,7 +195,10 @@
{\processcommalist[#1]\buff_get_stored_inline_indeed}}
\unexpanded\def\buff_get_stored_inline_indeed#1%
- {\ignorespaces\ctxcommand{getbuffer("#1")}\removeunwantedspaces}
+ {\ignorespaces\clf_getbuffer{#1}\removeunwantedspaces}
+
+\def\rawbuffer#1% expandable
+ {\clf_getbuffer{#1}}
\definebuffer
[\v!hiding]
@@ -197,10 +240,10 @@
\def\buff_save[#1][#2]%
{\begingroup
- \doifassignmentelse{#1}
+ \doifelseassignment{#1}
{\setupcurrentsavebuffer[#1]}%
{\setupcurrentsavebuffer[\c!list={#1},\c!file=#2]}%
- \ctxcommand{savebuffer("\directsavebufferparameter\c!list","\directsavebufferparameter\c!file","\directsavebufferparameter\c!prefix")}%
+ \clf_savebuffer{\directsavebufferparameter\c!list}{\directsavebufferparameter\c!file}{\directsavebufferparameter\c!prefix}%
\endgroup}
%D Experimental: no expansion of commands in buffer!
@@ -218,8 +261,8 @@
\unexpanded\def\mkvibuffer {\dosingleempty\buff_mkvi}
% what was: \mkvibufferraw
-\def\buff_ctxlua[#1]{\ctxcommand{getbufferctxlua("#1")}}
-\def\buff_mkvi [#1]{\ctxcommand{getbuffermkvi("#1")}}
+\def\buff_ctxlua[#1]{\clf_getbufferctxlua{#1}}
+\def\buff_mkvi [#1]{\clf_getbuffermkvi {#1}}
% used elsewhere