summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/core-buf.mkiv
blob: c313fc450929f6e67bf5e6837ee2f4551b2cb089 (plain)
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