1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Spacing Macros Alignments}
15
16\unprotect
17
18
19
20
21
22
23
24
25
26
27
28
29
30\registerctxluafile{spacali}{optimize}
31
32\definesystemattribute[realign] [public]
33\definesystemattribute[alignstate][public]
34
35\appendtoks
36 \c_attr_realign \attributeunsetvalue
37 \c_attr_alignstate\attributeunsetvalue
38\to \everyforgetall
39
40\unexpanded\def\resetrealignsignal{\c_attr_realign\attributeunsetvalue}
41\unexpanded\def\signalinnerrealign{\clf_setrealign\plustwo}
42\unexpanded\def\signalouterrealign{\clf_setrealign\plusone}
43
44\installcorenamespace{aligncommand}
45\installcorenamespace{alignhorizontal}
46\installcorenamespace{alignvertical}
47
48\installcorenamespace{alignmentnormalcache}
49\installcorenamespace{alignmentraggedcache}
50
51
52
53\installcorenamespace{alignmentnormalcacheodd}
54\installcorenamespace{alignmentnormalcacheeven}
55
56\installcorenamespace{alignmentraggedcacheodd}
57\installcorenamespace{alignmentraggedcacheeven}
58
59\def\??alignmentnormalcache{\ifodd\realpageno\??alignmentnormalcacheodd\else\??alignmentnormalcacheeven\fi}
60\def\??alignmentraggedcache{\ifodd\realpageno\??alignmentraggedcacheodd\else\??alignmentraggedcacheeven\fi}
61
62\newtoks\everyresetalign
63
64
65
66\newconditional\layoutlefttoright \settrue\layoutlefttoright
67\newconditional\displaylefttoright \settrue\displaylefttoright
68\newconditional\inlinelefttoright \settrue\inlinelefttoright
69
70\unexpanded\def\lefttoright
71 {\ifvmode
72 \spac_directions_lefttoright_vmode
73 \else
74 \spac_directions_lefttoright_hmode
75 \fi}
76
77\unexpanded\def\righttoleft
78 {\ifvmode
79 \spac_directions_righttoleft_vmode
80 \else
81 \spac_directions_righttoleft_hmode
82 \fi}
83
84\unexpanded\def\spac_directions_lefttoright_vmode
85 {\settrue\displaylefttoright
86 \settrue\inlinelefttoright
87 \textdirection\directionlefttoright
88 \pardirection \directionlefttoright}
89
90\unexpanded\def\spac_directions_righttoleft_vmode
91 {\setfalse\displaylefttoright
92 \setfalse\inlinelefttoright
93 \textdirection\directionrighttoleft
94 \pardirection \directionrighttoleft}
95
96\unexpanded\def\spac_directions_lefttoright_hmode
97 {\linedirection\directionlefttoright
98 \settrue\inlinelefttoright}
99
100\unexpanded\def\spac_directions_righttoleft_hmode
101 {\linedirection\directionrighttoleft
102 \setfalse\inlinelefttoright}
103
104\unexpanded\def\synchronizelayoutdirection
105 {\ifconditional\layoutlefttoright
106 \spac_directions_synchronize_lr
107 \else
108 \spac_directions_synchronize_rl
109 \fi}
110
111\unexpanded\def\synchronizedisplaydirection
112 {\ifconditional\displaylefttoright
113 \spac_directions_synchronize_lr
114 \else
115 \spac_directions_synchronize_rl
116 \fi}
117
118\def\spac_directions_synchronize_lr
119 {\settrue\inlinelefttoright
120 \textdirection\directionlefttoright
121 \pardirection \directionlefttoright}
122
123\def\spac_directions_synchronize_rl
124 {\setfalse\inlinelefttoright
125 \textdirection\directionrighttoleft
126 \pardirection \directionrighttoleft}
127
128\unexpanded\def\synchronizeinlinedirection
129 {
130 \textdirection\ifconditional\inlinelefttoright\directionlefttoright\else\directionrighttoleft\fi}
131
132\unexpanded\def\checkedlefttoright
133 {\ifvmode
134 \spac_directions_lefttoright_vmode
135 \else
136 \spac_directions_lefttoright_hmode_checked
137 \fi}
138
139\unexpanded\def\checkedrighttoleft
140 {\ifvmode
141 \spac_directions_righttoleft_vmode
142 \else
143 \spac_directions_righttoleft_hmode_checked
144 \fi}
145
146\unexpanded\def\spac_directions_lefttoright_hmode_checked
147 {\ifconditional\inlinelefttoright\else
148 \lefttoright
149 \fi}
150
151\unexpanded\def\spac_directions_righttoleft_hmode_checked
152 {\ifconditional\inlinelefttoright
153 \righttoleft
154 \fi}
155
156\installcorenamespace{bidi}
157
158\letvalue{\??bidi\v!left }\checkedlefttoright \letvalue{\??bidi l2r}\checkedlefttoright
159\letvalue{\??bidi\v!right}\checkedrighttoleft \letvalue{\??bidi r2l}\checkedrighttoleft
160
161\unexpanded\def\usebidiparameter#1
162 {\begincsname\??bidi#1\c!bidi\endcsname}
163
164\unexpanded\def\showdirections
165 {\dontleavehmode
166 \begingroup\infofont\textdirection\directionlefttoright[\space
167 layout: \ifconditional\layoutlefttoright l2r\else r2l\fi\space
168 display: \ifconditional\displaylefttoright l2r\else r2l\fi\space
169 inline: \ifconditional\inlinelefttoright l2r\else r2l\fi\space
170 ]\endgroup}
171
172\unexpanded\def\righttolefthbox#1#{\reversehbox#1\bgroup\righttoleft\let\next} \let\rtlhbox\righttolefthbox
173\unexpanded\def\lefttorighthbox#1#{\naturalhbox#1\bgroup\lefttoright\let\next} \let\ltrhbox\lefttorighthbox
174\unexpanded\def\righttoleftvbox#1#{\reversevbox#1\bgroup\righttoleft\let\next} \let\rtlvbox\righttoleftvbox
175\unexpanded\def\lefttorightvbox#1#{\naturalvbox#1\bgroup\lefttoright\let\next} \let\ltrvbox\lefttorightvbox
176\unexpanded\def\righttoleftvtop#1#{\reversevtop#1\bgroup\righttoleft\let\next} \let\rtlvtop\righttoleftvtop
177\unexpanded\def\lefttorightvtop#1#{\naturalvtop#1\bgroup\lefttoright\let\next} \let\ltrvtop\lefttorightvtop
178
179\unexpanded\def\autodirhbox#1#{\hbox#1\bgroup\synchronizeinlinedirection\let\next}
180\unexpanded\def\autodirvbox#1#{\vbox#1\bgroup\synchronizeinlinedirection\let\next}
181\unexpanded\def\autodirvtop#1#{\vtop#1\bgroup\synchronizeinlinedirection\let\next}
182
183\unexpanded\def\leftorrighthbox{\ifconditional\displaylefttoright\expandafter\lefttorighthbox\else\expandafter\righttolefthbox\fi}
184\unexpanded\def\leftorrightvbox{\ifconditional\displaylefttoright\expandafter\lefttorightvbox\else\expandafter\righttoleftvbox\fi}
185\unexpanded\def\leftorrightvtop{\ifconditional\displaylefttoright\expandafter\lefttorightvtop\else\expandafter\righttoleftvtop\fi}
186
187
188
189\ifdefined\lesshyphens \else \let\lesshyphens\relax \fi
190\ifdefined\morehyphens \else \let\morehyphens\relax \fi
191\ifdefined\nohyphens \else \let\nohyphens \relax \fi
192\ifdefined\dohyphens \else \let\dohyphens \relax \fi
193
194\newconstant\c_spac_tolerance_default \c_spac_tolerance_default 1500
195\newconstant\c_spac_tolerance_minimum \c_spac_tolerance_minimum 1500
196\newconstant\c_spac_tolerance_normal \c_spac_tolerance_normal 3000
197\newconstant\c_spac_tolerance_extreme \c_spac_tolerance_extreme 4500
198
199\def\spac_align_set_raggedness_left {\plustwo\bodyfontsize}
200\def\spac_align_set_raggedness_right {\plustwo\bodyfontsize}
201\def\spac_align_set_raggedness_middle{\plussix\bodyfontsize}
202
203
204
205
206\def\spac_align_set_raggedness_middle{\ifzeropt\hsize\plussix\bodyfontsize\else.5\hsize\fi}
207
208\unexpanded\def\setraggedness#1
209 {\ifnum\tolerance<\c_spac_tolerance_minimum
210 \tolerance\c_spac_tolerance_minimum
211 \else
212
213 \fi
214 \ifx\dohyphens\relax
215 \hyphenpenalty\dimexpr2.8\hsize\dimexpr#1\relax\relax
216
217
218 \fi}
219
220\unexpanded\def\spac_align_set_tolerant
221 {\tolerance\c_spac_tolerance_normal}
222
223\unexpanded\def\spac_align_set_very_tolerant
224 {\tolerance\c_spac_tolerance_extreme}
225
226\unexpanded\def\spac_align_set_stretch
227 {\emergencystretch\bodyfontsize}
228
229\unexpanded\def\spac_align_set_extreme_stretch
230 {\emergencystretch10\bodyfontsize}
231
232
233
234\newconstant\c_spac_align_state_vertical
235
236\unexpanded\def\spac_align_set_vertical_none
237 {\let\raggedtopcommand \relax
238 \let\raggedbottomcommand\relax}
239
240\unexpanded\def\spac_align_set_vertical_lohi
241 {\let\raggedtopcommand \vfilll
242 \let\raggedbottomcommand\vfilll}
243
244\unexpanded\def\spac_align_set_vertical_low
245 {\let\raggedtopcommand \vfilll
246 \let\raggedbottomcommand\relax}
247
248\unexpanded\def\spac_align_set_vertical_high
249 {\let\raggedtopcommand \relax
250 \let\raggedbottomcommand\vfilll}
251
252\def\spac_align_flush_vertical
253 {\ifcase\c_spac_align_state_vertical
254 \spac_align_set_vertical_none
255 \or
256 \spac_align_set_vertical_lohi
257 \or
258 \spac_align_set_vertical_low
259 \or
260 \spac_align_set_vertical_high
261 \fi}
262
263
264
265\ifdefined\raggedonelinerstate \else
266 \newconditional\raggedonelinerstate
267\fi
268
269
270
271
272
273\newconstant\raggedstatus
274
275\newconstant\c_spac_align_state_horizontal
276\newconstant\c_spac_align_state_broad
277\newconstant\c_spac_align_state_par_fill
278
279\def\v_spac_align_fill_amount {\plusone fil}
280\def\v_spac_align_fill_amount_hard {\plusone fill}
281\def\v_spac_align_fill_amount_extreme {\plustenthousand filll}
282\def\v_spac_align_fill_amount_negative {\minusone fil}
283\def\v_spac_align_fill_amount_double {\plustwo fil}
284\def\v_spac_align_fill_amount_space {\plustwo fil}
285\def\v_spac_align_fill_amount_half {.5fil}
286\let\v_spac_align_space_amount \interwordspace
287\def\v_spac_align_space_amount_x {.5\emwidth}
288
289\newskip\s_zero_plus_one_fil \s_zero_plus_one_fil = 0pt plus 1fil
290\newskip\s_zero_plus_zero \s_zero_plus_zero = 0pt plus 0pt
291
292
293
294\unexpanded\def\spac_align_set_horizontal_none
295 {\raggedstatus\zerocount
296 \c_attr_alignstate\attributeunsetvalue
297 \leftskip \plusone\leftskip
298 \rightskip \plusone\rightskip
299 \spaceskip \zeropoint
300 \xspaceskip \zeropoint
301 \parfillskip\s_zero_plus_one_fil
302 \setfalse\raggedonelinerstate
303 \let\updateraggedskips\relax}
304
305\unexpanded\def\spac_align_set_horizontal_left
306 {\setraggedness\spac_align_set_raggedness_left
307 \raggedstatus\plusone
308 \c_attr_alignstate\plusone
309 \leftskip \plusone\leftskip \s!plus\spac_align_set_raggedness_left
310 \rightskip \plusone\rightskip\s!plus\zeropoint
311 \spaceskip \v_spac_align_space_amount
312 \xspaceskip \v_spac_align_space_amount_x
313 \parfillskip\s_zero_plus_zero
314 \parindent \zeropoint
315 \relax}
316
317\unexpanded\def\spac_align_set_horizontal_center
318 {\setraggedness\spac_align_set_raggedness_middle
319 \raggedstatus\plustwo
320 \c_attr_alignstate\plustwo
321 \leftskip \plusone\leftskip \s!plus\spac_align_set_raggedness_middle
322 \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_middle
323 \spaceskip \v_spac_align_space_amount
324 \xspaceskip \v_spac_align_space_amount_x
325 \parfillskip\s_zero_plus_zero
326 \parindent \zeropoint
327 \relax}
328
329\unexpanded\def\spac_align_set_horizontal_right
330 {\setraggedness\spac_align_set_raggedness_right
331 \raggedstatus\plusthree
332 \c_attr_alignstate\plusthree
333 \leftskip \plusone\leftskip \s!plus\zeropoint
334 \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_right
335 \spaceskip \v_spac_align_space_amount
336 \xspaceskip \v_spac_align_space_amount_x
337 \parfillskip\s_zero_plus_one_fil
338
339 \relax}
340
341\unexpanded\def\spac_align_set_horizontal_very_left
342 {\raggedstatus\plusone
343 \c_attr_alignstate\plusone
344 \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount
345 \rightskip \plusone\rightskip\s!plus\zeropoint
346 \spaceskip \v_spac_align_space_amount
347 \xspaceskip \v_spac_align_space_amount_x
348 \parfillskip\s_zero_plus_zero
349 \parindent \zeropoint
350 \relax}
351
352\unexpanded\def\spac_align_set_horizontal_very_center
353 {\raggedstatus\plustwo
354 \c_attr_alignstate\plustwo
355 \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount
356 \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount
357 \spaceskip \v_spac_align_space_amount
358 \xspaceskip \v_spac_align_space_amount_x
359 \parfillskip\s_zero_plus_zero
360 \parindent \zeropoint
361 \relax}
362
363\unexpanded\def\spac_align_set_horizontal_very_right
364 {\raggedstatus\plusthree
365 \c_attr_alignstate\plusthree
366 \leftskip \plusone\leftskip \s!plus\zeropoint
367 \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount
368 \spaceskip \v_spac_align_space_amount
369 \xspaceskip \v_spac_align_space_amount_x
370 \parfillskip\s_zero_plus_zero
371
372 \relax}
373
374\unexpanded\def\spac_align_set_horizontal_wide_center
375 {\setraggedness\spac_align_set_raggedness_middle
376 \raggedstatus\plustwo
377 \c_attr_alignstate\plustwo
378 \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount_half
379 \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_half
380 \spaceskip \v_spac_align_space_amount
381 \xspaceskip \v_spac_align_space_amount_x
382 \parfillskip\s_zero_plus_zero
383 \parindent \zeropoint
384 \relax}
385
386\unexpanded\def\spac_align_set_horizontal_centered_last_line
387 {\raggedstatus\zerocount
388 \c_attr_alignstate\attributeunsetvalue
389 \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax
390 \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_negative\relax
391 \spaceskip \zeropoint\relax
392 \xspaceskip \zeropoint\relax
393 \parfillskip\zeropoint\s!plus\v_spac_align_fill_amount_double\relax
394 \parindent \zeropoint
395 \relax}
396
397\unexpanded\def\spac_align_set_horizontal_flushedright_last_line
398 {\raggedstatus\zerocount
399 \c_attr_alignstate\attributeunsetvalue
400 \leftskip \plusone\leftskip \s!plus\v_spac_align_fill_amount\relax
401 \rightskip \plusone\rightskip\s!plus\v_spac_align_fill_amount_negative\relax
402 \spaceskip \zeropoint\relax
403 \xspaceskip \zeropoint\relax
404 \parfillskip \zeropoint
405 \parfillleftskip\zeropoint\s!plus\v_spac_align_fill_amount_extreme\relax
406 \parfillleftmode\plustwo
407 \parindent \zeropoint
408 \relax}
409
410\unexpanded\def\spac_align_set_horizontal_right_tt
411 {\tttf
412 \raggedstatus\plusthree
413 \c_attr_alignstate\plusthree
414 \leftskip \plusone\leftskip \s!plus\zeropoint\relax
415 \rightskip \plusone\rightskip\s!plus\spac_align_set_raggedness_right\relax
416 \spaceskip \zeropoint\relax
417 \xspaceskip \zeropoint\relax
418 \parfillskip\s_zero_plus_zero
419
420 \relax}
421
422\unexpanded\def\spac_align_set_horizontal_extra
423 {\xspaceskip\zeropoint\s!plus\v_spac_align_fill_amount_space\relax}
424
425\def\spac_align_flush_horizontal
426 {\ifcase\c_spac_align_state_horizontal
427
428 \spac_align_set_horizontal_none
429 \or
430
431 \ifcase\c_spac_align_state_broad
432 \spac_align_set_horizontal_center
433 \or
434 \spac_align_set_horizontal_very_center
435 \or
436 \spac_align_set_horizontal_wide_center
437 \fi
438 \or
439
440 \ifcase\c_spac_align_state_broad
441 \spac_align_set_horizontal_right
442 \else
443 \spac_align_set_horizontal_very_right
444 \fi
445 \or
446
447 \ifcase\c_spac_align_state_broad
448 \spac_align_set_horizontal_left
449 \else
450 \spac_align_set_horizontal_very_left
451 \fi
452 \or
453
454 \ifdoublesided
455 \signalinnerrealign
456 \fi
457 \rightorleftpageaction\spac_align_set_horizontal_right\spac_align_set_horizontal_left
458 \or
459
460 \ifdoublesided
461 \signalouterrealign
462 \fi
463 \rightorleftpageaction\spac_align_set_horizontal_left\spac_align_set_horizontal_right
464 \or
465
466 \ifcase\c_spac_align_state_broad
467 \spac_align_set_horizontal_right
468 \else
469 \spac_align_set_horizontal_very_right
470 \fi
471 \parfillskip\zeropoint
472 \or
473
474 \spac_align_set_horizontal_centered_last_line
475 \or
476
477 \spac_align_set_horizontal_flushedright_last_line
478 \or
479
480 \parfillskip\zeropoint
481 \fi
482 \relax}
483
484
485
486\newconstant\c_spac_align_state_page
487
488\def\bottomalignlimit{\plusthree\lineheight}
489
490\newconstant\bottomraggednessmode
491
492\unexpanded\def\raggedbottom
493 {\bottomraggednessmode\zerocount
494 \settopskip}
495
496\unexpanded\def\alignbottom
497 {\bottomraggednessmode\plusone
498 \settopskip}
499
500\unexpanded\def\baselinebottom
501 {\bottomraggednessmode\plustwo
502 \settopskip}
503
504\let\normalbottom\alignbottom
505
506\unexpanded\def\setbottomalignmode#1
507 {\bottomraggednessmode#1
508 \settopskip}
509
510\def\spac_align_flush_page
511 {\ifcase\c_spac_align_state_page
512
513 \or
514 \raggedbottom
515 \or
516 \alignbottom
517 \or
518 \baselinebottom
519 \fi}
520
521
522
523\newconstant\c_spac_align_state_direction
524
525\def\spac_align_flush_direction
526 {\ifcase\c_spac_align_state_direction
527
528 \or
529 \lefttoright
530 \or
531 \righttoleft
532 \fi}
533
534
535
536
537
538\newtoks\t_spac_align_collected
539
540\let\raggedcommand \relax
541\let\updateraggedskips\relax
542
543\def\spac_align_add_to_cache
544 {\let\raggedbox\relax
545
546 \t_spac_align_collected \emptytoks
547 \c_spac_align_state_broad \zerocount
548 \c_spac_align_state_horizontal\zerocount
549 \c_spac_align_state_vertical \zerocount
550 \c_spac_align_state_direction \zerocount
551 \c_spac_align_state_page \zerocount
552 \c_spac_align_state_par_fill \zerocount
553 \ifcsname\??aligncommand\m_spac_align_asked\endcsname
554 \lastnamedcs
555 \else
556 \rawprocesscommacommand[\m_spac_align_asked]\spac_align_collect
557 \fi
558 \normalexpanded{\t_spac_align_collected
559 {
560 \setfalse\raggedonelinerstate
561 \the\t_spac_align_collected
562 \spac_align_flush_horizontal
563 \spac_align_flush_vertical
564 \spac_align_flush_direction
565 \spac_align_flush_page
566 \spac_align_flush_parfill
567 }}
568 \edef\raggedcommand {\the\t_spac_align_collected }
569 \edef\updateraggedskips{\spac_align_flush_horizontal}
570 \expandafter\glet\csname\??alignmentnormalcache\m_spac_align_asked\endcsname\raggedcommand
571 \expandafter\glet\csname\??alignmentraggedcache\m_spac_align_asked\endcsname\updateraggedskips}
572
573\def\spac_align_collect#1
574 {\csname\??aligncommand#1\endcsname}
575
576
577
578\unexpanded\def\spac_align_prepare#1
579 {\edef\m_spac_align_asked{#1}
580 \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname
581 \ifx\raggedcommand\relax
582 \spac_align_add_to_cache
583 \else
584 \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname
585 \fi}
586
587\let\dosetraggedcommand\spac_align_prepare
588
589
590
591\unexpanded\def\setupalign
592 {\dosingleempty\spac_align_setup}
593
594\def\spac_align_setup[#1]
595 {\edef\m_spac_align_asked{#1}
596 \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname
597 \ifx\raggedcommand\relax
598 \spac_align_add_to_cache
599 \else
600 \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname
601 \fi
602 \raggedcommand}
603
604\unexpanded\def\usealignparameter#1
605 {\edef\m_spac_align_asked{#1\c!align}
606 \ifx\m_spac_align_asked\empty\else
607 \spac_align_use_indeed
608 \fi}
609
610\unexpanded\def\dousealignparameter#1
611 {\edef\m_spac_align_asked{#1}
612 \ifx\m_spac_align_asked\empty\else
613 \spac_align_use_indeed
614 \fi}
615
616\def\spac_align_use_indeed
617 {\expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname
618 \ifx\raggedcommand\relax
619 \spac_align_add_to_cache
620 \else
621 \expandafter\let\expandafter\updateraggedskips\csname\??alignmentraggedcache\m_spac_align_asked\endcsname
622 \fi
623 \raggedcommand}
624
625
626
627\unexpanded\def\spac_align_use_later#1
628 {\begingroup
629 \edef\m_spac_align_asked{#1}
630 \expandafter\let\expandafter\raggedcommand\csname\??alignmentnormalcache\m_spac_align_asked\endcsname
631 \ifx\raggedcommand\relax
632 \spac_align_add_to_cache
633 \fi
634 \endgroup}
635
636\unexpanded\def\spac_align_use_now#1
637 {\csname\??alignmentnormalcache#1\endcsname}
638
639
640
641\unexpanded\def\installalign#1#2
642 {\ifcsname\??aligncommand#1\endcsname \else
643 \setvalue{\??aligncommand#1}{\toksapp\t_spac_align_collected{#2}}
644 \fi}
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669\letvalue{\??aligncommand\empty }\empty
670\setvalue{\??aligncommand\v!broad }{\c_spac_align_state_broad \plusone }
671\setvalue{\??aligncommand\v!wide }{\c_spac_align_state_broad \plustwo }
672
673\setvalue{\??aligncommand\v!bottom }{\c_spac_align_state_page \plusone }
674\setvalue{\??aligncommand\v!height }{\c_spac_align_state_page \plustwo }
675\setvalue{\??aligncommand\v!line }{\c_spac_align_state_page \plusthree
676
677 \toksapp\t_spac_align_collected{\settrue\raggedonelinerstate}}
678
679\setvalue{\??aligncommand\v!high }{\c_spac_align_state_vertical \plusthree}
680\setvalue{\??aligncommand\v!low }{\c_spac_align_state_vertical \plustwo }
681\setvalue{\??aligncommand\v!lohi }{\c_spac_align_state_vertical \plusone }
682
683\setvalue{\??aligncommand\v!flushright }{\c_spac_align_state_horizontal\plusthree}
684\setvalue{\??aligncommand\v!flushleft }{\c_spac_align_state_horizontal\plustwo }
685\setvalue{\??aligncommand\v!middle }{\c_spac_align_state_horizontal\plusone }
686\setvalue{\??aligncommand\v!no }{\c_spac_align_state_horizontal\plustwo }
687\setvalue{\??aligncommand\v!yes }{\c_spac_align_state_horizontal\zerocount}
688\setvalue{\??aligncommand\v!width }{\c_spac_align_state_horizontal\zerocount}
689\setvalue{\??aligncommand\v!normal }{\c_spac_align_state_horizontal\zerocount}
690\setvalue{\??aligncommand\v!reset }{\c_spac_align_state_page \zerocount
691 \c_spac_align_state_horizontal\zerocount}
692\setvalue{\??aligncommand\v!inner }{\c_spac_align_state_horizontal\plusfour }
693\setvalue{\??aligncommand\v!outer }{\c_spac_align_state_horizontal\plusfive }
694\setvalue{\??aligncommand\v!flushinner }{\c_spac_align_state_horizontal\plusfour }
695\setvalue{\??aligncommand\v!flushouter }{\c_spac_align_state_horizontal\plusfive }
696\setvalue{\??aligncommand\v!right }{\c_spac_align_state_horizontal\plustwo }
697\setvalue{\??aligncommand\v!left }{\c_spac_align_state_horizontal\plusthree}
698\setvalue{\??aligncommand\v!center }{\c_spac_align_state_horizontal\plusone
699 \c_spac_align_state_broad \plustwo }
700\setvalue{\??aligncommand\v!disable }{\c_spac_align_state_horizontal\plussix }
701\setvalue{\??aligncommand\v!last }{\c_spac_align_state_horizontal\plusseven}
702\setvalue{\??aligncommand\v!end }{\c_spac_align_state_horizontal\pluseight}
703\setvalue{\??aligncommand\v!paragraph }{\c_spac_align_state_horizontal\plusnine}
704
705\setvalue{\??aligncommand\v!lefttoright }{\c_spac_align_state_direction \plusone }
706\setvalue{\??aligncommand\v!righttoleft }{\c_spac_align_state_direction \plustwo }
707\setvalue{\??aligncommand l2r}{\c_spac_align_state_direction \plusone }
708\setvalue{\??aligncommand r2l}{\c_spac_align_state_direction \plustwo }
709
710\setvalue{\??aligncommand\v!table }{\c_spac_align_state_vertical \plusthree
711 \c_spac_align_state_broad \plusone
712 \c_spac_align_state_horizontal\plustwo }
713
714\setvalue{\??aligncommand\v!lesshyphenation}{\toksapp\t_spac_align_collected{\lesshyphens}}
715\setvalue{\??aligncommand\v!morehyphenation}{\toksapp\t_spac_align_collected{\morehyphens}}
716
717\setvalue{\??aligncommand\v!hanging }{\toksapp\t_spac_align_collected{\font_protruding_enable }}
718\setvalue{\??aligncommand\v!hangingboth }{\toksapp\t_spac_align_collected{\font_protruding_enable_b}}
719\setvalue{\??aligncommand\v!nothanging }{\toksapp\t_spac_align_collected{\font_protruding_disable}}
720\setvalue{\??aligncommand\v!hz }{\toksapp\t_spac_align_collected{\font_expansion_enable }}
721\setvalue{\??aligncommand\v!fullhz }{\toksapp\t_spac_align_collected{\font_expansion_enable_k}}
722\setvalue{\??aligncommand\v!nohz }{\toksapp\t_spac_align_collected{\font_expansion_disable }}
723
724
725\setvalue{\??aligncommand\v!hyphenated }{\toksapp\t_spac_align_collected{\dohyphens}}
726\setvalue{\??aligncommand\v!nothyphenated }{\toksapp\t_spac_align_collected{\nohyphens}}
727
728\setvalue{\??aligncommand\v!tolerant }{\toksapp\t_spac_align_collected{\spac_align_set_tolerant}}
729\setvalue{\??aligncommand\v!verytolerant }{\toksapp\t_spac_align_collected{\spac_align_set_very_tolerant}}
730\setvalue{\??aligncommand\v!stretch }{\toksapp\t_spac_align_collected{\spac_align_set_stretch}}
731\setvalue{\??aligncommand\v!extremestretch }{\toksapp\t_spac_align_collected{\spac_align_set_extreme_stretch}}
732
733\setvalue{\??aligncommand \v!final}{\c_spac_align_state_par_fill\plusone}
734\setvalue{\??aligncommand1*\v!final}{\c_spac_align_state_par_fill\plusone}
735\setvalue{\??aligncommand2*\v!final}{\c_spac_align_state_par_fill\plustwo}
736\setvalue{\??aligncommand3*\v!final}{\c_spac_align_state_par_fill\plusthree}
737\setvalue{\??aligncommand4*\v!final}{\c_spac_align_state_par_fill\plusfour}
738
739
740
741\setvalue{\??aligncommand \v!more}{\toksapp\t_spac_align_collected{\looseness\plusone}}
742\setvalue{\??aligncommand1*\v!more}{\toksapp\t_spac_align_collected{\looseness\plusone}}
743\setvalue{\??aligncommand2*\v!more}{\toksapp\t_spac_align_collected{\looseness\plustwo}}
744
745
746
747
748\definehspace [\v!final] [\emspaceamount]
749
750\def\spac_align_flush_parfill
751 {\ifcase\c_spac_align_state_par_fill\else
752 \spac_align_flush_parfill_indeed{\number\c_spac_align_state_par_fill}
753 \fi}
754
755\unexpanded\def\spac_align_flush_parfill_indeed#1
756 {\parfillskip
757 #1\directhspaceamount\v!final
758
759 plus 1fill
760 \relax}
761
762
763
764\newtoks \t_spac_every_swap_align
765
766\appendtoks
767 \setvalue{\??aligncommand\v!right}{\c_spac_align_state_horizontal\plusthree}
768 \setvalue{\??aligncommand\v!left }{\c_spac_align_state_horizontal\plustwo }
769\to \t_spac_every_swap_align
770
771\unexpanded\def\enablereversealignment
772 {\the\t_spac_every_swap_align
773 \t_spac_every_swap_align\emptytoks}
774
775
776
777\let\notragged \spac_align_set_horizontal_none
778\let\raggedleft \spac_align_set_horizontal_left
779\let\raggedcenter \spac_align_set_horizontal_center
780\let\raggedright \spac_align_set_horizontal_right
781\let\veryraggedleft \spac_align_set_horizontal_very_left
782\let\veryraggedcenter \spac_align_set_horizontal_very_center
783\let\veryraggedright \spac_align_set_horizontal_very_right
784\let\raggedwidecenter \spac_align_set_horizontal_wide_center
785\let\centeredlastline \spac_align_set_horizontal_centered_last_line
786\let\flushedrightlastline\spac_align_set_horizontal_flushedright_last_line
787\let\ttraggedright \spac_align_set_horizontal_right_tt
788
789\let\forgetragged \spac_align_set_horizontal_none
790
791\appendtoks
792 \spac_align_set_horizontal_none
793\to \everyforgetall
794
795
796
797\unexpanded\def\ibox
798 {\vbox\bgroup
799 \forgetall
800 \let\\\endgraf
801 \ifdoublesided\signalinnerrealign\fi
802 \doifelserightpage\spac_align_set_horizontal_right\spac_align_set_horizontal_left
803 \let\next}
804
805\unexpanded\def\obox
806 {\vbox\bgroup
807 \forgetall
808 \let\\\endgraf
809 \ifdoublesided\signalouterrealign\fi
810 \doifelserightpage\spac_align_set_horizontal_left\spac_align_set_horizontal_right
811 \let\next}
812
813\let\raggedbox\relax
814
815\def\dosetraggedvbox#1
816 {\let\raggedbox\vbox
817 \processcommacommand[#1]\spac_align_set_ragged_vbox}
818
819\def\dosetraggedhbox#1
820 {\let\raggedbox\hbox
821 \processcommacommand[#1]\spac_align_set_ragged_hbox}
822
823\def\spac_align_set_ragged_vbox#1
824 {\ifcsname\??alignvertical#1\endcsname
825 \lastnamedcs
826 \quitcommalist
827 \fi}
828
829\def\spac_align_set_ragged_hbox#1
830 {\ifcsname\??alignhorizontal#1\endcsname
831 \lastnamedcs
832 \quitcommalist
833 \fi}
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849\setvalue{\??alignvertical \v!left }{\let\raggedbox\lbox}
850\setvalue{\??alignvertical \v!right }{\let\raggedbox\rbox}
851\setvalue{\??alignvertical \v!middle }{\let\raggedbox\cbox}
852\setvalue{\??alignvertical \v!inner }{\let\raggedbox\ibox}
853\setvalue{\??alignvertical \v!outer }{\let\raggedbox\obox}
854\setvalue{\??alignvertical \v!flushleft }{\let\raggedbox\rbox}
855\setvalue{\??alignvertical \v!flushright}{\let\raggedbox\lbox}
856\setvalue{\??alignvertical \v!center }{\let\raggedbox\cbox}
857\setvalue{\??alignvertical \v!no }{\def\raggedbox{\vbox\bgroup\spac_align_set_horizontal_right\let\next=}]}
858
859
860
861\setvalue{\??alignhorizontal\v!left }{\def\raggedbox{\doalignedline\v!left }}
862\setvalue{\??alignhorizontal\v!right }{\def\raggedbox{\doalignedline\v!right }}
863\setvalue{\??alignhorizontal\v!middle }{\def\raggedbox{\doalignedline\v!middle}}
864\setvalue{\??alignhorizontal\v!inner }{\def\raggedbox{\doalignedline\v!inner }}
865\setvalue{\??alignhorizontal\v!outer }{\def\raggedbox{\doalignedline\v!outer }}
866\setvalue{\??alignhorizontal\v!flushleft }{\def\raggedbox{\doalignedline\v!right }}
867\setvalue{\??alignhorizontal\v!flushright}{\def\raggedbox{\doalignedline\v!left }}
868\setvalue{\??alignhorizontal\v!center }{\def\raggedbox{\doalignedline\v!middle}}
869
870
871
872
873\unexpanded\def\setraggedskips#1#2#3#4#5#6#7
874 {\unexpanded\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}
875 \updateraggedskips}
876
877\def\dosetraggedskips#1#2#3#4#5#6#7
878 {\raggedstatus #1\relax
879 \leftskip 1\leftskip \s!plus#2\relax
880 \rightskip 1\rightskip\s!plus#3\relax
881 \spaceskip #4\relax
882 \xspaceskip #5\relax
883 \parfillskip \zeropoint\s!plus#6\relax
884 \parindent #7\relax
885 \c_attr_alignstate\ifcase\raggedstatus\attributeunsetvalue\else\raggedstatus\fi}
886
887
888
889\let\spaceamount \interwordspace
890\let\emspaceamount\emwidth
891
892
893
894\def\spac_show_par_data#1
895 {\ifx#1\relax\else
896 \hbox{\string#1: \the#1}\endgraf
897 \expandafter\spac_show_par_data
898 \fi}
899
900\unexpanded\def\showpardata
901 {\edef\thepardata
902 {\hbox{font: \fontname\font}\endgraf
903 \spac_show_par_data
904 \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace
905 \hsize \vsize
906 \leftskip \rightskip
907 \spaceskip \xspaceskip
908 \parindent \parfillskip
909 \hyphenpenalty \exhyphenpenalty \automatichyphenpenalty \explicithyphenpenalty
910 \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty
911 \doublehyphendemerits \finalhyphendemerits \adjdemerits
912 \relax}
913 \dontleavehmode
914 \begingroup
915 \inleftmargin{\vsmash{\infofont\framed[\c!align=\v!right]{\thepardata}}}
916 \endgroup
917 \let\showpardata\relax}
918
919\unexpanded\def\startshowpardata
920 {\begingroup
921 \showstruts
922 \tracingparagraphs\maxdimen
923 \appendtoksonce\showpardata\to\everypar}
924
925\unexpanded\def\stopshowpardata
926 {\endgraf
927 \endgroup}
928
929
930
931\unexpanded\def\startalignment
932 {\par
933 \begingroup
934 \setupalign}
935
936\unexpanded\def\stopalignment
937 {\par
938 \endgroup}
939
940\setnewconstant\alignstrutmode\plusone
941
942
943
944\newtoks \everyleftofalignedline
945\newtoks \everyrightofalignedline
946
947\unexpanded\def\shiftalignedline#1#2#3#4
948 {\rightorleftpageaction
949 {\everyleftofalignedline {\hskip\dimexpr#1#3\relax}
950 \everyrightofalignedline{\hskip\dimexpr#2#4\relax}}
951 {\everyleftofalignedline {\hskip\dimexpr#1#4\relax}
952 \everyrightofalignedline{\hskip\dimexpr#2#3\relax}}}
953
954\def\doalignline#1#2
955 {\noindentation
956 \dontleavehmode
957 \begingroup
958 \setlocalhsize
959 \protected\def\\{\egroup\par\doalignline{#1}{#2}\bgroup}
960 \dowithnextbox
961 {\hbox to \localhsize
962 {\ifcase\alignstrutmode\or\strut\fi
963 \the\everyleftofalignedline
964 #1\unhbox\nextbox#2\relax
965 \the\everyrightofalignedline}
966 \endgroup}
967 \hbox}
968
969
970
971\ifdefined\line \else \def\line {\hbox to\hsize} \fi
972\ifdefined\leftline \else \def\leftline #1{\line{#1\hss}} \fi
973\ifdefined\rightline \else \def\rightline #1{\line{\hss#1}} \fi
974\ifdefined\centerline \else \def\centerline#1{\line{\hss#1\hss}} \fi
975
976
977
978\installcorenamespace{alignwrapper}
979
980\setuvalue{\??alignwrapper\v!left }{\doalignline\relax \hss }
981\setuvalue{\??alignwrapper\v!middle}{\doalignline\hss \hss }
982\setuvalue{\??alignwrapper\v!right }{\doalignline\hss \relax}
983\setuvalue{\??alignwrapper\v!max }{\doalignline\relax \relax}
984
985\def\spac_align_wrapper_middle {\doalignline\hss \hss}
986
987\def\spac_align_wrapper_handle#1
988
989 {\ifcsname\??alignwrapper#1\endcsname\expandafter\lastnamedcs\else\expandafter\spac_align_wrapper_middle\fi}
990
991\unexpanded\def\spac_align_wrapper_start[#1]
992 {\spac_align_wrapper_handle{#1}
993 \bgroup\ignorespaces}
994
995\unexpanded\def\spac_align_wrapper_stop
996 {\removeunwantedspaces\egroup}
997
998\unexpanded\def\startlinealignment
999 {\dosingleempty\spac_align_wrapper_start}
1000
1001\let\stoplinealignment\spac_align_wrapper_stop
1002
1003\unexpanded\def\startleftaligned {\spac_align_wrapper_start[\v!left ]} \let\stopleftaligned \spac_align_wrapper_stop
1004\unexpanded\def\startmiddlealigned{\spac_align_wrapper_start[\v!middle]} \let\stopmiddlealigned\spac_align_wrapper_stop
1005\unexpanded\def\startrightaligned {\spac_align_wrapper_start[\v!right ]} \let\stoprightaligned \spac_align_wrapper_stop
1006\unexpanded\def\startmaxaligned {\spac_align_wrapper_start[\v!max ]} \let\stopmaxaligned \spac_align_wrapper_stop
1007
1008\let\startmidaligned \startmiddlealigned \let\stopmidaligned \stopmiddlealigned
1009\let\startcenteraligned\startmiddlealigned \let\stopcenteraligned\stopmiddlealigned
1010
1011\unexpanded\def\leftaligned {\spac_align_wrapper_handle\v!left }
1012\unexpanded\def\middlealigned{\spac_align_wrapper_handle\v!middle}
1013\unexpanded\def\rightaligned {\spac_align_wrapper_handle\v!right }
1014\unexpanded\def\maxaligned {\spac_align_wrapper_handle\v!max }
1015
1016\let\midaligned \middlealigned
1017\let\centeraligned\middlealigned
1018
1019\installcorenamespace{alignline}
1020
1021\letvalue{\??alignline\v!left }\leftaligned
1022\letvalue{\??alignline\v!right }\rightaligned
1023\letvalue{\??alignline\v!middle }\midaligned
1024\letvalue{\??alignline\v!flushleft }\rightaligned
1025\letvalue{\??alignline\v!flushright}\leftaligned
1026\letvalue{\??alignline\v!center }\midaligned
1027\letvalue{\??alignline\v!max }\maxaligned
1028
1029\def\doalignedline#1{\resetrealignsignal\csname\??alignline#1\endcsname}
1030
1031
1032
1033
1034\def\doxalignline#1#2#3#4#5#6
1035 {\noindentation
1036 \dontleavehmode
1037 \begingroup
1038 \setlocalhsize
1039 \protected\def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}
1040 \dowithnextbox
1041 {\hbox to \localhsize
1042 {#1\hskip\ifdone#2\else#3\fi#4
1043 \hbox to \localhsize
1044 {\the\everyleftofalignedline
1045 \ifcase\alignstrutmode\or\strut\fi
1046 \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi
1047 \the\everyrightofalignedline}
1048 \hss}
1049 \endgroup}
1050 \hbox}
1051
1052\def\doxcheckline
1053 {\signalrightpage\doifelserightpage\donetrue\donefalse}
1054
1055\setvalue{\??alignline\v!inner }{\doxalignline\doxcheckline\zeropoint \relax\hss }
1056\setvalue{\??alignline\v!outer }{\doxalignline\doxcheckline\zeropoint \hss \relax}
1057\setvalue{\??alignline\v!innermargin}{\doxalignline\doxcheckline\innermargintotal\relax\hss }
1058\setvalue{\??alignline\v!outermargin}{\doxalignline\doxcheckline\outermargintotal\hss \relax}
1059\setvalue{\??alignline\v!inneredge }{\doxalignline\doxcheckline\inneredgetotal \relax\hss }
1060\setvalue{\??alignline\v!outeredge }{\doxalignline\doxcheckline\outeredgetotal \hss \relax}
1061\setvalue{\??alignline\v!backspace }{\doxalignline\doxcheckline\backspace \relax\hss }
1062\setvalue{\??alignline\v!cutspace }{\doxalignline\doxcheckline\cutspace \hss \relax}
1063
1064\setvalue{\??alignline\v!leftmargin }{\doxalignline\donefalse \leftmargintotal \hss \relax}
1065\setvalue{\??alignline\v!rightmargin}{\doxalignline\donefalse \rightmargintotal\relax\hss }
1066\setvalue{\??alignline\v!leftedge }{\doxalignline\donefalse \leftedgetotal \hss \relax}
1067\setvalue{\??alignline\v!rightedge }{\doxalignline\donefalse \rightedgetotal \relax\hss }
1068
1069\def\doalignedline#1
1070 {\csname\??alignline#1\endcsname}
1071
1072\def\alignedline#1#2
1073
1074 {\ifcsname\??alignline#1\endcsname
1075 \expandafter\lastnamedcs
1076 \else
1077 \csname\??alignline#2\expandafter\endcsname
1078 \fi}
1079
1080
1081
1082
1083\unexpanded\def\wordright
1084 {\dosingleempty\spac_word_right}
1085
1086\def\spac_word_right[#1]
1087 {
1088 \groupedcommand
1089 {\removeunwantedspaces
1090 \hfill
1091 \allowbreak
1092 \strut
1093 \hfill
1094 \quad
1095 \hbox}
1096 {\doifelse{#1}\v!right{\kern\rightskip}{\doifsomething{#1}{\kern#1}}
1097 \parfillskip\zeropoint
1098 \finalhyphendemerits\zerocount
1099 \par}}
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131\installcorenamespace{alignsimple}
1132\installcorenamespace{alignsimplereverse}
1133
1134
1135
1136\unexpanded\def\spac_align_simple_left #1{{#1\hss}}
1137\unexpanded\def\spac_align_simple_right #1{{\hss#1}}
1138\unexpanded\def\spac_align_simple_middle#1{{\hss#1\hss}}
1139
1140\letvalue{\??alignsimple \v!right }\spac_align_simple_left
1141\letvalue{\??alignsimple \v!outer }\spac_align_simple_left
1142\letvalue{\??alignsimple \v!flushleft }\spac_align_simple_left
1143\letvalue{\??alignsimple \v!left }\spac_align_simple_right
1144\letvalue{\??alignsimple \v!inner }\spac_align_simple_right
1145\letvalue{\??alignsimple \v!flushright}\spac_align_simple_right
1146\letvalue{\??alignsimple \v!middle }\spac_align_simple_middle
1147
1148\letvalue{\??alignsimplereverse\v!right }\spac_align_simple_right
1149\letvalue{\??alignsimplereverse\v!outer }\spac_align_simple_right
1150\letvalue{\??alignsimplereverse\v!flushleft }\spac_align_simple_right
1151\letvalue{\??alignsimplereverse\v!left }\spac_align_simple_left
1152\letvalue{\??alignsimplereverse\v!inner }\spac_align_simple_left
1153\letvalue{\??alignsimplereverse\v!flushright}\spac_align_simple_left
1154\letvalue{\??alignsimplereverse\v!middle }\spac_align_simple_middle
1155
1156\unexpanded\def\simplealignedbox#1#2
1157 {\hbox \ifdim#1>\zeropoint to #1
1158 \ifcsname\??alignsimple#2\endcsname
1159 \doubleexpandafter\lastnamedcs
1160 \else
1161 \doubleexpandafter\spac_align_simple_left
1162 \fi
1163 \fi}
1164
1165\unexpanded\def\simplealignedspreadbox#1#2
1166 {\hbox \ifdim#1>\zeropoint spread #1
1167 \ifcsname\??alignsimple#2\endcsname
1168 \doubleexpandafter\lastnamedcs
1169 \else
1170 \doubleexpandafter\spac_align_simple_left
1171 \fi
1172 \fi}
1173
1174\unexpanded\def\simplealignedboxplus#1#2#3
1175 {\hbox #3 \ifdim#1>\zeropoint to #1
1176 \ifcsname\??alignsimple#2\endcsname
1177 \doubleexpandafter\lastnamedcs
1178 \else
1179 \doubleexpandafter\spac_align_simple_left
1180 \fi
1181 \fi}
1182
1183\newconditional\alignsimplelefttoright \settrue\alignsimplelefttoright
1184
1185\unexpanded\def\simplereversealignedbox#1#2
1186 {\hbox \ifdim#1>\zeropoint to #1
1187 \ifcsname\??alignsimplereverse#2\endcsname
1188 \doubleexpandafter\lastnamedcs
1189 \else
1190 \doubleexpandafter\spac_align_simple_left
1191 \fi
1192 \fi}
1193
1194\unexpanded\def\simplereversealignedboxplus#1#2#3
1195 {\hbox #3 \ifdim#1>\zeropoint to #1
1196 \ifcsname\??alignsimplereverse#2\endcsname
1197 \doubleexpandafter\lastnamedcs
1198 \else
1199 \doubleexpandafter\spac_align_simple_left
1200 \fi
1201 \fi}
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220\unexpanded\def\definehbox
1221 {\dodoubleargument\spac_align_definehbox}
1222
1223\def\spac_align_definehbox[#1][#2]
1224 {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}}
1225
1226
1227
1228\installcorenamespace {reverse}
1229
1230\setvalue{\??reverse\v!normal }{\ifconditional\inlinelefttoright\else\s!reverse\fi}
1231\setvalue{\??reverse\v!reverse}{\ifconditional\inlinelefttoright \s!reverse\fi}
1232
1233\let\usedirectionparameterreverse\gobbleoneargument
1234
1235\protect \endinput
1236 |