1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
%D \module
%D [ file=core-buf, % blocks are moved to core-blk
%D version=2000.01.05,
%D title=\CONTEXT\ Core Macros,
%D subtitle=Buffers,
%D author=Hans Hagen,
%D date=\currentdate,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
% this will become a proper new verbatim module
\unprotect
\registerctxluafile{core-buf}{1.001}
\def\mkresetbuffer
{\ctxlua{buffers.erase("\currentbuffer")}}
\long\def\mksetbuffer#1%
{\ctxlua{buffers.set("\currentbuffer", \!!bs\detokenize{#1}\!!es)}}
\long\def\mkstartbuffer#1#2#3#4#5%
{\doifelsenothing{#4}
{\expanded{\setbuffercapsules{\e!start\v!buffer}{\e!stop\v!buffer}}%
\letvalue\bufferstop\relax}
{\setbuffercapsules{#3}{#4}}% not expanded, can be \cs \cs !
\expanded{\dodowithbuffer
{\currentbuffer}
{\bufferstart}
{\bufferstop}
{\donothing}
{#5% \egroup
\noexpand\getvalue{\bufferstop}}}}
\def\mkdobuffer#1%
{#1}
\def\mkdoifelsebuffer#1%
{\ctxlua{buffers.doifelsebuffer("#1")}}
\def\mkgetbuffer
{\ctxlua{buffers.get("\currentbuffer")}}
% will move
\ifx\mkinitializeverbatim\undefined \def\mkinitializeverbatim{\tttf} \fi
\def\mktypebuffer
{\mkdotypebuffer{\v!file}{}{\currentbuffer}}
\def\mkprocessbufferverbatim
{\mkinitializeverbatim
\ctxlua{buffers.type("\currentbuffer")}}
\def\mkprocessbufferlinesverbatim#1#2#3%
{#2%
% todo, set up numbers
\mkinitializeverbatim
\ctxlua{buffers.type("\currentbuffer")}
#3}
\def\mkdotypebuffer#1#2#3% see dodotypefile
{\mkdoifelsebuffer{#3}
{\dosometyping{#1}{#2}{#3}\mkprocessbufferverbatim\mkprocessbufferlinesverbatim}
{\reporttypingerror{#3}}}
\def\setbuffercapsules#1#2%
{\edef\bufferstart{\strippedcsname#1}\edef\bufferstart{\scantextokens\expandafter{\bufferstart}}%
\edef\bufferstop {\strippedcsname#2}\edef\bufferstop {\scantextokens\expandafter{\bufferstop }}}
\def\dowithbuffer#1#2#3% name, startsequence, stopsequence, before, after
{\setbuffercapsules{#2}{#3}%
\expanded{\dodowithbuffer{#1}{\bufferstart}{\bufferstop}}}
\long\def\dodowithbuffer#1#2#3#4#5% name, startsequence, stopsequence, before, after
{#4%
\bgroup
\setcatcodetable \vrbcatcodes
\catcode`\\=12
\ctxlua{buffers.erase("#1")}%
\long\def\nododowithbuffer
{\egroup
#5}%
\long\def\dododowithbuffer##1#3% is detokenize needed? TEST
{\ctxlua
{buffers.grab("#1","#2","#3",\!!bs\detokenize{##1}\!!es)}
\dododowithbuffer
\nododowithbuffer}%
\dododowithbuffer}
% kind of redundant in mkiv
\let\mkstartmemorybuffer\startbuffer
\let\mkstartfilebuffer \startbuffer
% bonus
\def\inspectbuffer
{\dosingleempty\doinspectbuffer}
\def\doinspectbuffer[#1]%
{\setcurrentbuffer{#1}%
\ctxlua{buffers.inspect("\currentbuffer")}}
\protect \endinput
|