1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Structure Macros Constructions}
15
16\registerctxluafile{strccon}{}
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40\unprotect
41
42
43
44\installcorenamespace{construction}
45
46\installcommandhandler \??construction {construction} \??construction
47
48\aliased\let\setupconstructions\setupconstruction
49
50\setupconstructions[
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 \c!alternative=\v!left,
73 \c!display=\v!yes,
74 \c!width=7\emwidth,
75 \c!distance=\emwidth,
76 \c!stretch=.50,
77 \c!shrink=.25,
78 \c!titledistance=.5\emwidth,
79
80
81 \c!margin=\v!no,
82 \c!before=\blank,
83 \c!inbetween=\blank,
84 \c!after=\blank,
85
86
87
88 \c!expansion=\v!no,
89
90
91]
92
93
94
95
96
97
98
99
100
101
102\installcorenamespace{constructionmain}
103\installcorenamespace{constructionlevel}
104\installcorenamespace{constructionclass}
105
106
107
108\mutable\let\currentconstructionmain \empty
109\mutable\let\currentconstructionlevel \empty
110\mutable\let\currentconstructionhandler \empty
111
112\mutable\let\currentconstructionattribute \empty
113\mutable\let\currentconstructionbookmark \empty
114\mutable\let\currentconstructioncatcodes \empty
115\mutable\let\currentconstructioncoding \empty
116\mutable\let\currentconstructionexpansion \empty
117\mutable\let\currentconstructionincrementnumber\empty
118\mutable\let\currentconstructionlabel \empty
119\mutable\let\currentconstructionlist \empty
120\mutable\let\currentconstructionlistentry \empty
121\mutable\let\currentconstructionlistnumber \empty
122\mutable\let\currentconstructionmarking \empty
123\mutable\let\currentconstructionnumber \empty
124\mutable\let\currentconstructionreference \empty
125\mutable\let\currentconstructionreferencetext \empty
126\mutable\let\currentconstructionreferenceprefix\empty
127\mutable\let\currentconstructionsynchronize \empty
128\mutable\let\currentconstructiontitle \empty
129\mutable\let\currentconstructionxmlsetup \empty
130
131\settrue\c_strc_constructions_define_commands
132
133\appendtoks
134 \ifempty\currentconstructionparent
135 \letcsname\??constructionmain\currentconstruction\endcsname\currentconstruction
136 \definelist[\currentconstruction]
137 \else
138 \letcsname\??constructionmain\currentconstruction\endcsname\currentconstructionparent
139 \definelist[\currentconstruction][\currentconstructionparent]
140 \fi
141 \edefcsname\??constructionlevel\currentconstruction\endcsname{\number\constructionparameter\c!level}
142 \edefcsname\??constructionclass\currentconstruction\endcsname{\constructionparameter\s!handler}
143\to \everydefineconstruction
144
145
146
147\appendtoks
148 \ifconditional\c_strc_constructions_define_commands
149 \protected\instance\edefcsname\e!start\currentconstruction\endcsname{\startnamedconstruction[\currentconstruction]}
150 \protected\instance \defcsname\e!stop \currentconstruction\endcsname{\stopnamedconstruction}
151 \fi
152\to \everydefineconstruction
153
154
155
156
157\tolerant\permanent\protected\def\startnamedconstruction[#1]#*[#2]#*[#3]
158 {\begingroup
159 \strc_constructions_initialize{#1}
160 \strc_constructions_register[#3][\c!label={\constructionparameter\c!text},\c!reference=,\c!title=,\c!bookmark=,\c!list=,\c!referencetext=,#2]
161 \csname\??constructionstarthandler\currentconstructionhandler\endcsname}
162
163\permanent\protected\def\stopnamedconstruction
164 {\csname\??constructionstophandler\currentconstructionhandler\endcsname
165 \endgroup}
166
167
168
169
170
171\installcorenamespace{constructioninitializer}
172\installcorenamespace{constructionfinalizer}
173
174\installcorenamespace{constructionmainhandler}
175\installcorenamespace{constructioncommandhandler}
176\installcorenamespace{constructionstarthandler}
177\installcorenamespace{constructionstophandler}
178
179\installcorenamespace{constructiontexthandler}
180\installcorenamespace{constructionnotehandler}
181
182\protected\def\strc_constructions_initialize#1
183 {\edef\currentconstruction{#1}
184 \enforced\let\currentconstructionhash\??construction
185 \let\currentconstructionlistentry\!!zerocount
186 \enforced\expandafter\let\expandafter\currentconstructionmain \csname\??constructionmain \currentconstruction\endcsname
187 \enforced\expandafter\let\expandafter\currentconstructionlevel \csname\??constructionlevel\currentconstruction\endcsname
188 \enforced\expandafter\let\expandafter\currentconstructionhandler\csname\??constructionclass\currentconstruction\endcsname
189 \csname\??constructioninitializer\currentconstructionhandler\endcsname}
190
191\protected\def\strc_constructions_finalize
192 {\csname\??constructionfinalizer\currentconstructionhandler\endcsname
193 \strc_constructions_discard}
194
195\newconditional\c_strc_constructions_number_state
196\newconditional\c_strc_constructions_title_state
197
198\protected\defcsname\??constructioninitializer\v!construction\endcsname
199 {\setfalse\c_strc_constructions_number_state
200 \setfalse\c_strc_constructions_title_state}
201
202\protected\defcsname\??constructionfinalizer\v!construction\endcsname
203 {}
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232\newtoks\everyconstruction
233
234\permanent\protected\def\currentconstructiontext
235 {\begstrut
236 \csname\??constructiontexthandler\currentconstructionhandler\endcsname
237 \endstrut}
238
239\permanent\protected\def\currentconstructionsample
240 {\begstrut
241 \constructionparameter\c!text
242 \p_strc_constructions_sample
243 \endstrut}
244
245\permanent\protected\def\wrappedconstruction#1
246 {\begingroup
247 \iftrialtypesetting \else
248 \currentconstructionsynchronize
249 \c_attr_destination\currentconstructionattribute\relax
250 \fi
251 #1
252 \endgroup}
253
254\permanent\protected\def\wrappedcurrentconstruction
255 {\begingroup
256 \iftrialtypesetting \else
257 \currentconstructionsynchronize
258 \c_attr_destination\currentconstructionattribute\relax
259 \fi
260 \currentconstructiontext
261 \endgroup}
262
263\protected\defcsname\??constructionmainhandler\v!construction\endcsname#1
264 {\iftrialtypesetting \else
265 \begingroup
266 \currentconstructionsynchronize
267 \c_attr_destination\currentconstructionattribute\relax
268 \signalcharacter
269 \endgroup
270 \fi#1}
271
272\protected\defcsname\??constructiontexthandler\v!construction\endcsname
273 {\begingroup
274 \useconstructionstyleandcolor\c!headstyle\c!headcolor
275 \the\everyconstruction
276 \constructionparameter\c!headcommand
277 {\strut
278 \constructionparameter\c!text
279 \clf_savedlisttitle{\currentconstructionmain}\currentconstructionlistentry\relax}
280 \endgroup}
281
282\protected\def\strc_constructions_stored_start
283 {\begingroup
284 \csname\??constructionstarthandler\currentconstructionhandler\endcsname}
285
286\protected\def\strc_constructions_stored_stop
287 {\csname\??constructionstophandler\currentconstructionhandler\endcsname}
288
289\newconstant\c_strc_constructions_nested_state
290
291
292
293
294
295
296\protected\defcsname\??constructioncommandhandler\v!construction\endcsname
297 {\endgroup}
298
299\let\p_strc_constructions_sample \empty
300\let\p_strc_constructions_align \empty
301\let\p_strc_constructions_indenting \empty
302\let\p_strc_constructions_width \empty
303\let\p_strc_constructions_aligntitle \empty
304\let\p_strc_constructions_renderingsetup\empty
305\let\p_strc_constructions_headalign \empty
306\let\p_strc_constructions_hang \empty
307\let\p_strc_constructions_inbetween \empty
308\let\p_strc_constructions_closesymbol \empty
309\let\p_strc_constructions_distance \empty
310
311\newconditional\c_strc_constructions_distance_none
312
313\def\strc_constructions_set_width_and_distance
314 {\assignwidth
315 \p_strc_constructions_width
316 \constructionsheadwidth
317 {\unhcopy\constructionheadbox}
318 \constructionsheaddistance}
319
320\def\strc_constructions_preroll_head#content
321 {\setbox\constructionheadbox\hbox
322 {\forgetall
323 \dontcomplain
324 \settrialtypesetting
325 \csname\??constructionmainhandler\currentconstructionhandler\endcsname#content}}
326
327\def\strc_constructions_ignore_head
328 {\constructionsheaddistance\zeropoint
329 \constructionsheadwidth \zeropoint
330
331 \settrue\c_strc_constructions_distance_none}
332
333\protected\defcsname\??constructionstarthandler\v!construction\endcsname
334 {\dostarttaggedchained\t!construction\currentconstruction\currentconstructionhash
335
336 \constructionparameter\c!before
337 \begingroup
338 \edef\currentconstructionalternative{\constructionparameter\c!alternative}
339 \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}
340
341 \ifempty\p_strc_constructions_renderingsetup
342 \letconstructionparameter\c!alternative\v!left
343 \let\currentconstructionalternative\v!left
344 \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}
345 \else
346 \doifnotsetups\p_strc_constructions_renderingsetup
347 {\letconstructionparameter\c!alternative\v!left
348 \let\currentconstructionalternative\v!left
349 \edef\p_strc_constructions_renderingsetup{\constructionalternativeparameter\c!renderingsetup}}
350 \fi
351
352 \doadaptleftskip{\constructionparameter\c!margin}
353 \setlocalhsize
354 \edef\p_strc_constructions_distance{\constructionalternativeparameter\c!distance}
355 \edef\p_strc_constructions_width{\constructionalternativeparameter\c!width}
356 \ifx\p_strc_constructions_distance\v!none
357 \settrue\c_strc_constructions_distance_none
358 \constructionsheaddistance\zeropoint
359 \else
360 \setfalse\c_strc_constructions_distance_none
361 \constructionsheaddistance\p_strc_constructions_distance\relax
362 \ifdim\constructionsheaddistance=\zeropoint
363 \ifx\p_strc_constructions_width\v!broad
364 \constructionsheaddistance\emwidth
365 \orelse\ifx\p_strc_constructions_width\v!line
366 \constructionsheaddistance\emwidth
367 \fi
368 \fi
369 \fi
370
371
372
373
374
375
376
377
378
379
380
381
382
383 \strc_constructions_preroll_head\currentconstructiontext
384 \ifzeropt\wd\constructionheadbox
385 \strc_constructions_ignore_head
386 \else
387 \edef\p_strc_constructions_sample{\constructionparameter\c!sample}
388 \ifempty\p_strc_constructions_sample
389 \strc_constructions_set_width_and_distance
390 \else
391 \strc_constructions_preroll_head\currentconstructionsample
392 \ifzeropt\wd\constructionheadbox
393 \strc_constructions_ignore_head
394 \else
395 \strc_constructions_set_width_and_distance
396 \fi
397 \fi
398 \fi
399
400 \dostarttagged\t!constructiontag\empty
401 \setbox\constructionheadbox\hbox
402 {\forgetall
403 \dontcomplain
404 \ifx\currentconstructionalternative\v!serried
405 \csname\??constructionmainhandler\currentconstructionhandler\endcsname\currentconstructiontext
406 \else
407 \csname\??constructionmainhandler\currentconstructionhandler\endcsname{\boxedconstructionhead\currentconstructiontext}
408 \fi}
409 \edef\p_strc_constructions_aligntitle{\constructionparameter\c!aligntitle}
410 \ifx\p_strc_constructions_aligntitle\v!no
411 \leftconstructionskip \leftskip
412 \rightconstructionskip\rightskip
413 \else
414 \ifcase\c_strc_constructions_nested_state
415 \leftconstructionskip \leftskip
416 \rightconstructionskip\rightskip
417 \fi
418 \fi
419 \edef\p_strc_constructions_align{\constructionparameter\c!align}
420 \ifempty\p_strc_constructions_align \else
421 \setupalign[\p_strc_constructions_align]
422 \fi
423 \ifcase\c_strc_constructions_nested_state
424 \c_strc_constructions_nested_state\plusone
425 \or
426 \c_strc_constructions_nested_state\plustwo
427 \fi
428 \strc_constructions_close_symbol_reset
429
430 \edef\p_strc_constructions_headalign{\constructionparameter\c!headalign}
431
432 \directsetup\p_strc_constructions_renderingsetup\relax
433
434 \edef\p_strc_constructions_indenting{\constructionparameter\c!indenting}
435 \ifempty\p_strc_constructions_indenting \else
436 \indenting[\p_strc_constructions_indenting]
437 \fi
438
439 \dostoptagged
440 \dostarttagged\t!constructioncontent\empty
441
442 \updateparagraphshapes
443 \ignorespaces}
444
445\protected\defcsname\??constructionstophandler\v!construction\endcsname
446 {\strc_constructions_close_symbol_place
447 \doifnot{\constructionparameter\c!display}\v!no\par
448 \dostoptagged
449 \dostoptagged
450 \endgroup
451 \constructionparameter\c!after
452 \useindentnextparameter\constructionparameter
453 \strc_constructions_finalize
454
455 \dorechecknextindentation}
456
457\permanent\protected\def\boxedconstructionhead#1
458 {\doifelse{\constructionalternativeparameter\c!alignbottom}{\v!yes}\vbox\vtop
459 {\hsize\constructionsheadwidth
460 \edef\p_strc_constructions_headalign{\constructionparameter\c!headalign}
461 \ifempty\p_strc_constructions_headalign \else
462 \setupalign[\p_strc_constructions_headalign]
463 \fi
464 #1}}
465
466\installcorenamespace{constructionalternative}
467\installcorenamespace{constructionrenderings}
468
469
470
471
472
473\installcommandhandler \??constructionalternative {constructionalternative} \??constructionalternative
474
475\setupconstructionalternative
476 [
477
478 \c!width=\constructionparameter\c!width,
479 \c!distance=\constructionparameter\c!distance,
480 \c!stretch=\constructionparameter\c!stretch,
481 \c!shrink=\constructionparameter\c!shrink]
482
483\defineconstructionalternative
484 [\v!left]
485 [
486
487 \c!renderingsetup=\??constructionrenderings:\v!left]
488
489\defineconstructionalternative
490 [\v!right]
491 [
492
493 \c!renderingsetup=\??constructionrenderings:\v!right]
494
495\defineconstructionalternative
496 [\v!inmargin]
497 [\c!renderingsetup=\??constructionrenderings:\v!inmargin]
498
499\defineconstructionalternative
500 [\v!inleft]
501 [\c!renderingsetup=\??constructionrenderings:\v!inleft]
502
503\defineconstructionalternative
504 [\v!inright]
505 [\c!renderingsetup=\??constructionrenderings:\v!inright]
506
507\defineconstructionalternative
508 [\v!margin]
509 [\c!renderingsetup=\??constructionrenderings:\v!margin]
510
511\defineconstructionalternative
512 [\v!leftmargin]
513 [\c!renderingsetup=\??constructionrenderings:\v!leftmargin]
514
515\defineconstructionalternative
516 [\v!rightmargin]
517 [\c!renderingsetup=\??constructionrenderings:\v!rightmargin]
518
519\defineconstructionalternative
520 [\v!innermargin]
521 [\c!renderingsetup=\??constructionrenderings:\v!innermargin]
522
523\defineconstructionalternative
524 [\v!outermargin]
525 [\c!renderingsetup=\??constructionrenderings:\v!outermargin]
526
527\defineconstructionalternative
528 [\v!serried]
529 [\c!renderingsetup=\??constructionrenderings:\v!serried]
530
531\defineconstructionalternative
532 [\v!hanging]
533 [
534 \c!renderingsetup=\??constructionrenderings:\v!hanging]
535
536\defineconstructionalternative
537 [\v!top]
538 [\c!renderingsetup=\??constructionrenderings:\v!top,
539 \c!width=\localhsize]
540
541\defineconstructionalternative
542 [\v!command]
543 [\c!renderingsetup=\??constructionrenderings:\v!command]
544
545\defineconstructionalternative
546 [\v!empty]
547 [\c!renderingsetup=\??constructionrenderings:\v!empty]
548
549\defineconstructionalternative
550 [\v!label]
551 [\c!renderingsetup=\??constructionrenderings:\v!label,
552 \c!width=]
553
554\newbox \constructionheadbox
555\newskip \leftconstructionskip
556\newskip \rightconstructionskip
557\newdimen \constructionsheadwidth
558\newdimen \constructionsheaddistance
559
560\def\strc_constructions_set_hang_box#1
561 {\setbox\constructionheadbox\vtop
562 {\forgetall
563 \dontcomplain
564 \hsize\constructionsheadwidth\relax
565 \ifempty\p_strc_constructions_headalign
566 \setupalign[#1]
567 \else
568 \setupalign[\p_strc_constructions_headalign]
569 \fi
570 \ifconditional\c_strc_constructions_distance_none \else
571 \advance\ifx#1\v!flushleft\rightskip\else\leftskip\fi\constructionsheaddistance
572 \fi
573 \flushconstructionheadbox}
574 \setbox\constructionheadbox\hpack{\box\constructionheadbox}
575 \ht\constructionheadbox\strutht
576 \dp\constructionheadbox\strutdp}
577
578\def\strc_constructions_set_pure_box#1
579 {\setbox\constructionheadbox\vtop
580 {\forgetall
581 \dontcomplain
582 \hsize\constructionsheadwidth\relax
583 \ifempty\p_strc_constructions_headalign
584 \setupalign[#1]
585 \else
586 \setupalign[\p_strc_constructions_headalign]
587 \fi
588 \flushconstructionheadbox}
589 \setbox\constructionheadbox\hpack{\box\constructionheadbox}
590 \ht\constructionheadbox\strutht
591 \dp\constructionheadbox\strutdp}
592
593\def\strc_constructions_set_hang#1
594 {\ifempty\p_strc_constructions_hang
595
596 \orelse\ifx\p_strc_constructions_hang\v!fit
597 \scratchdimen\htdp\constructionheadbox
598 \getnoflines\scratchdimen
599 \hangafter\noflines
600 \orelse\ifx\p_strc_constructions_hang\v!broad
601 \scratchdimen\dimexpr\htdp\constructionheadbox.5\strutht\relax
602 \getnoflines\scratchdimen
603 \hangafter\noflines
604 \else
605 \hangafter\p_strc_constructions_hang
606 \fi
607 \relax
608 \hangindent\ifx#1\v!right\fi\constructionsheadwidth}
609
610\permanent\protected\def\flushconstructionheadbox
611 {\ifhbox\constructionheadbox\unhbox\else\box\fi\constructionheadbox}
612
613
614
615
616
617
618
619
620
621\startsetups[\??constructionrenderings:\v!left]
622 \edef\p_strc_constructions_hang{\constructionparameter\c!hang}
623 \doifelsesetups{\??constructionrenderings:\v!left:\p_strc_constructions_hang} {
624 \directsetup{\??constructionrenderings:\v!left:\p_strc_constructions_hang}
625 } {
626 \directsetup{\??constructionrenderings:\v!left:\v!hanging}
627 }
628\stopsetups
629
630\startsetups[\??constructionrenderings:\v!right]
631 \edef\p_strc_constructions_hang{\constructionparameter\c!hang}
632 \doifelsesetups{\??constructionrenderings:\v!right:\p_strc_constructions_hang} {
633 \directsetup{\??constructionrenderings:\v!right:\p_strc_constructions_hang}
634 } {
635 \directsetup{\??constructionrenderings:\v!right:\v!hanging}
636 }
637\stopsetups
638
639\startsetups[\??constructionrenderings:\v!left:\v!none]
640 \enforced\let\\\crlf
641 \noindent
642 \strc_constructions_set_pure_box\v!flushleft
643 \leftskip\dimexpr\leftconstructionskip\constructionsheadwidth\constructionsheaddistance\relax
644 \rightskip\rightconstructionskip\relax
645 \llap {
646 \hpack to \leftskip {
647 \hskip\leftconstructionskip
648 \box\constructionheadbox
649 \hss
650 }
651 }
652 \nobreak
653 \useconstructionstyleandcolor\c!style\c!color
654 \ignorespaces
655\stopsetups
656
657\startsetups[\??constructionrenderings:\v!left:0]
658 \directsetup{\??constructionrenderings:\v!left:\v!none}
659\stopsetups
660
661\startsetups[\??constructionrenderings:\v!left:]
662 \directsetup{\??constructionrenderings:\v!left:\v!none}
663\stopsetups
664
665\startsetups[\??constructionrenderings:\v!right:\v!none]
666 \enforced\let\\\crlf
667 \noindent
668 \leftskip\leftconstructionskip
669 \rightskip\dimexpr\rightconstructionskip\constructionsheadwidth\relax
670
671 \strc_constructions_set_pure_box\v!flushright
672 \rlap {
673 \hskip\dimexpr\hsize\leftskip\rightskip\relax
674 \copy\constructionheadbox
675 \hskip\rightconstructionskip
676 }
677 \nobreak
678 \advance\rightskip \constructionsheaddistance
679 \useconstructionstyleandcolor\c!style\c!color
680 \ignorespaces
681\stopsetups
682
683\startsetups[\??constructionrenderings:\v!right:0]
684 \directsetup{\??constructionrenderings:\v!right:\v!none}
685\stopsetups
686
687\startsetups[\??constructionrenderings:\v!right:]
688 \directsetup{\??constructionrenderings:\v!right:\v!none}
689\stopsetups
690
691\startsetups[\??constructionrenderings:\v!left:\v!margin]
692 \enforced\let\\\crlf
693 \noindent
694 \strc_constructions_set_pure_box\v!flushleft
695 \llap {
696 \hpack to \constructionsheadwidth {
697 \box\constructionheadbox
698 \hss
699 }
700 \hskip\constructionsheaddistance
701 }
702 \useconstructionstyleandcolor\c!style\c!color
703 \ignorespaces
704\stopsetups
705
706\startsetups[\??constructionrenderings:\v!right:\v!margin]
707 \enforced\let\\\crlf
708 \noindent
709 \strc_constructions_set_pure_box\v!flushright
710 \rlap {
711 \hskip\constructionsheaddistance
712 \hpack to \constructionsheadwidth {
713 \box\constructionheadbox
714 \hss
715 }
716 }
717 \useconstructionstyleandcolor\c!style\c!color
718 \ignorespaces
719\stopsetups
720
721\startsetups[\??constructionrenderings:\v!left:\v!hanging]
722 \enforced\let\\\crlf
723 \dontcomplain
724 \advance\constructionsheadwidth \constructionsheaddistance
725 \strc_constructions_set_hang_box\v!flushleft
726 \strc_constructions_set_hang\v!left
727 \noindent
728 \llap {
729 \tpack to \zeropoint {
730 \box\constructionheadbox
731 }
732 }
733 \nobreak
734 \useconstructionstyleandcolor\c!style\c!color
735 \ignorespaces
736\stopsetups
737
738\startsetups[\??constructionrenderings:\v!right:\v!hanging]
739 \enforced\let\\\crlf
740 \dontcomplain
741 \advance\constructionsheadwidth \constructionsheaddistance
742 \strc_constructions_set_hang_box\v!flushright
743 \strc_constructions_set_hang\v!right
744 \noindent
745 \rlap {
746 \hpack to \dimexpr\hsize\leftskip\rightskip\relax {
747 \hss
748 \tpack to \zeropoint {
749 \box\constructionheadbox
750 }
751 }
752 }
753 \nobreak
754 \useconstructionstyleandcolor\c!style\c!color
755 \ignorespaces
756\stopsetups
757
758\startsetups[\??constructionrenderings:\v!top]
759
760 \enforced\let\\\space
761 \noindent
762 \copy\constructionheadbox
763 \par
764 \nobreak
765 \edef\p_strc_constructions_inbetween{\constructionparameter\c!inbetween}
766 \ifempty\p_strc_constructions_inbetween \else
767 \p_strc_constructions_inbetween
768
769 \directcheckedvspacing\v!samepage
770 \fi
771 \useconstructionstyleandcolor\c!style\c!color
772 \ignorespaces
773\stopsetups
774
775
776
777\startsetups[\??constructionrenderings:\v!margin]
778 \enforced\let\\\crlf
779 \noindent
780 \inmargin[\c!scope=\v!local]{\flushconstructionheadbox}
781 \useconstructionstyleandcolor\c!style\c!color
782 \ignorespaces
783\stopsetups
784
785\startsetups[\??constructionrenderings:\v!leftmargin]
786 \enforced\let\\\crlf
787 \noindent
788 \inleft[\c!scope=\v!local]{\flushconstructionheadbox}
789 \useconstructionstyleandcolor\c!style\c!color
790 \ignorespaces
791\stopsetups
792
793\startsetups[\??constructionrenderings:\v!rightmargin]
794 \enforced\let\\\crlf
795 \noindent
796 \inright[\c!scope=\v!local]{\flushconstructionheadbox}
797 \useconstructionstyleandcolor\c!style\c!color
798 \ignorespaces
799\stopsetups
800
801\startsetups[\??constructionrenderings:\v!innermargin]
802 \enforced\let\\\crlf
803 \noindent
804 \ininner[\c!scope=\v!local]{\flushconstructionheadbox}
805 \useconstructionstyleandcolor\c!style\c!color
806 \ignorespaces
807\stopsetups
808
809\startsetups[\??constructionrenderings:\v!outermargin]
810 \enforced\let\\\crlf
811 \noindent
812 \inouter[\c!scope=\v!local]{\flushconstructionheadbox}
813 \useconstructionstyleandcolor\c!style\c!color
814 \ignorespaces
815\stopsetups
816
817\startsetups[\??constructionrenderings:\v!inmargin]
818 \directsetup{\??constructionrenderings:\v!margin}
819\stopsetups
820
821\startsetups[\??constructionrenderings:\v!inleft]
822 \directsetup{\??constructionrenderings:\v!leftmargin}
823\stopsetups
824
825\startsetups[\??constructionrenderings:\v!inright]
826 \directsetup{\??constructionrenderings:\v!rightmargin}
827\stopsetups
828
829\startsetups[\??constructionrenderings:\v!serried]
830
831 \edef\p_strc_constructions_width{\constructionparameter\c!width}
832 \doifelsesetups{\??constructionrenderings:\v!serried:\p_strc_constructions_width} {
833 \directsetup{\??constructionrenderings:\v!serried:\p_strc_constructions_width}
834 } {
835 \directsetup{\??constructionrenderings:\v!serried:\v!wide}
836 }
837\stopsetups
838
839\startsetups[\??constructionrenderings:\v!serried:\v!fit]
840 \enforced\let\\\crlf
841 \noindent
842 \flushconstructionheadbox
843 \nobreak
844 \hskip\constructionsheaddistance\relax
845 \useconstructionstyleandcolor\c!style\c!color
846 \ignorespaces
847\stopsetups
848
849\startsetups[\??constructionrenderings:\v!serried:\v!broad]
850 \enforced\let\\\crlf
851 \noindent
852 \flushconstructionheadbox
853 \ifconditional\c_strc_constructions_distance_none \else
854 \nobreak
855 \hskip\constructionsheaddistance
856 \s!plus \constructionalternativeparameter\c!stretch\constructionsheaddistance
857 \s!minus\constructionalternativeparameter\c!shrink \constructionsheaddistance
858 \relax
859 \fi
860 \useconstructionstyleandcolor\c!style\c!color
861 \ignorespaces
862\stopsetups
863
864\startsetups[\??constructionrenderings:\v!serried:]
865 \directsetup{\??constructionrenderings:\v!serried:\v!broad}
866\stopsetups
867
868\startsetups[\??constructionrenderings:\v!serried:\v!wide]
869 \enforced\let\\\crlf
870 \noindent
871 \hbox to \constructionsheadwidth {
872 \flushconstructionheadbox
873 \hss
874 }
875 \nobreak
876 \hskip\constructionsheaddistance\relax
877 \useconstructionstyleandcolor\c!style\c!color
878 \ignorespaces
879\stopsetups
880
881\startsetups[\??constructionrenderings:\v!hanging]
882
883 \enforced\let\\\crlf
884 \noindent
885 \advance\leftskip\leftskipadaption\relax
886 \ifdim\leftskipadaption=\zeropoint
887 \leftskipadaption1.5\emwidth\relax
888 \ifnum\c_strc_constructions_nested_state=\plusone
889 \ifdim\leftskip>\zeropoint \relax
890 \leftskipadaption\leftskip
891 \fi
892 \fi
893 \fi
894 \ifnum\c_strc_constructions_nested_state>\zerocount
895 \advance\leftskip\leftskipadaption
896 \fi
897 \hskip\leftskipadaption\relax
898 \ifhbox\constructionheadbox \unhbox\else\box\fi\constructionheadbox
899 \ifconditional\c_strc_constructions_distance_none \else
900
901 \scratchdistance\ifdim\constructionsheaddistance=\zeropoint .75\emwidth\else\constructionsheaddistance\fi
902 \hskip \scratchdistance
903 \s!plus \constructionalternativeparameter\c!stretch\scratchdistance
904 \s!minus\constructionalternativeparameter\c!shrink \scratchdistance
905 \fi
906 \ifhmode
907 \ifx\p_strc_constructions_width\v!line
908 \hfill\break
909 \else
910 \allowbreak
911 \fi
912 \fi
913 \useconstructionstyleandcolor\c!style\c!color
914 \ignorespaces
915\stopsetups
916
917
918
919
920
921\startsetups[\??constructionrenderings:\v!command]
922 \noindent
923 \constructionparameter\c!headcommand{\flushconstructionheadbox}
924 \useconstructionstyleandcolor\c!style\c!color
925 \ignorespaces
926\stopsetups
927
928\startsetups[\??constructionrenderings:\v!empty]
929 \noindent
930 \useconstructionstyleandcolor\c!style\c!color
931 \ignorespaces
932\stopsetups
933
934\startsetups[\??constructionrenderings:\v!label]
935 \dontleavehmode
936 \begingroup
937 \constructionparameter\c!headcommand{\flushconstructionheadbox}
938 \endgroup
939\stopsetups
940
941\ifcase\contextlmtxmode \else
942
943\fi
944
945
946
947
948
949
950
951\defineconstructionalternative
952 [\v!right:\v!bottom]
953 [
954
955 \c!alignbottom=\v!yes,
956 \c!renderingsetup=\??constructionrenderings:\v!right:\v!bottom]
957
958\startsetups[\??constructionrenderings:\v!right:\v!bottom]
959 \enforced\let\\\crlf
960 \noindent
961 \leftskip\leftconstructionskip
962 \rightskip\dimexpr\rightconstructionskip\constructionsheadwidth\constructionsheaddistance\relax
963 \parfillskip\zeropoint
964 \strc_constructions_set_pure_box\v!flushright
965 \directparwrapper \relax {
966 \hfilll
967 \rlap
968 {\kern\constructionsheaddistance
969 \copy\constructionheadbox}
970 }
971 \useconstructionstyleandcolor\c!style\c!color
972 \ignorespaces
973\stopsetups
974
975
976
977
978
979
980
981\installcorenamespace{constructionclosesymbol}
982
983\mutable\let\placeclosesymbol\donothing
984\mutable\let\qed \donothing
985
986\def\strc_constructions_close_symbol_reset
987 {\global\expandafter\settrue\csname\??constructionclosesymbol\currentconstruction\endcsname
988 \let\placeclosesymbol\strc_constructions_close_symbol_place
989 \let\qed \strc_constructions_close_symbol_place}
990
991\protected\def\strc_constructions_close_symbol_place
992 {\ifconditional\csname\??constructionclosesymbol\currentconstruction\endcsname
993 \global\expandafter\setfalse\csname\??constructionclosesymbol\currentconstruction\endcsname
994 \edef\p_strc_constructions_closesymbol{\constructionparameter\c!closesymbol}
995 \ifempty\p_strc_constructions_closesymbol \else
996 \constructionparameter\c!closecommand{\p_strc_constructions_closesymbol}
997 \fi
998 \fi}
999
1000\newif\ifnoconstructioncaption
1001
1002
1003
1004\mutable\let\currentconstructionlistentry\!!zerocount
1005
1006\protected\def\strc_constructions_register
1007 {\clf_doifelselisthasentry\numexpr\currentconstructionlistentry\relax
1008 \strc_constructions_register_nop
1009 \strc_constructions_register_yes}
1010
1011
1012
1013\def\strc_constructions_register_nop[#1][#2]
1014
1015 {}
1016
1017\def\strc_constructions_discard
1018 {\iftrialtypesetting
1019
1020 \clf_discardfromlist\currentconstructionlistentry\relax
1021 \fi}
1022
1023\let\currentconstructionlistnumber \!!zerocount
1024\let\currentconstructionsynchronize\relax
1025\let\currentconstructionattribute \attributeunsetvalue
1026
1027\def\strc_constructions_register_yes[#1][#2]
1028 {\begingroup
1029 \setupcurrentconstruction[#2]
1030 \xdef\currentconstructionexpansion {\constructionparameter\c!expansion}
1031 \xdef\currentconstructionxmlsetup {\constructionparameter\c!xmlsetup}
1032 \xdef\currentconstructioncatcodes {\constructionparameter\s!catcodes}
1033 \xdef\currentconstructionlabel {\constructionparameter\c!label}
1034 \xdef\currentconstructionreference {\constructionparameter\c!reference}
1035 \xdef\currentconstructionreferencetext {\constructionparameter\c!referencetext}
1036 \xdef\currentconstructionreferenceprefix{\constructionparameter\c!referenceprefix}
1037
1038 \xdef\currentconstructionincrementnumber{\constructionparameter\c!incrementnumber}
1039
1040 \ifempty\currentconstructionexpansion
1041 \glet\currentconstructionexpansion\v!no
1042 \fi
1043
1044 \ifempty\currentconstructionreferenceprefix
1045 \glet\currentconstructionreferenceprefix\referenceprefix
1046 \fi
1047 \ifx\currentconstructionexpansion\s!xml
1048 \xmlstartraw
1049 \xdef\currentconstructiontitle {\constructionparameter\c!title}
1050 \xdef\currentconstructionbookmark {\constructionparameter\c!bookmark}
1051 \xdef\currentconstructionmarking {\constructionparameter\c!marking}
1052 \xdef\currentconstructionlist {\constructionparameter\c!list}
1053 \xdef\currentconstructionreferencetext{\constructionparameter\c!referencetext}
1054 \xmlstopraw
1055 \ifempty\currentconstructionlist
1056 \glet\currentconstructionlist\currentconstructiontitle
1057 \fi
1058 \glet\currentconstructioncoding\s!xml
1059 \else
1060 \ifx\currentconstructionexpansion\v!yes
1061 \xdef\currentconstructiontitle {\constructionparameter\c!title}
1062 \xdef\currentconstructionbookmark {\constructionparameter\c!bookmark}
1063 \xdef\currentconstructionmarking {\constructionparameter\c!marking}
1064 \xdef\currentconstructionlist {\constructionparameter\c!list}
1065 \xdef\currentconstructionreferencetext{\constructionparameter\c!referencetext}
1066 \else
1067 \xdef\currentconstructiontitle {\detokenizedconstructionparameter\c!title}
1068 \xdef\currentconstructionbookmark {\detokenizedconstructionparameter\c!bookmark}
1069 \xdef\currentconstructionmarking {\detokenizedconstructionparameter\c!marking}
1070 \xdef\currentconstructionlist {\detokenizedconstructionparameter\c!list}
1071 \xdef\currentconstructionreferencetext{\detokenizedconstructionparameter\c!referencetext}
1072 \iflocation \ifempty\currentconstructionbookmark
1073 \begingroup
1074 \simplifycommands
1075 \xdef\currentconstructionbookmark{\detokenize\expandafter{\normalexpanded{\constructionparameter\c!title}}}
1076 \endgroup
1077 \fi \fi
1078 \fi
1079 \ifempty\currentconstructionlist
1080 \glet\currentconstructionlist\currentconstructiontitle
1081 \fi
1082 \glet\currentconstructioncoding\s!tex
1083 \fi
1084
1085 \ifx\currentconstructiontitle\v!none
1086 \global\noconstructioncaptiontrue
1087 \fi
1088
1089 \ifnoconstructioncaption
1090 \endgroup
1091 \let\currentconstructionlistnumber \relax
1092 \let\currentconstructionsynchronize\relax
1093 \let\currentconstructionattribute \relax
1094 \else
1095 \setnextinternalreferences{construction}\currentconstructionmain
1096 \relax
1097 \scratchcounter\clf_addtolist
1098 metadata {
1099 kind {construction}
1100 name {\currentconstructionmain}
1101
1102 catcodes \catcodetable
1103 }
1104 references {
1105 internal \locationcount
1106 order \locationorder
1107 reference {\currentconstructionreference}
1108 prefix {\currentconstructionreferenceprefix}
1109
1110
1111 }
1112 titledata {
1113 label {\detokenize\expandafter{\currentconstructionlabel}}
1114 title {\detokenize\expandafter{\currentconstructiontitle}}
1115 \ifx\currentconstructionbookmark\currentconstructiontitle \else
1116 bookmark {\detokenize\expandafter{\currentconstructionbookmark}}
1117 \fi
1118 \ifx\currentconstructionreferencetext\currentconstructiontitle \else
1119 reference {\detokenize\expandafter{\currentconstructionreferencetext}}
1120 \fi
1121 \ifx\currentconstructionlist\currentconstructiontitle \else
1122 list {\detokenize\expandafter{\currentconstructionlist}}
1123 \fi
1124 }
1125 \ifconditional\c_strc_constructions_number_state
1126 prefixdata {
1127 prefix {\constructionparameter\c!prefix}
1128 separatorset {\constructionparameter\c!prefixseparatorset}
1129 conversion {\constructionparameter\c!prefixconversion}
1130 conversionset {\constructionparameter\c!prefixconversionset}
1131 set {\constructionparameter\c!prefixset}
1132 segments {\constructionparameter\c!prefixsegments}
1133 connector {\constructionparameter\c!prefixconnector}
1134 }
1135 numberdata {
1136 numbers {\currentconstructionnumber}
1137 separatorset {\constructionparameter\c!numberseparatorset}
1138 conversion {\constructionparameter\c!numberconversion}
1139 conversionset {\constructionparameter\c!numberconversionset}
1140 starter {\constructionparameter\c!numberstarter}
1141 stopper {\constructionparameter\c!numberstopper}
1142 segments {\constructionparameter\c!numbersegments}
1143 }
1144 \or
1145
1146 \fi
1147 userdata {\detokenize{#1}}
1148 \relax
1149
1150 \clf_setinternalreference
1151 prefix {\currentconstructionreferenceprefix}
1152 reference {\currentconstructionreference}
1153 internal \locationcount
1154 view {\interactionparameter\c!focus}
1155 \relax
1156 \normalexpanded {
1157 \endgroup
1158 \edef\noexpand\currentconstructionlistentry {\the\scratchcounter}
1159 \edef\noexpand\currentconstructionattribute {\the\lastdestinationattribute}
1160 \edef\noexpand\currentconstructionsynchronize{\clf_deferredenhancelist\the\scratchcounter}
1161 }
1162 \fi}
1163
1164
1165
1166
1167
1168\permanent\protected\def\reinstateconstructionnumberentry#1
1169 {\edef\currentconstructionattribute {\clf_getinternallistreference#1}
1170 \edef\currentconstructionsynchronize{\clf_deferredenhancelist\number#1}}
1171
1172\permanent\protected\def\reinstatecachedconstructionnumberentry#1
1173 {\edef\currentconstructionattribute {\clf_getinternalcachedlistreference#1}
1174 \edef\currentconstructionsynchronize{\clf_deferredenhancelist\number#1}}
1175
1176\installstructurelistprocessor{construction}{\usestructurelistprocessor{numbertitle}}
1177
1178
1179
1180\def\currentconstructionnumber{\constructionparameter\s!counter}
1181
1182\protected\def\strc_constructions_next_indeed #get#tag#level{\strc_counters_increment_sub{#get{#tag}\s!counter}{#level}}
1183\protected\def\strc_constructions_reset_indeed#get#tag#level{\strc_counters_reset_sub {#get{#tag}\s!counter}{#level}}
1184
1185\protect \endinput
1186 |