1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Buffer Macros Parallel}
15
16\registerctxluafile{buffpar}{}
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\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}]
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
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
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
141 {\begingroup
142 \def\currentparallelinstance{#instance}
143 \def\currentparallelnumber {#status}
144 \def\currentparallelline {#line}
145 \def\currentparallellabel {#label}
146 \def\currentparallelcontent {#content}
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
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
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 |