1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\writestatus{loading}{ConTeXt Buffer Macros Verbatim}
17
18\registerctxluafile{buffver}{autosuffix}
19
20\unprotect
21
22\startcontextdefinitioncode
23
24\definesystemattribute[verbatimline][public]
25
26\appendtoks
27 \c_attr_verbatimline\attributeunsetvalue
28\to \everyforgetall
29
30
31
32\installcorenamespace{typinglines}
33\installcorenamespace{typingspace}
34
35\newtoks\everyinitializeverbatim
36
37\appendtoks
38 \expand\everyresettypesetting
39 \resetfontfeature
40 \resetcharacterspacing
41 \resetbreakpoints
42 \nohyphencollapsing
43
44 \parpasses\zerocount
45 \noexpansion
46 \noprotrusion
47
48\to \everyinitializeverbatim
49
50\permanent\protected\def\setverbatimspaceskip
51 {\spaceskip\scaledfontcharwd\fontx\relax
52 \xspaceskip\spaceskip}
53
54\defcsname\??typinglines\v!no \endcsname{\buff_verbatim_ignore_hyphens}
55\defcsname\??typinglines\v!normal \endcsname{\buff_verbatim_ignore_hyphens}
56\defcsname\??typinglines\v!yes \endcsname{\buff_verbatim_obey_breakpoints}
57\defcsname\??typinglines\v!hyphenated\endcsname{\buff_verbatim_obey_hyphens}
58
59\defcsname\??typingspace\v!on \endcsname{\enforced\let\obeyedspace\specialcontrolspace}
60\defcsname\??typingspace\v!stretch \endcsname{\enforced\let\obeyedspace\specialstretchedspace}
61\letcsname\??typingspace\v!normal \endcsname\donothing
62\defcsname\??typingspace\v!fixed \endcsname{\enforced\let\obeyedspace\specialfixedspace}
63\defcsname\??typingspace\v!character \endcsname{\enforced\chardef\obeyedspace\spaceasciicode}
64
65\protected\def\buff_verbatim_obey_hyphens
66 {}
67
68\protected\def\buff_verbatim_obey_breakpoints
69 {\nohyphens
70 \veryraggedright}
71
72\protected\def\buff_verbatim_ignore_hyphens
73 {\nohyphens}
74
75\def\buff_verbatim_initialize_type_one
76 {\enforced\let\obeylines\ignorelines
77 \edef\p_buff_option{\typeparameter\c!option}
78 \ifx\p_buff_option\v!none
79 \usetypestyleandcolor\c!style\c!color
80 \orelse\ifempty\p_buff_option
81 \usetypestyleandcolor\c!style\c!color
82 \else
83 \usetypestyleparameter\c!style
84 \fi
85 \setcatcodetable\vrbcatcodes}
86
87\def\buff_verbatim_initialize_type_two
88 {\spaceskip.5\emwidth\relax
89 \enforced\let\obeyedspace\specialobeyedspace
90 \enforced\let\controlspace\specialcontrolspace
91 \begincsname\??typinglines\typeparameter\c!lines\endcsname
92 \begincsname\??typingspace\typeparameter\c!space\endcsname
93 \relax\expand\everyinitializeverbatim\relax
94 \usesetupsparameter\typeparameter\relax}
95
96\permanent\protected\def\doinitializeverbatim
97 {\buff_verbatim_initialize_type_one
98 \buff_verbatim_initialize_type_two}
99
100\let\buff_verbatim_set_line_margin\relax
101
102\def\buff_verbatim_set_line_margin_indeed
103 {\hskip\doifelseoddpage\d_buff_lines_odd_margin\d_buff_lines_even_margin\relax}
104
105\newconditional\c_buff_lines_as_paragraph
106
107\newdimension\d_buff_lines_even_margin
108\newdimension\d_buff_lines_odd_margin
109
110\def\buff_verbatim_initialize_typing_one
111 {\usebodyfontparameter\typingparameter
112 \d_buff_lines_odd_margin {\typingparameter\c!oddmargin }
113 \d_buff_lines_even_margin{\typingparameter\c!evenmargin}
114 \ifzerodim\d_buff_lines_odd_margin\else
115 \let\buff_verbatim_set_line_margin\buff_verbatim_set_line_margin_indeed
116 \fi
117 \ifzerodim\d_buff_lines_even_margin\else
118 \let\buff_verbatim_set_line_margin\buff_verbatim_set_line_margin_indeed
119 \fi
120 \ifrelax\buff_verbatim_set_line_margin
121 \doadaptleftskip{\typingparameter\c!margin}
122 \fi
123 \edef\p_buff_option{\typingparameter\c!option}
124 \ifx\p_buff_option\v!none
125 \usetypingstyleandcolor\c!style\c!color
126 \orelse\ifempty\p_buff_option
127 \usetypingstyleandcolor\c!style\c!color
128 \else
129 \usetypingstyleparameter\c!style
130 \fi
131
132 \hbadnessmode\overfullbadnessmodecode
133 \edef\p_align{\typingparameter\c!align}
134 \unless\ifconditional\c_buff_lines_as_paragraph
135 \dousealignparameter\p_align
136 \orelse\ifx\p_align\v!hangleft
137 \dousealignparameter{\v!hangleft range}
138 \orelse\ifx\p_align\v!hangright
139 \dousealignparameter{\v!hangright range}
140 \else
141 \dousealignparameter\p_align
142 \fi}
143
144\def\buff_verbatim_initialize_typing_two
145 {\spaceskip.5\emwidth\relax
146 \enforced\let\obeyedspace\specialobeyedspace
147 \enforced\let\controlspace\specialcontrolspace
148 \begincsname\??typinglines\typingparameter\c!lines\endcsname
149 \begincsname\??typingspace\typingparameter\c!space\endcsname
150 \relax\expand\everyinitializeverbatim\relax
151 \usesetupsparameter\typingparameter\relax}
152
153
154
155
156
157
158\installcorenamespace{type}
159
160\installcommandhandler \??type {type} \??type
161
162\appendtoks
163 \frozen\instance\protected\edefcsname\currenttype\endcsname{\buff_verbatim_type{\currenttype}}
164\to \everydefinetype
165
166\appendtoks
167 \buff_verbatim_initialize_visualizer{\typeparameter\c!option}
168\to \everysetuptype
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186\installcorenamespace{typing}
187
188\installcommandhandler \??typing {typing} \??typing
189
190\appendtoks
191 \frozen\protected\instance\edefcsname\e!start\currenttyping\endcsname{\buff_verbatim_typing_start{\currenttyping}{\currenttyping}}
192 \frozen\protected\instance\edefcsname\e!stop \currenttyping\endcsname{\buff_verbatim_typing_stop}
193 \ifempty\currenttypingparent
194 \normalexpanded{\definelinenumbering[\currenttyping]}
195 \else
196 \normalexpanded{\definelinenumbering[\currenttyping][\currenttypingparent]}
197 \fi
198\to \everydefinetyping
199
200\appendtoks
201 \buff_verbatim_initialize_visualizer{\typingparameter\c!option}
202\to \everysetuptyping
203
204\def\buff_verbatim_initialize_visualizer#1
205 {\ifproductionrun\clf_loadvisualizer{#1}\fi}
206
207\permanent\protected\def\doifelsevisualizer#1
208 {\clf_doifelsevisualizer{#1}}
209
210\aliased\let\doifvisualizerelse\doifelsevisualizer
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271\def\buff_verbatim_left_of_type
272 {\typeparameter\c!left
273 \typeparameter\c!command\bgroup}
274
275\def\buff_verbatim_right_of_type
276 {\egroup
277 \typeparameter\c!right}
278
279\permanent\protected\def\type{\buff_verbatim_type\empty}
280\permanent\protected\def\typ {\buff_verbatim_typ \empty}
281
282\protected\def\buff_verbatim_type#1
283 {\dontleavehmode
284 \bgroup
285 \cdef\currenttype{#1}
286 \buff_verbatim_type_indeed}
287
288\def\buff_verbatim_typ#1
289 {\dontleavehmode
290 \bgroup
291 \cdef\currenttype{#1}
292 \lettypeparameter\c!lines\v!hyphenated
293 \enforced\let\specialobeyedspace\specialstretchedspace
294 \buff_verbatim_type_indeed}
295
296\tolerant\def\buff_verbatim_type_indeed[#S#1]
297 {\ifarguments\or\setupcurrenttype[#1]\fi
298 \buff_verbatim_left_of_type
299 \futureexpand\bgroup\buff_verbatim_type_a\buff_verbatim_type_one}
300
301\def\buff_verbatim_type_one
302 {\catcode\lessthanasciicode\othercatcode
303 \catcode\morethanasciicode\othercatcode
304 \futureexpandis<\buff_verbatim_type_b\buff_verbatim_type_c}
305
306\def\buff_verbatim_type_three
307 {\if\next<
308 \expandafter\buff_verbatim_type_b
309 \else
310 \expandafter\buff_verbatim_type_c
311 \fi}
312
313\def\buff_verbatim_type_a
314 {\buff_verbatim_initialize_type_one
315 \setcatcodetable\tpacatcodes
316 \buff_verbatim_type_normal}
317
318\def\buff_verbatim_type_b#1
319 {\buff_verbatim_initialize_type_one
320 \setcatcodetable\tpbcatcodes
321 \buff_verbatim_type_nested}
322
323\def\buff_verbatim_type_c#1
324 {\buff_verbatim_initialize_type_one
325 \setcatcodetable\vrbcatcodes
326 \def\next##1#1{\buff_verbatim_type_normal{##1}}
327 \next}
328
329\def\buff_verbatim_type_normal#1
330 {\buff_verbatim_initialize_type_two
331 \dostarttaggedchained\t!verbatim\currenttype\currenttype\??type
332 \clf_type
333 data {\protecteddetokenize{#1}}
334 tab {\typeparameter\c!tab}
335 method {\p_buff_option}
336 compact {\typeparameter\c!compact}
337 escape {\typeparameter\c!escape}
338
339 \relax
340 \dostoptagged
341 \buff_verbatim_right_of_type
342 \egroup}
343
344\def\buff_verbatim_type_nested#1
345 {\buff_verbatim_initialize_type_two
346 \dostarttaggedchained\t!verbatim\currenttype\currenttype\??type
347 \clf_type
348 data {\detokenize{#1}}
349
350 tab {\typeparameter\c!tab}
351 method {\p_buff_option}
352 escape {\typeparameter\c!escape}
353
354 method {nested}
355 \relax
356 \dostoptagged
357 \buff_verbatim_right_of_type
358 \egroup
359 \gobbleoneargument}
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382\permanent\protected\def\specialfixedspace {\kern\interwordspace\relax}
383\permanent\protected\def\specialobeyedspace {\hskip\interwordspace\relax}
384\permanent\protected\def\specialstretchedspace {\hskip.5\interwordspace\s!plus.125\interwordspace\relax}
385\permanent\protected\def\specialcontrolspace {\normalcontrolspace\allowbreak}
386
387\permanent\protected\def\explicitfixedspace {\asciispacechar}
388\permanent\protected\def\explicitobeyedspace {\asciispacechar\allowbreak}
389\permanent\protected\def\explicitstretchedspace{\asciispacechar\hskip\zeropoint\s!plus.125\interwordspace\relax}
390\permanent\protected\def\explicitcontrolspace {\optionalcontrolspace\allowbreak}
391
392\appendtoks
393 \enforced\protected\def\obeyedspace{\hskip\zeroskip\relax\asciispacechar\hskip\zeroskip\relax}
394\to \everyenableelements
395
396\permanent\protected\def\obeyhyphens
397 {\enforced\let\obeyedspace \specialobeyedspace
398 \enforced\let\controlspace\specialcontrolspace
399 \spaceskip.25\emwidth\relax}
400
401\permanent\protected\def\obeybreakpoints
402 {\ignorehyphens
403 \veryraggedright}
404
405\permanent\protected\def\ignorehyphens
406 {\nohyphens
407 \enforced\let\obeyedspace \specialobeyedspace
408 \enforced\let\controlspace\specialcontrolspace
409 \spaceskip.5\emwidth\relax}
410
411
412
413
414
415
416
417
418
419
420\immutable\def\lesscharacter {<}
421\immutable\def\morecharacter {>}
422
423\immutable\let\texescape \textbackslash
424\immutable\let\leftargument \textbraceleft
425\immutable\let\rightargument \textbraceright
426\immutable\let\inlinemathmarker \textdollar
427\immutable\def\displaymathmarker{\textdollar\textdollar}
428
429\def\buff_verbatim_special_type#1#2#
430 {\dontleavehmode\bgroup
431 \buff_verbatim_initialize_type_one
432 \catcode\leftbraceasciicode \begingroupcatcode
433 \catcode\rightbraceasciicode\endgroupcatcode
434 #1
435 \bgroup
436 \aftergroup#2
437 \aftergroup\egroup
438 \let\nexttoken}
439
440\mutable\protected\def\tex{\buff_verbatim_special_type\texescape \relax}
441\mutable\protected\def\arg{\buff_verbatim_special_type\leftargument \rightargument}
442\mutable\protected\def\mat{\buff_verbatim_special_type\inlinemathmarker \inlinemathmarker}
443\mutable\protected\def\dis{\buff_verbatim_special_type\displaymathmarker\displaymathmarker}
444
445\aliased\let\normaltexttex\tex
446\aliased\let\normaltextarg\arg
447\aliased\let\normaltextmat\mat
448\aliased\let\normaltextdis\dis
449
450\permanent\protected\def\astype
451 {\dontleavehmode
452 \bgroup\usetypestyleandcolor\c!style\c!color\let\nexttoken}
453
454\permanent\protected\def\asciistr#1
455 {\dontleavehmode\begingroup
456 \dostarttaggednodetail\t!verbatim
457 \usetypestyleandcolor\c!style\c!color\detokenize{#1}
458 \dostoptagged
459 \endgroup}
460
461
462
463
464\mutable\let\beginofverbatimlines\relax
465\mutable\let\endofverbatimlines \relax
466
467\protected\def\buff_verbatim_typing_start#1#2
468 {\begingroup
469 \cdef\currenttyping {#1}
470 \edef\currenttypingwrapper{#2}
471 \begingroup
472 \obeylines
473 \futureexpandis[\buff_verbatim_typing_start_yes\buff_verbatim_typing_start_nop}
474
475\def\buff_verbatim_typing_start_yes[#S#1]
476 {\endgroup
477 \ifhastok={#1}
478 \setupcurrenttyping[#1]
479 \orelse\ifcstok{#1}\v!continue
480 \lettypingparameter\c!continue\v!yes
481 \fi
482 \typingparameter\c!before\relax
483 \startpacked[\v!blank]
484 \buff_verbatim_setup_keep_together
485 \buff_verbatim_setup_line_numbering
486 \buff_verbatim_initialize_typing_one
487 \normalexpanded{\buff_verbatim_type_block{\e!start\currenttypingwrapper}{\e!stop\currenttypingwrapper}}}
488
489\def\buff_verbatim_typing_start_nop
490 {\endgroup
491 \typingparameter\c!before\relax
492 \startpacked[\v!blank]
493 \buff_verbatim_setup_keep_together
494 \buff_verbatim_setup_line_numbering
495 \buff_verbatim_initialize_typing_one
496 \normalexpanded{\buff_verbatim_type_block{\e!start\currenttypingwrapper}{\e!stop \currenttypingwrapper}}}
497
498
499
500
501
502
503
504
505
506
507\protected\def\buff_verbatim_setup_keep_together
508 {\ifcstok{\typingparameter\c!keeptogether}\v!yes
509 \c_buff_lines_as_paragraph \conditionalfalse
510 \c_buff_optimize_linebreaks\conditionaltrue
511
512 \orelse\iflastnamedcs\v!paragraph
513 \c_buff_lines_as_paragraph \conditionaltrue
514 \c_buff_optimize_linebreaks\conditionalfalse
515 \else
516 \c_buff_lines_as_paragraph \conditionalfalse
517 \c_buff_optimize_linebreaks\conditionalfalse
518 \fi}
519
520\protected\def\buff_verbatim_type_block#1#2
521 {\normalexpanded{\buff_pickup
522 {typing}
523 {#1}
524 {#2}
525 {}
526 {\buff_verbatim_type_block_verbatim_indeed{#1}{#2}}
527 \ifcstok{\typingparameter\c!strip}\v!no\zerocount\else\plusone\fi}}
528
529\protected\def\buff_verbatim_type_block_verbatim_indeed#1#2
530 {\buff_verbatim_initialize_typing_two
531 \dostarttaggedchained\t!verbatimblock\currenttyping\currenttyping\??typing
532 \beginofverbatimlines
533 \dostarttaggednodetail\t!verbatimlines
534 \clf_typebuffer
535 name {typing}
536 strip {\typingparameter\c!strip}
537 range {\typingparameter\c!range}
538 tab {\typingparameter\c!tab}
539 par {\typingparameter\c!paragraph}
540 method {\p_buff_option}
541 escape {\typingparameter\c!escape}
542 nature {display}
543 \relax
544 \dostoptagged
545 \endofverbatimlines
546 \dostoptagged
547 \begincsname#2\endcsname}
548
549\protected\def\buff_verbatim_typing_stop
550 {\stoppacked
551 \typingparameter\c!after\relax
552 \useindentnextparameter\typingparameter
553 \endgroup
554 \dorechecknextindentation}
555
556\permanent\protected\def\startnamedtyping[#1]
557 {\buff_verbatim_typing_start{#1}\e!namedtyping}
558
559\permanent\let\stopnamedtyping\buff_verbatim_typing_stop
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614\mutable\lettonothing\currenttypingfile
615
616\appendtoks
617 \frozen\protected\instance\edefcsname\e!type\currenttyping\v!file\endcsname{\typefile[\currenttyping]}
618\to \everydefinetyping
619
620\permanent\tolerant\protected\def\typefile[#S#1]#*[#S#2]#:#3
621 {\begingroup
622 \ifparameter#2\or
623 \setuptyping[#1][#2]
624 \buff_verbatim_type_file_checked{#1}{#3}
625 \orelse\ifparameter#1\or
626 \ifhastok={#1}
627 \setuptyping[\v!file][#1]
628 \buff_verbatim_type_file_checked\v!file{#3}
629 \else
630 \buff_verbatim_type_file_checked{#1}{#3}
631 \fi
632 \else
633 \buff_verbatim_type_file_checked\v!file{#3}
634 \fi
635 \useindentnextparameter\typingparameter
636 \endgroup
637 \dorechecknextindentation}
638
639\def\buff_verbatim_type_file_checked#1#2
640 {\doifelsetypingfile{#2}
641 {\buff_verbatim_type_file_indeed{#1}\currenttypingfile}
642 {\showmessage\m!verbatims1{#2}}}
643
644\permanent\protected\def\doifelsetypingfile#1
645 {\edef\currenttypingfile{\locfilename{#1}}
646 \ifempty\currenttypingfile
647 \edef\currenttypingfile{\locfilename{#1.tex}}
648 \fi
649 \ifempty\currenttypingfile
650 \expandafter\secondoftwoarguments
651 \else
652 \expandafter\firstoftwoarguments
653 \fi}
654
655\aliased\let\doiftypingfileelse\doifelsetypingfile
656
657\def\buff_verbatim_type_file_indeed#1#2
658 {\cdef\currenttyping{#1}
659 \typingparameter\c!before\relax
660 \startpacked[\v!blank]
661 \buff_verbatim_setup_keep_together
662 \buff_verbatim_setup_line_numbering
663 \buff_verbatim_initialize_typing_one
664 \buff_verbatim_initialize_typing_two
665 \dostarttaggedchained\t!verbatimblock\currenttyping\currenttyping\??typing
666 \beginofverbatimlines
667 \dostarttaggednodetail\t!verbatimlines
668 \clf_typefile
669 name {#2}
670 strip {\typingparameter\c!strip}
671 range {\typingparameter\c!range}
672 regime {\currentregime}
673 tab {\typingparameter\c!tab}
674 method {\p_buff_option}
675 nature {display}
676 \relax
677 \dostoptagged
678 \endofverbatimlines
679 \dostoptagged
680 \stoppacked
681 \typingparameter\c!after\relax}
682
683
684
685\newconditional\verbatimnumberinglines
686
687\permanent\protected\def\beginofverbatimlinenumbering
688 {\startlinenumbering
689 [\currenttyping]
690 [\c!continue=\typingparameter\c!continue,
691 \c!method=\v!type,
692 \c!start=\typingparameter\c!start,
693 \c!stop=\typingparameter\c!stop,
694 \c!step=\typingparameter\c!step]}
695
696\permanent\protected\def\endofverbatimlinenumbering
697 {\stoplinenumbering}
698
699\def\buff_verbatim_setup_line_numbering
700 {\ifdefined\startlinenumbering
701 \edef\p_numbering{\typingparameter\c!numbering}
702 \ifx\p_numbering\v!file
703 \setuplinenumbering[\currenttyping][\c!method=\v!file]
704 \verbatimnumberinglines\conditionaltrue
705 \orelse\ifx\p_numbering\v!line
706 \verbatimnumberinglines\conditionaltrue
707 \else
708 \verbatimnumberinglines\conditionalfalse
709 \fi
710 \ifconditional\verbatimnumberinglines
711 \enforced\let\beginofverbatimlines\beginofverbatimlinenumbering
712 \enforced\let\endofverbatimlines \endofverbatimlinenumbering
713 \fi
714 \fi}
715
716
717
718
719
720
721
722
723
724
725
726
727\permanent\protected\def\filename#1{{\tttf\hyphenatedfilename{#1}}}
728
729
730
731
732
733
734\permanent\protected\def\verbatim#1{\detokenize{#1}}
735
736
737
738
739
740
741
742
743\setuptyping
744 [\c!before=\blank,
745 \c!after=\blank,
746
747
748
749 \c!space=\v!off,
750 \c!lines=\v!no,
751 \c!page=\v!no,
752 \c!tab=\v!yes,
753 \c!option=\v!none,
754 \c!text=\v!no,
755 \c!style=\tt,
756 \c!indentnext=\v!yes,
757 \c!margin=\zeropoint,
758 \c!evenmargin=\zeropoint,
759 \c!oddmargin=\zeropoint,
760 \c!blank=\v!line,
761
762 \c!numbering=\v!no,
763
764 \c!start=1,
765
766 \c!step=1,
767
768 \c!strip=\v!no]
769
770\definetyping[\v!typing]
771
772
773
774\setuplinenumbering[\v!typing][\c!location=\v!left,\c!width=\zeropoint]
775
776\setuptyping [\v!file] [\s!parent=\??typing \v!typing]
777\setuplinenumbering[\v!file] [\s!parent=\??linenumbering\v!typing]
778
779\setuptyping [\v!buffer][\s!parent=\??typing \v!file]
780\setuplinenumbering[\v!buffer][\s!parent=\??linenumbering\v!file]
781
782
783
784\setuptype
785 [\c!space=\v!off,
786 \c!lines=\v!no,
787
788 \c!style=\tt,
789
790 \c!page=\v!no,
791 \c!tab=\v!yes,
792 \c!compact=\v!all]
793
794
795
796
797
798\permanent\protected\def\typebuffer
799 {\begingroup
800 \let\currenttyping\v!buffer
801 \buff_verbatim_type_buffer}
802
803\permanent\protected\def\typedefinedbuffer[#1]
804 {\buff_verbatim_type_defined_buffer[\v!buffer][\thedefinedbuffer{#1}]}
805
806
807
808
809
810
811\appendtoks
812 \frozen\instance\protected\edefcsname\e!type\currentbuffer\endcsname
813 {\buff_verbatim_type_defined_buffer[\currentbuffer][\currentdefinedbuffer]}
814\to \everydefinebuffer
815
816\appendtoks
817 \frozen\instance\protected\edefcsname\e!type\currenttyping\v!buffer\endcsname
818 {\buff_verbatim_type_buffer_class{\currenttyping}}
819\to \everydefinetyping
820
821\tolerant\protected\def\buff_verbatim_type_buffer[#S#1]#*[#S#2]
822 {\ifarguments
823 \buff_verbatim_type_buffer_indeed\currenttyping\empty
824 \or
825 \ifhastok={#1}
826 \setupcurrenttyping[#1]
827 \buff_verbatim_type_buffer_indeed\currenttyping\empty
828 \else
829 \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}
830 \fi
831 \or
832 \setupcurrenttyping[#2]
833 \processcommalist[#1]{\buff_verbatim_type_buffer_indeed\currenttyping}
834 \fi
835 \useindentnextparameter\typingparameter
836 \endgroup
837 \dorechecknextindentation}
838
839\protected\def\buff_verbatim_type_buffer_class#1
840 {\begingroup
841 \cdef\currenttyping{#1}
842 \buff_verbatim_type_buffer}
843
844\tolerant\protected\def\buff_verbatim_type_defined_buffer[#1]#*[#2]#*[#S#3]
845 {\begingroup
846 \cdef\currenttyping{\namedbufferparameter{#1}\c!category}
847 \ifempty\currenttyping
848 \let\currenttyping\v!buffer
849 \fi
850 \ifhastok={#3}
851 \setupcurrenttyping[#3]
852 \orelse\ifempty{#3}\else
853 \cdef\currenttyping{#3}
854 \fi
855 \buff_verbatim_type_buffer_indeed{\currenttyping}{#2}
856 \useindentnextparameter\typingparameter
857 \endgroup
858 \dorechecknextindentation}
859
860\protected\def\buff_verbatim_type_buffer_indeed#1#2
861 {\cdef\currenttyping{#1}
862 \typingparameter\c!before\relax
863 \startpacked[\v!blank]
864 \buff_verbatim_setup_keep_together
865 \buff_verbatim_setup_line_numbering
866 \buff_verbatim_initialize_typing_one
867 \buff_verbatim_initialize_typing_two
868 \dostarttaggedchained\t!verbatimblock{#1}{#1}\??typing
869 \beginofverbatimlines
870 \dostarttaggednodetail\t!verbatimlines
871 \clf_typebuffer
872 name {#2}
873 strip {\typingparameter\c!strip}
874 range {\typingparameter\c!range}
875 regime {\currentregime}
876 tab {\typingparameter\c!tab}
877 par {\typingparameter\c!paragraph}
878 method {\p_buff_option}
879 escape {\typingparameter\c!escape}
880 nature {display}
881 \relax
882 \dostoptagged
883 \endofverbatimlines
884 \dostoptagged
885 \stoppacked
886 \typingparameter\c!after\relax}
887
888\permanent\tolerant\protected\def\typeinlinebuffer[#S#1]#,[#S#2]
889 {\dontleavehmode
890 \begingroup
891 \enforced\let\setupcurrenttyping\setupcurrenttype
892 \lettonothing\currenttype
893 \ifparameters
894 \buff_verbatim_type_buffer_indeed_inline\currenttyping\empty
895 \or
896 \ifhastok={#1}
897 \setupcurrenttyping[#1]
898 \buff_verbatim_type_buffer_indeed_inline\currenttyping\empty
899 \else
900 \processcommalist[#1]{\buff_verbatim_type_buffer_indeed_inline\currenttyping}
901 \fi
902 \or
903 \setupcurrenttyping[#2]
904 \processcommalist[#1]{\buff_verbatim_type_buffer_indeed_inline\currenttyping}
905 \fi
906 \endgroup}
907
908\protected\def\buff_verbatim_type_buffer_indeed_inline#1#2
909 {\cdef\currenttype{#1}
910 \buff_verbatim_initialize_type_one
911 \expand\everyinitializeverbatim
912 \dostarttaggedchained\t!verbatim\currenttype\currenttype\??type
913 \clf_typebuffer
914 name {#2}
915 strip {\v!yes}
916 regime {\currentregime}
917 method {\p_buff_option}
918 nature {inline}
919 \relax
920 \dostoptagged}
921
922
923
924
925
926
927
928
929\permanent\tolerant\protected\def\processbuffer[#S#1]#*[#S#2]
930 {\writestatus{nota bene}{\string\processbuffer\space is obsolete}
931 \begingroup
932 \ifarguments
933 \buff_verbatim_process_indeed\v!buffer\empty
934 \or
935 \ifhastok={#1}
936 \setuptyping[\v!buffer][#1]
937 \buff_verbatim_process_indeed\v!buffer\empty
938 \else
939 \processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}
940 \fi
941 \or
942 \setuptyping[\v!buffer][#2]
943 \processcommalist[#1]{\buff_verbatim_process_indeed\v!buffer}
944 \fi
945 \endgroup}
946
947\def\buff_verbatim_process_indeed#1#2
948 {\cdef\currenttyping{#1}
949 \clf_processbuffer
950 name {#2}
951 strip {\typingparameter\c!strip}
952 tab {\typingparameter\c!tab}
953
954
955 nature {direct}
956 \relax}
957
958
959
960
961
962\newinteger\nofverbatimlines
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021\newinteger \c_buff_verbatim_noflines
1022\newinteger \c_buff_verbatim_current
1023\newconditional\c_buff_optimize_linebreaks
1024
1025\permanent\protected\def\doverbatimspace {\obeyedspace}
1026
1027\permanent\protected\def\doinlineverbatimstart {}
1028\permanent\protected\def\doinlineverbatimstop {}
1029\permanent\protected\def\doinlineverbatimbeginline {}
1030\permanent\protected\def\doinlineverbatimnewline {\obeyedspace}
1031\permanent\protected\def\doinlineverbatimemptyline {\obeyedspace}
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103\permanent\protected\def\dodisplayverbatimstart
1104 {\advanceby\c_buff_verbatim_current\plusone
1105 \ifconditional\verbatimnumberinglines
1106 \global\advanceby\nofverbatimlines\plusone
1107 \c_attr_verbatimline\nofverbatimlines
1108 \fi
1109 \ifconditional\c_buff_lines_as_paragraph
1110 \buff_verbatim_set_line_margin
1111 \starthangrange
1112 \else
1113 \noindent
1114 \buff_verbatim_set_line_margin
1115 \fi
1116 \expand\everyline
1117 \dostarttaggednodetail\t!verbatimline
1118 \strut}
1119
1120\permanent\protected\def\dodisplayverbatimstop
1121 {\dostoptagged
1122 \ifconditional\c_buff_lines_as_paragraph
1123 \stophangrange
1124 \orelse\ifconditional\c_buff_optimize_linebreaks
1125 \par
1126 \buff_verbatim_inject_breaks
1127 \else
1128 \par
1129 \fi
1130 \ifconditional\verbatimnumberinglines
1131 \c_attr_verbatimline\attributeunsetvalue
1132 \fi}
1133
1134\permanent\protected\def\dodisplayverbatimemptyline
1135 {\dostoptagged
1136 \ifconditional\c_buff_lines_as_paragraph
1137 \stophangrange
1138 \fi
1139 \ifconditional\verbatimnumberinglines
1140 \par\strut\par
1141 \else
1142 \blank[\typingparameter\c!blank]
1143 \fi
1144 \ifconditional\c_buff_lines_as_paragraph
1145 \starthangrange
1146 \fi
1147 \dostarttaggednodetail\t!verbatimlines}
1148
1149\permanent\protected\def\dodisplayverbatimbeginline
1150 {\advanceby\c_buff_verbatim_current\plusone
1151 \ifconditional\verbatimnumberinglines
1152 \global\advanceby\nofverbatimlines\plusone
1153 \c_attr_verbatimline\nofverbatimlines
1154 \fi
1155 \ifconditional\c_buff_lines_as_paragraph
1156 \starthangrangestep
1157 \buff_verbatim_set_line_margin
1158 \else
1159 \noindent
1160 \buff_verbatim_set_line_margin
1161 \fi
1162 \expand\everyline
1163 \dostarttaggednodetail\t!verbatimline
1164 \strut}
1165
1166\permanent\protected\def\dodisplayverbatimnewline
1167 {\dostoptagged
1168 \ifconditional\c_buff_lines_as_paragraph
1169 \stophangrangestep
1170 \orelse\ifconditional\c_buff_optimize_linebreaks
1171 \par
1172 \buff_verbatim_inject_breaks
1173 \else
1174 \par
1175 \fi
1176 \ifconditional\verbatimnumberinglines
1177 \c_attr_verbatimline\attributeunsetvalue
1178 \fi}
1179
1180\protected\def\buff_verbatim_inject_breaks
1181 {\ifnum\c_buff_verbatim_current=\plusone
1182 \nobreak
1183 \orelse\ifnum\c_buff_verbatim_noflines=\plusthree
1184 \nobreak
1185 \orelse\ifnum\c_buff_verbatim_current={\c_buff_verbatim_noflines\plusone}
1186 \nobreak
1187 \fi}
1188
1189\permanent\protected\def\dodisplayverbatiminitialize#1
1190 {\forgetparindent
1191 \c_buff_verbatim_noflines#1\relax
1192 \c_buff_verbatim_current\zerocount}
1193
1194\loadmarkfile{buffimpdefault}
1195\loadmarkfile{buffimpnested}
1196\loadmarkfile{buffimpescaped}
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216\appendtoks
1217
1218 \enforced\def\type#1{\detokenize{#1}}
1219 \enforced\def\tex #1{\letterbackslash#1}
1220\to \everysimplifycommands
1221
1222\stopcontextdefinitioncode
1223
1224
1225
1226\permanent\protected\def\literalmode{\setcatcodetable\txtcatcodes}
1227
1228\protect \endinput
1229 |