buff-par.mklx /size: 5431 b    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=buff-par,
3%D        version=2010.12.05,
4%D          title=\CONTEXT\ Buffer Macros,
5%D       subtitle=Parallel,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Buffer Macros / Parallel}
15
16\registerctxluafile{buff-par}{}
17
18%D This module is made for Thomas Schmitz as part of a project. There is
19%D no documentation yet. Also, this code is unfinished and not tested well.
20%D
21%D \starttyping
22%D \defineparallel[main][one,two]
23%D
24%D \startmain
25%D \startone
26%D     first 0
27%D     [reference] first 1
28%D     first 2
29%D     first 3
30%D \stopone
31%D \starttwo
32%D     second 1
33%D     second 2
34%D \stoptwo
35%D \stopmain
36%D
37%D \startmain
38%D \startone
39%D     first 4
40%D     first 4
41%D \stopone
42%D \starttwo
43%D     second 3
44%D     second 4
45%D \stoptwo
46%D \stopmain
47%D
48%D \placeparallel[main][one][criterium=all]
49%D
50%D \placeparallel[main][two][criterium=all]
51%D \stoptyping
52
53%D criterium=all start=<number> n=<number>
54
55\unprotect
56
57\installcorenamespace{parallel}
58\installcorenamespace{parallelhandler}
59
60\installcommandhandler \??parallel {parallel} \??parallel
61
62\setupparallel
63  [\c!setups=parallel:place:default]
64
65\pushoverloadmode
66
67\let\buff_parallel_define_saved    \defineparallel
68\let\buff_process_parallel_instance\relax
69
70\permanent\tolerant\protected\overloaded\def\defineparallel[#name]#spacer[#instances]%
71  {\buff_parallel_define_saved[#name][\c!list={#instances}]% list is internal
72   \clf_defineparallel{#name}{#instances}%
73   \expandafter\newtoks\csname\??parallelhandler#name\endcsname
74   \processcommacommand[#instances]{\buff_parallel_define_instance{#name}}%
75   \frozen\instance\protected\edefcsname\e!start#name\endcsname{\buff_parallel_start{#name}}%
76   \frozen\instance\protected\edefcsname\e!stop #name\endcsname{\buff_parallel_stop}}
77
78\popoverloadmode
79
80\def\buff_process_parallel_instances
81  {\the\csname\??parallelhandler\currentparallel\endcsname}
82
83\def\buff_parallel_define_instance#name#instance%
84  {\normalexpanded{\buff_parallel_define_saved[#instance][#name]}%
85   \definebuffer[#instance]%
86   \toksapp
87     \csname\??parallelhandler#name\endcsname
88     {\edef\currentparallelinstance{#instance}\buff_process_parallel_instance\relax}%
89   \protected\edefcsname\e!stop#instance\edefcsname{\buff_parallel_save{#instance}}}
90
91\pushoverloadmode
92
93\let\buff_parallel_setup_saved \setupparallel
94
95\permanent\tolerant\protected\def\setupparallel[#name]#spacer[#instances]#spacer[#setups]%
96  {\processcommalist[#instances]{\buff_parallel_setup_instance{#name}{#setups}}}
97
98\popoverloadmode
99
100\def\buff_parallel_setup_instance#name#setups#instance%
101  {\buff_parallel_setup_saved[#name:#instance][#setups]}
102
103\protected\def\buff_parallel_start#name%
104  {\pushmacro\currentparallel
105   \cdef\currentparallel{#name}%
106   \clf_nextparallel{\currentparallel}}
107
108\protected\def\buff_parallel_stop
109  {\popmacro\currentparallel}
110
111\protected\def\buff_parallel_save#instance% defined moet ook aan de lua kant kunnen
112  {\clf_saveparallel
113     {\currentparallel}%
114     {#instance}%
115     {\thedefinedbuffer{#instance}}%
116   \relax}
117
118\permanent\tolerant\protected\def\placeparallel[#name]#spacer[#instance]#spacer[#S#settings]%
119  {\begingroup
120   \cdef\currentparallel{#name}%
121   \setupcurrentparallel[#settings]%
122   \clf_placeparallel
123     {\currentparallel}%
124     {#instance}%
125     {%
126      % setups    {\parallelparameter\c!setups}%
127        start     {\parallelparameter\c!start}%
128        n         {\parallelparameter\c!n}%
129        criterium {\parallelparameter\c!criterium}%
130     }%
131   \relax
132   \endgroup}
133
134\mutable\lettonothing\currentparallelinstance
135\mutable\lettonothing\currentparallelnumber
136\mutable\lettonothing\currentparallelline
137\mutable\lettonothing\currentparallellabel
138\mutable\lettonothing\currentparallelcontent
139
140\permanent\protected\def\doflushparallel#instance#status#line#label#content% called at lua end
141  {\begingroup
142   \def\currentparallelinstance{#instance}%
143   \def\currentparallelnumber  {#status}%
144   \def\currentparallelline    {#line}%
145   \def\currentparallellabel   {#label}%
146   \def\currentparallelcontent {#content}% can be kep at the lua end .. no need to use a virtual file
147   \ifcase#status\relax
148     \expandafter\buff_parallel_flush_nop
149   \or
150     \expandafter\buff_parallel_flush_yes
151   \fi
152   \endgroup}
153
154\def\buff_parallel_flush_nop
155  {}
156
157\def\buff_parallel_flush_yes
158 %{\directsetup{\namedparallelparameter{\currentparallel:\currentparallelinstance}\c!setups}}
159  {\directsetup{\namedparallelparameter{\currentparallelinstance}\c!setups}}
160
161\permanent\protected\def\doifelseparallel#name#instance%
162  {\clf_doifelseparallel{#name}{#instance}}
163
164\aliased\let\doifparallelelse\doifelseparallel
165
166\permanent\tolerant\protected\def\resetparallel[#name]#spacer[#instance]%
167  {\clf_resetparallel{#name}{#instance}}
168
169\startsetups parallel:place:default
170    \hangafter\plusone
171    \hangindent4\emwidth
172    \dontleavehmode
173    \hbox to 3\emwidth \bgroup
174        \hss
175        \bf
176        \ifempty\currentparallellabel
177            % bad news
178        \else
179            \textreference[\currentparallellabel]{\currentparallelline}
180        \fi
181    \currentparallelline
182    \quad
183    \egroup
184    \currentparallelcontent
185    \par
186\stopsetups
187
188\protect \endinput
189