1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Packaging Macros Ruled Content}
15
16
17
18
19
20
21\newinteger \framednoflines
22\newdimension\framedfirstheight
23\newdimension\framedlastdepth
24\newdimension\framedminwidth
25\newdimension\framedmaxwidth
26\newdimension\framedaveragewidth
27
28\registerctxluafile{packrul}{autosuffix}
29
30\unprotect
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45\newdimension\linewidth
46
47\permanent\tolerant\protected\def\setuplinewidth[#1]
48 {\assigndimension{#1}\linewidth{.2\points}{.4\points}{.6\points}}
49
50
51
52\installcorenamespace{framed}
53\installcorenamespace{framedtop}
54\installcorenamespace{framedbottom}
55\installcorenamespace{framedleft}
56\installcorenamespace{framedright}
57
58\installcorenamespace{regularframed}
59\installcorenamespace{simplifiedframed}
60
61\installcommandhandler \??framed {framed} \??framed
62
63\aliased\let\pack_framed_framedparameter \framedparameter
64\aliased\let\pack_framed_framedparameterhash\framedparameterhash
65\aliased\let\pack_framed_setupcurrentframed \setupcurrentframed
66
67\def\pack_framed_initialize
68 {\enforced\let\framedparameter \pack_framed_framedparameter
69 \enforced\let\framedparameterhash\pack_framed_framedparameterhash
70 \enforced\let\setupcurrentframed \pack_framed_setupcurrentframed
71 \inframedtrue}
72
73
74
75\permanent\def\frameddimension#1{\todimension{\framedparameter{#1}}}
76
77
78
79\permanent\protected\def\installinheritedframed#1
80 {\normalexpanded{\mult_interfaces_install_inherited_framed
81 \expandafter\noexpand\csname current#1\endcsname
82 \expandafter\noexpand\csname #1parameter\endcsname
83 \expandafter\noexpand\csname #1parameterhash\endcsname
84 \expandafter\noexpand\csname do#1parameter\endcsname
85 \expandafter\noexpand\csname do#1parentparameter\endcsname
86 \expandafter\noexpand\csname do#1rootparameter\endcsname
87 \expandafter\noexpand\csname setupcurrent#1\endcsname
88 \expandafter\noexpand\csname inherited#1framed\endcsname
89 \expandafter\noexpand\csname inherited#1framedbox\endcsname}}
90
91\protected\def\mult_interfaces_install_inherited_framed#1#2#3#4#5#6#7#8#9
92 {\enforced\frozen\def#5##1##2{\ifrelax##1#6{##2}\else#4{##1}{##2}\fi}
93
94\enforced\frozen\def#6##1{\ifcsname\??framed:##1\endcsname\csnamestring\else\??empty\fi}
95 \frozen\instance\protected\def#8
96 {\bgroup
97 \bgroup
98 \inframedtrue
99 \enforced\let\currentframed #1
100 \enforced\let\framedparameter #2
101 \enforced\let\framedparameterhash#3
102 \enforced\let\setupcurrentframed #7
103 \pack_framed_process_indeed}
104 \frozen\instance\protected\def#9
105 {\bgroup
106 \inframedtrue
107 \enforced\let\currentframed #1
108 \enforced\let\framedparameter #2
109 \enforced\let\framedparameterhash#3
110 \enforced\let\setupcurrentframed #7
111 \pack_framed_process_box_indeed}}
112
113\permanent\protected\def\installframedcommandhandler#1#2#3
114 {\installcommandhandler{#1}{#2}{#3}
115 \installinheritedframed{#2}}
116
117\permanent\protected\def\installframedautocommandhandler#1#2#3
118 {\installautocommandhandler{#1}{#2}{#3}
119 \installinheritedframed{#2}}
120
121\permanent\protected\def\installsimpleframedcommandhandler#1#2#3
122 {\installsimplecommandhandler{#1}{#2}{#3}
123 \installinheritedframed{#2}}
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153\setupframed
154 [\c!width=\v!fit,
155 \c!height=\v!broad,
156
157
158 \c!offset=.25\exheight,
159 \c!empty=\v!no,
160 \c!frame=\v!on,
161
162
163
164
165 \c!radius=.5\bodyfontsize,
166 \c!rulethickness=\linewidth,
167 \c!dashstep=.1\emwidth,
168 \c!corner=\v!rectangular,
169 \c!depth=\zeropoint,
170
171
172
173
174 \c!backgroundoffset=\zeropoint,
175
176 \c!frameoffset=\zeropoint,
177 \c!backgroundcorner=\framedparameter\c!corner,
178 \c!backgroundradius=\framedparameter\c!radius,
179 \c!backgrounddepth=\framedparameter\c!depth,
180 \c!framecorner=\framedparameter\c!corner,
181 \c!frameradius=\framedparameter\c!radius,
182 \c!framedepth=\framedparameter\c!depth,
183
184
185
186 \c!bottom=\vss,
187
188 \c!strut=\v!yes,
189 \c!autostrut=\v!yes,
190 \c!location=\v!normal,
191
192
193 \c!autowidth=\v!yes,
194
195 \c!synchronize=,
196 \c!loffset=\zeropoint,
197 \c!roffset=\zeropoint,
198 \c!toffset=\zeropoint,
199 \c!boffset=\zeropoint]
200
201
202
203\defineframed
204 [\??simplifiedframed]
205 [\c!frame=\v!off,
206 \c!depth=\zeropoint,
207 \c!offset=\v!overlay,
208 \c!component=,
209 \c!region=,
210 \c!radius=.5\bodyfontsize,
211 \c!rulethickness=\linewidth,
212 \c!corner=\v!rectangular,
213 \c!backgroundoffset=\zeropoint,
214 \c!frameoffset=\zeropoint,
215 \c!backgroundcorner=\framedparameter\c!corner,
216 \c!backgroundradius=\framedparameter\c!radius,
217 \c!backgrounddepth=\framedparameter\c!depth,
218 \c!framecorner=\framedparameter\c!corner,
219 \c!frameradius=\framedparameter\c!radius,
220 \c!framedepth=\framedparameter\c!depth,
221 \c!location=\v!normal,
222 \c!loffset=\zeropoint,
223 \c!roffset=\zeropoint,
224 \c!toffset=\zeropoint,
225 \c!boffset=\zeropoint]
226
227\permanent\protected\def\definesimplifiedframed[#1]
228 {\defineframed[#1][\??simplifiedframed]
229 \enforced\letcsname#1\endcsname\undefined}
230
231\letcsname\??simplifiedframed\endcsname\undefined
232
233
234
235
236\newdimension\d_framed_target_wd
237\newdimension\d_framed_target_ht
238\newdimension\d_framed_target_dp
239
240\newdimension\d_framed_linewidth \aliasdimension\ruledlinewidth\d_framed_linewidth
241
242\lettonothing\p_frame
243\lettonothing\p_framed_adaptive
244\lettonothing\p_framed_anchoring
245\lettonothing\p_framed_autostrut
246\lettonothing\p_framed_autowidth
247\lettonothing\p_framed_background
248\lettonothing\p_framed_backgroundcolor
249\lettonothing\p_framed_backgroundcorner
250\lettonothing\p_framed_backgroundoffset
251\lettonothing\p_framed_backgroundradius
252\lettonothing\p_framed_component
253\lettonothing\p_framed_empty
254\lettonothing\p_framed_foregroundcolor
255\lettonothing\p_framed_foregroundstyle
256\lettonothing\p_framed_frame
257\lettonothing\p_framed_framecolor
258\lettonothing\p_framed_framecorner
259
260\lettonothing\p_framed_franalyze
261\lettonothing\p_framed_lines
262\lettonothing\p_framed_location
263\lettonothing\p_framed_minheight
264\lettonothing\p_framed_orientation
265
266\lettonothing\p_framed_setups
267\lettonothing\p_framed_synchronize
268\lettonothing\p_framed_text_depthcorrection
269\lettonothing\p_framed_text_strut
270
271
272
273
274\def\pack_framed_filled_box
275 {\edef\p_framed_backgroundcorner{\framedparameter\c!backgroundcorner}
276 \ifx\p_framed_backgroundcorner\v!rectangular
277 \pack_framed_filled_box_normal
278 \else
279 \pack_framed_filled_box_radius
280 \fi}
281
282\def\pack_framed_filled_box_normal
283 {\vrule
284 \s!width \d_framed_target_wd
285 \s!height\d_framed_target_ht
286 \s!depth \d_framed_target_dp
287 \relax}
288
289\def\pack_framed_filled_box_radius
290 {\edef\p_framed_backgroundradius{\framedparameter\c!backgroundradius}
291 \ifzeropt{\p_framed_backgroundradius}
292 \pack_framed_filled_box_normal
293 \else
294 \pack_framed_filled_box_round
295 \fi}
296
297
298
299
300
301
302
303
304
305
306
307
308\def\pack_framed_filled_box_round
309 {\raise\d_framed_target_dp
310 \hpack{\clf_roundedfill
311 \d_framed_target_wd
312 \d_framed_target_ht
313 \d_framed_target_dp
314 \d_framed_linewidth
315 {\p_framed_backgroundradius}
316 {\p_framed_backgroundcorner}
317 \relax}}
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352\def\pack_framed_stroked_box
353 {\edef\p_framed_framecorner{\framedparameter\c!framecorner}
354 \ifx\p_framed_framecorner\v!rectangular
355 \pack_framed_stroked_box_normal
356 \orelse\ifx\p_framed_frame\v!on
357 \pack_framed_stroked_box_round
358 \fi}
359
360\def\pack_framed_stroked_box_round
361 {\raise\d_framed_target_dp
362 \hpack{\clf_roundedoutline
363 \d_framed_target_wd
364 \d_framed_target_ht
365 \d_framed_target_dp
366 \d_framed_linewidth
367 {\framedparameter\c!frameradius}
368 {\p_framed_framecorner}
369 \relax}}
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420\def\pack_framed_background_box_color
421 {\edef\p_framed_backgroundcolor{\framedparameter\c!backgroundcolor}
422 \ifempty\p_framed_backgroundcolor \else
423 \doifcolor\p_framed_backgroundcolor\pack_framed_background_box_color_indeed
424 \fi}
425
426\def\pack_framed_background_box_color_indeed
427 {\hpack{\dousecolorparameter\p_framed_backgroundcolor\pack_framed_filled_box}}
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485\newdimension\d_overlay_width
486\newdimension\d_overlay_height
487\newdimension\d_overlay_depth
488\newdimension\d_overlay_offset
489\newdimension\d_overlay_linewidth
490\newdimension\d_overlay_mathaxis
491\newdimension\d_overlay_mathexheight
492\newdimension\d_overlay_mathemwidth
493
494\lettonothing\m_overlay_region
495
496
497
498\mutable \def\overlaywidth {\the\d_overlay_width \space}
499\mutable \def\overlayheight {\the\d_overlay_height \space}
500\mutable \def\overlaydepth {\the\d_overlay_depth \space}
501\mutable \def\overlayoffset {\the\d_overlay_offset \space}
502\mutable \def\overlaylinewidth {\the\d_overlay_linewidth \space}
503\mutable \def\overlaymathaxis {\the\d_overlay_mathaxis \space}
504\mutable \def\overlaymathexheight {\the\d_overlay_mathexheight\space}
505\mutable \def\overlaymathemwidth {\the\d_overlay_mathemwidth \space}
506\mutable \def\overlayregion {\m_overlay_region}
507
508\mutable \def\overlayradius {\todimension{\framedparameter\c!frameradius}}
509\mutable \def\overlaycolor {\framedparameter\c!backgroundcolor}
510\mutable \def\overlaylinecolor {\framedparameter\c!framecolor}
511
512
513
514\aliased\let\usedoverlaywidth \d_overlay_width
515\aliased\let\usedoverlayheight \d_overlay_height
516\aliased\let\usedoverlaydepth \d_overlay_depth
517\aliased\let\usedoverlayoffset \d_overlay_offset
518\aliased\let\usedoverlaylinewidth \d_overlay_linewidth
519\aliased\let\usedoverlaymathaxis \d_overlay_mathaxis
520\aliased\let\usedoverlaymathexheight\d_overlay_mathexheight
521\aliased\let\usedoverlaymathemwidth \d_overlay_mathemwidth
522
523
524
525\newtoks\everyoverlay
526
527
528
529
530\installcorenamespace{overlay}
531\installcorenamespace{overlaybuiltin}
532
533\appendtoks
534 \oninterlineskip
535\to \everyoverlay
536
537\prependtoks
538 \hsize\d_overlay_width
539 \vsize\d_overlay_height
540\to \everyoverlay
541
542\protected\def\pack_overlay_define#1#2
543 {\defcsname\??overlay#1\endcsname{\executedefinedoverlay{#1}{#2}}}
544
545\permanent\tolerant\protected\def\defineoverlay[#1]#*[#S#2]
546
547 {\def\pack_framed_define_overlay_indeed##1{\pack_overlay_define{##1}{#2}}
548 \processcommalist[#1]\pack_framed_define_overlay_indeed}
549
550\permanent\protected\def\executedefinedoverlay#1#2
551 {\bgroup
552 \setlayoutcomponentattribute{\v!overlay:#1}
553 \setbox\scratchbox\hbox \layoutcomponentboxattribute{\expand\everyoverlay#2}
554 \boxxoffset\scratchbox.5\dimexpr\wd\scratchbox\d_framed_target_wd\relax
555 \boxyoffset\scratchbox.5\dimexpr\ht\scratchbox\d_framed_target_ht\d_framed_target_dp\relax
556 \wd\scratchbox\d_framed_target_wd
557 \ht\scratchbox\d_framed_target_ht
558 \dp\scratchbox\d_framed_target_dp
559 \box\scratchbox
560 \egroup}
561
562
563
564
565\permanent\protected\def\overlayfakebox
566 {\hpack
567 {\novrule
568 \s!width \d_overlay_width
569 \s!height\d_overlay_height
570 \s!depth \zeropoint}}
571
572
573
574\permanent\def\doifelseoverlay#1
575 {\ifcsname\??overlay#1\endcsname
576 \expandafter\firstoftwoarguments
577 \else
578 \expandafter\secondoftwoarguments
579 \fi}
580
581\aliased\let\doifoverlayelse\doifelseoverlay
582
583
584
585
586\newbox\b_framed_normal
587\newbox\b_framed_extra
588
589\newtoks\everybackgroundbox
590
591\lettonothing\m_framed_background
592
593\def\pack_framed_process_background
594 {\ifcsname\??overlaybuiltin\m_framed_background\endcsname
595 \expandafter\pack_framed_process_background_indeed_internal\lastnamedcs
596 \orelse\ifcsname\??overlay\m_framed_background\endcsname
597 \expandafter\pack_framed_process_background_indeed_external\lastnamedcs
598 \fi}
599
600\def\pack_framed_process_background_indeed_internal#1
601 {\bgroup
602 \setbox\b_framed_extra\hpack\bgroup
603 \ifzeropt\framedbackgroundoffset\else
604 \kern\framedbackgroundoffset
605 \fi
606 \hbox\bgroup#1\egroup
607 \egroup
608 \wd\b_framed_extra\zeropoint
609 \ht\b_framed_extra\framedbackgroundheight
610 \dp\b_framed_extra\framedbackgrounddepth
611 \box\b_framed_extra
612 \egroup}
613
614\let\pack_framed_overlay_initialize\relax
615
616\def\pack_framed_process_background_indeed_external
617 {\pack_framed_overlay_initialize
618 \pack_framed_process_background_indeed_internal}
619
620\def\pack_framed_process_backgrounds#1,#2
621 {\edef\m_framed_background{#1}
622 \ifx\m_framed_background\s!unknown\else
623 \pack_framed_process_background
624 \expandafter\pack_framed_process_backgrounds
625 \fi#2}
626
627
628
629
630\newdimension\framedbackgroundwidth
631\newdimension\framedbackgroundheight
632\newdimension\framedbackgrounddepth
633\newdimension\framedbackgroundoffset
634
635\aliased\let\foregroundbox\relax
636
637\def\pack_framed_background_box_content
638 {\vpack to \framedbackgroundheight{\vss\box\b_framed_normal\vss}}
639
640\def\pack_framed_set_region
641 {\ifx\m_overlay_region\v!yes
642 \edef\m_overlay_region{\reservedautoregiontag}
643 \fi}
644
645\def\pack_framed_add_region
646 {\anch_mark_tagged_box\b_framed_normal\m_overlay_region\zerocount}
647
648\def\pack_framed_add_background
649 {\ifconditional\c_pack_reanchor
650 \analyzelocalanchors\b_framed_normal
651 \fi
652 \setbox\b_framed_normal\hpack
653 {
654 \boxmaxdepth\maxdimen
655 \framedbackgroundoffset\d_framed_backgroundoffset
656 \framedbackgroundwidth \wd\b_framed_normal
657 \framedbackgroundheight\ht\b_framed_normal
658 \framedbackgrounddepth \dp\b_framed_normal
659 \d_framed_target_wd{\framedbackgroundwidth 2\framedbackgroundoffset}
660 \d_framed_target_ht{\framedbackgroundheight \framedbackgroundoffset}
661 \d_framed_target_dp{\framedbackgrounddepth \framedbackgroundoffset\framedparameter\c!backgrounddepth}
662 \let\pack_framed_overlay_initialize\pack_framed_overlay_initialize_indeed
663 \ifempty\p_framed_component
664 \resetlayoutcomponentattribute
665 \else
666 \setlayoutcomponentattribute{\v!background:\p_framed_component}
667 \fi
668 \enforced\let\foregroundbox\pack_framed_background_box_content
669 \hpack \layoutcomponentboxattribute to \framedbackgroundwidth\bgroup
670 \expand\everybackgroundbox
671 \expandafter\pack_framed_process_backgrounds\p_framed_background,\s!unknown,\relax
672 \box\b_framed_normal
673 \hss
674 \egroup}}
675
676\def\pack_framed_overlay_initialize_indeed
677 {\d_overlay_width \d_framed_target_wd
678 \d_overlay_height {\d_framed_target_ht\d_framed_target_dp}
679 \d_overlay_depth \d_framed_target_dp
680 \d_overlay_linewidth \d_framed_linewidth
681
682
683
684 \d_overlay_offset \framedbackgroundoffset\relax
685
686 \edef\overlaycolor {\framedparameter\c!backgroundcolor}
687 \edef\overlaylinecolor{\framedparameter\c!framecolor}
688
689 \let\pack_framed_overlay_initialize\relax}
690
691
692
693
694
695
696
697\letcsname\??overlaybuiltin\v!color \endcsname\pack_framed_background_box_color
698\letcsname\??overlaybuiltin\v!foreground\endcsname\pack_framed_background_box_content
699
700
701
702
703
704
705
706
707
708\def\pack_framed_add_outline
709 {\setbox\b_framed_normal\hpack
710 {\d_framed_target_wd{\wd\b_framed_normal2\d_framed_frameoffset}
711 \d_framed_target_ht{\ht\b_framed_normal \d_framed_frameoffset}
712 \d_framed_target_dp{\dp\b_framed_normal \d_framed_frameoffset\framedparameter\c!framedepth}
713 \ifdim\d_framed_target_dp<\zeropoint
714 \advanceby\d_framed_target_ht \d_framed_target_dp
715 \scratchdimen\d_framed_target_dp
716 \d_framed_target_dp\zeropoint
717 \else
718 \scratchdimen\zeropoint
719 \fi
720 \edef\overlaylinecolor{\framedparameter\c!framecolor}
721 \setbox\b_framed_extra\hpack
722 {\kern\d_framed_frameoffset
723 \raise\scratchdimen
724 \hpack{\ifempty\overlaylinecolor\else\dousecolorparameter\overlaylinecolor\fi\pack_framed_stroked_box}}
725 \wd\b_framed_extra\wd\b_framed_normal
726 \ht\b_framed_extra\ht\b_framed_normal
727 \dp\b_framed_extra\dp\b_framed_normal
728 \wd\b_framed_normal\zeropoint
729 \box\b_framed_normal
730 \box\b_framed_extra}}
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766\def\pack_framed_stroked_box_normal_opened
767 {\setbox\scratchbox\vpack \bgroup
768
769 \baselineskip\thousandpoint
770 \lineskip \zeroskip
771 \lineskiplimit\maxdimen
772 \csname\??framedtop\p_framed_frame\framedparameter\c!topframe\endcsname
773
774 \hpack \bgroup
775 \csname\??framedleft\p_framed_frame\framedparameter\c!leftframe\endcsname
776 \novrule
777 \s!width \d_framed_target_wd
778 \s!height\d_framed_target_ht
779 \s!depth \d_framed_target_dp
780 \csname\??framedright\p_framed_frame\framedparameter\c!rightframe\endcsname
781 \egroup
782
783 \csname\??framedbottom\p_framed_frame\framedparameter\c!bottomframe\endcsname
784 \egroup
785 \wd\scratchbox\d_framed_target_wd
786 \ht\scratchbox\d_framed_target_ht
787 \dp\scratchbox\d_framed_target_dp
788 \box\scratchbox}
789
790\def\pack_framed_stroked_box_normal_closed
791 {\hpack\bgroup
792 \scratchdimen.5\d_framed_linewidth
793 \kern\scratchdimen
794 \clf_framedoutline
795 {\d_framed_target_wd\d_framed_linewidth}
796 {\d_framed_target_ht\scratchdimen}
797 {\d_framed_target_dp\scratchdimen}
798 \d_framed_linewidth
799 \relax
800 \egroup}
801
802\def\pack_framed_stroked_box_normal
803 {\ifx\p_framed_frame\v!closed
804 \pack_framed_stroked_box_normal_closed
805 \else
806 \pack_framed_stroked_box_normal_opened
807 \fi}
808
809\def\pack_framed_t_rule{\hrule\s!height\d_framed_linewidth\relax\kern\d_framed_linewidth}
810\def\pack_framed_b_rule{\kern\d_framed_linewidth\hrule\s!height\d_framed_linewidth\relax}
811\def\pack_framed_r_rule{\kern\d_framed_linewidth\vrule\s!width \d_framed_linewidth\relax}
812\def\pack_framed_l_rule{\vrule\s!width \d_framed_linewidth\relax\kern\d_framed_linewidth}
813
814\letcsname\??framedtop \v!on \v!on\endcsname\pack_framed_t_rule
815\letcsname\??framedtop \v!off\v!on\endcsname\pack_framed_t_rule
816\letcsname\??framedtop \v!on \endcsname\pack_framed_t_rule
817
818\letcsname\??framedbottom\v!on \v!on\endcsname\pack_framed_b_rule
819\letcsname\??framedbottom\v!off\v!on\endcsname\pack_framed_b_rule
820\letcsname\??framedbottom\v!on \endcsname\pack_framed_b_rule
821
822\letcsname\??framedleft \v!on \v!on\endcsname\pack_framed_l_rule
823\letcsname\??framedleft \v!off\v!on\endcsname\pack_framed_l_rule
824\letcsname\??framedleft \v!on \endcsname\pack_framed_l_rule
825
826\letcsname\??framedright \v!on \v!on\endcsname\pack_framed_r_rule
827\letcsname\??framedright \v!off\v!on\endcsname\pack_framed_r_rule
828\letcsname\??framedright \v!on \endcsname\pack_framed_r_rule
829
830
831
832
833
834
835
836
837
838
839
840
841
842\def\pack_framed_dash{on \d_framed_framedashstep off \d_framed_framedashstep}
843
844\def\pack_framed_t_rule_d{\hrule\s!height\d_framed_linewidth\pack_framed_dash\relax\kern\d_framed_linewidth}
845\def\pack_framed_b_rule_d{\kern\d_framed_linewidth\hrule\s!height\d_framed_linewidth\pack_framed_dash\relax}
846\def\pack_framed_r_rule_d{\kern\d_framed_linewidth\vrule\s!width \d_framed_linewidth\pack_framed_dash\relax}
847\def\pack_framed_l_rule_d{\vrule\s!width \d_framed_linewidth\pack_framed_dash\relax\kern\d_framed_linewidth}
848
849\letcsname\??framedtop \v!off \v!dash\endcsname\pack_framed_t_rule_d
850\letcsname\??framedtop \v!dash \endcsname\pack_framed_t_rule_d
851\letcsname\??framedtop \v!dash\v!dash\endcsname\pack_framed_t_rule_d
852
853\letcsname\??framedbottom\v!off \v!dash\endcsname\pack_framed_b_rule_d
854\letcsname\??framedbottom\v!dash \endcsname\pack_framed_b_rule_d
855\letcsname\??framedbottom\v!dash\v!dash\endcsname\pack_framed_b_rule_d
856
857\letcsname\??framedleft \v!off \v!dash\endcsname\pack_framed_l_rule_d
858\letcsname\??framedleft \v!dash \endcsname\pack_framed_l_rule_d
859\letcsname\??framedleft \v!dash\v!dash\endcsname\pack_framed_l_rule_d
860
861\letcsname\??framedright \v!off \v!dash\endcsname\pack_framed_r_rule_d
862\letcsname\??framedright \v!dash \endcsname\pack_framed_r_rule_d
863\letcsname\??framedright \v!dash\v!dash\endcsname\pack_framed_r_rule_d
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881\def\pack_framed_rules_hrule{\hrule\s!height\d_framed_linewidth\s!left\d_framed_linewidth\s!right \d_framed_linewidth\relax}
882\def\pack_framed_rules_vrule{\vrule\s!width \d_framed_linewidth\s!top \d_framed_linewidth\s!bottom\d_framed_linewidth\relax}
883
884\def\pack_framed_t_rules{\pack_framed_rules_hrule\kern\d_framed_linewidth}
885\def\pack_framed_b_rules{\kern\d_framed_linewidth\pack_framed_rules_hrule}
886\def\pack_framed_r_rules{\kern\d_framed_linewidth\pack_framed_rules_vrule}
887\def\pack_framed_l_rules{\pack_framed_rules_vrule\kern\d_framed_linewidth}
888
889\letcsname\??framedtop \v!small\v!small\endcsname\pack_framed_t_rules
890\letcsname\??framedtop \v!off \v!small\endcsname\pack_framed_t_rules
891\letcsname\??framedtop \v!small \endcsname\pack_framed_t_rules
892
893\letcsname\??framedbottom\v!small\v!small\endcsname\pack_framed_b_rules
894\letcsname\??framedbottom\v!off \v!small\endcsname\pack_framed_b_rules
895\letcsname\??framedbottom\v!small \endcsname\pack_framed_b_rules
896
897\letcsname\??framedleft \v!small\v!small\endcsname\pack_framed_l_rules
898\letcsname\??framedleft \v!off \v!small\endcsname\pack_framed_l_rules
899\letcsname\??framedleft \v!small \endcsname\pack_framed_l_rules
900
901\letcsname\??framedright \v!small\v!small\endcsname\pack_framed_r_rules
902\letcsname\??framedright \v!off \v!small\endcsname\pack_framed_r_rules
903\letcsname\??framedright \v!small \endcsname\pack_framed_r_rules
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926\newconditional\c_framed_has_offset
927\newconditional\c_framed_has_width
928\newconditional\c_framed_has_height
929\newconditional\c_framed_has_format
930\newconditional\c_framed_is_overlaid
931\newconditional\c_framed_has_frame
932\newconditional\c_framed_has_extra_offset
933\newconditional\c_framed_text_location_none
934
935\newconstant \c_framed_has_strut
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953\mutable\def\defaultframeoffset{.25\exheight}
954
955\installcorenamespace{regularframedlevel}
956
957\permanent\protected\def\installregularframed#1
958 {\defineframed[#1]}
959
960\permanent\protected\def\presetlocalframed[#1]
961 {\defineframed[#1]}
962
963
964
965\newinteger\c_pack_framed_nesting
966
967\permanent\tolerant\protected\def\framed[#S#1]
968 {\bgroup
969 \advanceby\c_pack_framed_nesting\plusone
970 \letcsname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed
971 \cdef\currentframed{>\the\c_pack_framed_nesting}
972 \pack_framed_initialize
973 \bgroup
974 \setupcurrentframed[#1]
975 \pack_framed_process_indeed}
976
977\permanent\tolerant\protected\def\startframed[#S#1]#*[#S#2]
978 {\bgroup
979 \ifarguments
980 \pack_framed_initialize
981 \bgroup
982 \or
983 \ifhastok={#1}
984 \advanceby\c_pack_framed_nesting\plusone
985 \letcsname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed
986 \cdef\currentframed{>\the\c_pack_framed_nesting}
987 \pack_framed_initialize
988 \bgroup
989 \setupcurrentframed[#1]
990 \else
991 \cdef\currentframed{#1}
992 \pack_framed_initialize
993 \bgroup
994 \fi
995 \else
996 \cdef\currentframed{#1}
997 \pack_framed_initialize
998 \bgroup
999 \setupcurrentframed[#2]
1000 \fi
1001 \pack_framed_process_indeed
1002 \bgroup
1003 \ignorespaces}
1004
1005
1006
1007\permanent\protected\def\stopframed
1008 {\removeunwantedspaces
1009 \egroup}
1010
1011\permanent\protected\def\normalframedwithsettings[#S#1]
1012 {\bgroup
1013 \advanceby\c_pack_framed_nesting\plusone
1014 \letcsname\??framed>\the\c_pack_framed_nesting:\s!parent\endcsname\??framed
1015 \bgroup
1016 \cdef\currentframed{>\the\c_pack_framed_nesting}
1017 \pack_framed_initialize
1018 \setupcurrentframed[#1]
1019 \pack_framed_process_indeed}
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046\newif\ifinframed
1047
1048
1049
1050
1051
1052
1053\permanent\protected\def\fastlocalframed[#1]#*[#S#2]#3
1054 {\bgroup
1055 \cdef\currentframed{#1}
1056 \pack_framed_initialize
1057 \setbox\b_framed_normal\hbox{#3}
1058 \iftrialtypesetting \else
1059 \edef\m_overlay_region{\framedparameter\c!region}
1060 \ifempty\m_overlay_region\else
1061 \pack_framed_set_region
1062 \fi
1063 \fi
1064 \setupcurrentframed[#2]
1065 \d_framed_frameoffset {\framedparameter\c!frameoffset}
1066 \d_framed_framedashstep{\framedparameter\c!dashstep}
1067 \edef\p_framed_frame{\framedparameter\c!frame}
1068 \edef\p_framed_background{\framedparameter\c!background}
1069
1070 \pack_framed_remove_depth
1071
1072 \ifx\p_framed_frame\v!overlay \orelse \ifx\p_framed_frame\v!none \else
1073 \ifchkdimexpr\framedparameter\c!rulethickness\else
1074 \d_framed_linewidth\lastchkdimension
1075 \fi
1076 \pack_framed_add_outline
1077 \fi
1078 \ifempty\p_framed_background \else
1079 \edef\p_framed_backgroundoffset{\framedparameter\c!backgroundoffset}
1080 \d_framed_backgroundoffset
1081 \ifx\p_framed_backgroundoffset\v!frame
1082 \d_framed_frameoffset
1083 \else
1084 {\p_framed_backgroundoffset}
1085 \fi
1086 \edef\p_framed_component{\framedparameter\c!component}
1087 \pack_framed_add_background
1088 \fi
1089 \pack_framed_restore_depth
1090 \iftrialtypesetting\orelse\ifempty\m_overlay_region\else
1091 \pack_framed_add_region
1092 \fi
1093 \box\b_framed_normal
1094 \egroup}
1095
1096
1097
1098
1099\protected\def\pack_framed_process_box_indeed#1#2
1100 {
1101
1102
1103 \enforced\let\b_framed_normal#2
1104
1105 \edef\m_overlay_region{\framedparameter\c!region}
1106 \ifempty\m_overlay_region\else
1107 \pack_framed_set_region
1108 \fi
1109 \d_framed_frameoffset{\framedparameter\c!frameoffset}
1110 \edef\p_framed_frame{\framedparameter\c!frame}
1111 \edef\p_framed_background{\framedparameter\c!background}
1112 \ifx\p_framed_frame\v!overlay \orelse \ifx\p_framed_frame\v!none \else
1113 \ifchkdimexpr\framedparameter\c!rulethickness\else
1114 \d_framed_linewidth\lastchkdimension
1115 \fi
1116 \pack_framed_add_outline
1117 \fi
1118 \ifempty\p_framed_background \else
1119 \edef\p_framed_backgroundoffset{\framedparameter\c!backgroundoffset}
1120 \d_framed_backgroundoffset
1121 \ifx\p_framed_backgroundoffset\v!frame
1122 \d_framed_frameoffset
1123 \else
1124 \p_framed_backgroundoffset
1125 \fi
1126 \edef\p_framed_component{#1}
1127 \pack_framed_add_background
1128 \fi
1129 \ifempty\m_overlay_region\else
1130 \pack_framed_add_region
1131 \fi
1132 \box\b_framed_normal
1133 \egroup}
1134
1135\permanent\protected\def\localbackgroundframed#1
1136 {\bgroup
1137 \cdef\currentframed{#1}
1138 \pack_framed_initialize
1139 \pack_framed_process_box_indeed}
1140
1141\mutable\let\postprocessframebox\relax
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192\newdimension\d_framed_width
1193\newdimension\d_framed_height
1194\newdimension\d_framed_frameoffset
1195\newdimension\d_framed_framedashstep
1196\newdimension\d_framed_backgroundoffset
1197\newdimension\d_framed_local_offset
1198
1199
1200
1201\permanent\tolerant\protected\def\localframed[#1]#*[#S#2]
1202 {\bgroup
1203 \bgroup
1204 \cdef\currentframed{#1}
1205 \pack_framed_initialize
1206 \setupcurrentframed[#2]
1207 \pack_framed_process_indeed}
1208
1209\permanent\protected\def\directlocalframed[#1]
1210 {\bgroup
1211 \bgroup
1212 \cdef\currentframed{#1}
1213 \pack_framed_initialize
1214 \pack_framed_process_indeed}
1215
1216\aliased\let\localframedwithsettings\localframed
1217
1218
1219
1220\defineinterfaceconstant {fr!analyze} {fr:analyze}
1221
1222\permanent\protected\lettonothing\delayedbegstrut
1223\permanent\protected\lettonothing\delayedendstrut
1224\permanent\protected\lettonothing\delayedstrut
1225
1226\permanent\protected\lettonothing\localbegstrut
1227\permanent\protected\lettonothing\localendstrut
1228\permanent\protected\lettonothing\localstrut
1229
1230\mutable\lettonothing\localoffset
1231\mutable\lettonothing\localwidth
1232\mutable\lettonothing\localheight
1233\mutable\lettonothing\localformat
1234
1235\mutable\let\framedwidth \zeropoint
1236\mutable\let\framedheight\zeropoint
1237\mutable\let\framedoffset\zeropoint
1238
1239\pushoverloadmode
1240 \newuserunit\framedwidth fw
1241 \newuserunit\framedheight fh
1242 \newuserunit\framedoffset fo
1243 \newuserunit\linewidth lw
1244\popoverloadmode
1245
1246
1247
1248\newconditional\c_pack_resync
1249\newconditional\c_pack_reanchor
1250
1251
1252
1253\def\spac_framed_push_local_anchors
1254 {\ifx\p_framed_synchronize\v!yes
1255 \c_pack_resync\conditionaltrue
1256 \c_pack_reanchor\conditionaltrue
1257 \pushlocalanchors
1258
1259 \aftergroup\poplocalanchors
1260 \orelse\ifx\p_framed_synchronize\v!text
1261 \c_pack_resync\conditionaltrue
1262 \pushlocalanchors
1263 \aftergroup\poplocalanchors
1264 \orelse\ifx\p_framed_synchronize\v!background
1265 \c_pack_reanchor\conditionaltrue
1266 \pushlocalanchors
1267 \aftergroup\poplocalanchors
1268 \else
1269 \c_pack_resync\conditionalfalse
1270 \c_pack_reanchor\conditionalfalse
1271 \fi}
1272
1273\protected\def\pack_framed_process_indeed
1274 {\d_framed_frameoffset {\framedparameter\c!frameoffset}
1275 \d_framed_framedashstep{\framedparameter\c!dashstep}
1276 \edef\p_framed_backgroundoffset{\framedparameter\c!backgroundoffset}
1277 \d_framed_backgroundoffset
1278 \ifx\p_framed_backgroundoffset\v!frame
1279 \d_framed_frameoffset
1280 \else
1281 {\p_framed_backgroundoffset}
1282 \fi
1283
1284 \framedparameter\c!extras
1285
1286 \edef\p_framed_foregroundstyle{\framedparameter\c!foregroundstyle}
1287 \ifempty\p_framed_foregroundstyle\else\dousestyleparameter\p_framed_foregroundstyle\fi
1288
1289
1290 \edef\p_framed_setups{\framedparameter\c!setups}
1291
1292 \edef\localoffset{\framedparameter\c!offset}
1293 \edef\localwidth {\framedparameter\c!width}
1294 \edef\localheight{\framedparameter\c!height}
1295 \edef\localformat{\framedparameter\c!align}
1296
1297 \edef\p_strut {\framedparameter\c!strut}
1298
1299 \edef\p_framed_autostrut {\framedparameter\c!autostrut}
1300 \edef\p_framed_frame {\framedparameter\c!frame}
1301 \edef\p_framed_location {\framedparameter\c!location}
1302 \edef\p_framed_orientation{\framedparameter\c!orientation}
1303 \edef\p_framed_anchoring {\framedparameter\c!anchoring}
1304 \edef\p_framed_synchronize{\framedparameter\c!synchronize}
1305
1306 \edef\p_framed_autowidth {\framedparameter\c!autowidth}
1307 \edef\p_framed_franalyze {\framedparameter\c!fr!analyze}
1308
1309 \ifempty\p_framed_synchronize
1310 \c_pack_resync\conditionalfalse
1311 \c_pack_reanchor\conditionalfalse
1312
1313 \else
1314 \spac_framed_push_local_anchors
1315 \fi
1316
1317 \ifx\p_framed_frame\v!overlay
1318 \c_framed_has_frame\conditionalfalse
1319 \let\localoffset\v!overlay
1320 \orelse\ifx\p_framed_frame\v!none
1321 \c_framed_has_frame\conditionalfalse
1322 \else
1323 \c_framed_has_frame\conditionaltrue
1324 \fi
1325 \ifconditional\c_framed_has_frame
1326 \ifchkdimexpr\framedparameter\c!rulethickness\else
1327 \d_framed_linewidth\lastchkdimension
1328 \fi
1329 \else
1330 \d_framed_linewidth\zeropoint
1331 \fi
1332
1333 \ifx\localwidth\v!local
1334 \setlocalhsize
1335 \fi
1336
1337 \forgetall
1338
1339 \ifempty\localformat
1340 \c_framed_has_format\conditionalfalse
1341 \else
1342 \c_framed_has_format\conditionaltrue
1343 \dosetraggedcommand\localformat
1344 \fi
1345
1346 \ifcsname\??framedoffsetalternative\localoffset\endcsname
1347 \lastnamedcs
1348 \else
1349 \framed_offset_alternative_unknown
1350 \fi
1351 \ifcsname\??framedwidthalternative\localwidth\endcsname
1352 \lastnamedcs
1353 \else
1354 \framed_width_alternative_unknown
1355 \fi
1356 \ifcsname\??framedheightalternative\localheight\endcsname
1357 \lastnamedcs
1358 \else
1359 \framed_height_alternative_unknown
1360 \fi
1361
1362 \ifconditional\c_framed_has_height
1363 \ifcstok{\framedparameter\c!adaptive}\v!yes
1364 \let\p_framed_adaptive\s!delay
1365 \else
1366 \lettonothing\p_framed_adaptive
1367 \fi
1368 \else
1369 \lettonothing\p_framed_adaptive
1370 \edef\p_framed_lines{\framedparameter\c!lines}
1371 \ifempty\p_framed_lines
1372 \orelse\ifcase\p_framed_lines
1373 \else
1374 \d_framed_height\p_framed_lines\lineheight
1375 \edef\localheight{\the\d_framed_height}
1376 \c_framed_has_height\conditionaltrue
1377 \fi
1378 \fi
1379
1380
1381
1382
1383
1384
1385
1386
1387 \advanceby\d_framed_width 2\d_framed_local_offset
1388 \advanceby\d_framed_height 2\d_framed_local_offset
1389 \ifcsname\??framedstrutalternative\p_strut\endcsname
1390 \lastnamedcs
1391 \else
1392 \framed_offset_alternative_unknown
1393 \fi
1394
1395 \ifcase\c_framed_has_strut
1396 \enforced\lettonothing\localbegstrut
1397 \enforced\lettonothing\localendstrut
1398 \enforced\lettonothing\localstrut
1399 \or
1400 \enforced\let\localbegstrut\pseudobegstrut
1401 \enforced\let\localendstrut\pseudoendstrut
1402 \enforced\let\localstrut \pseudostrut
1403 \else
1404 \enforced\let\localbegstrut\begstrut
1405 \enforced\let\localendstrut\endstrut
1406 \enforced\let\localstrut \strut
1407 \fi
1408 \ifx\p_framed_autostrut\v!yes
1409 \enforced\lettonothing\delayedbegstrut
1410 \enforced\lettonothing\delayedendstrut
1411 \enforced\lettonothing\delayedstrut
1412 \else
1413 \enforced\let \delayedbegstrut\localbegstrut
1414 \enforced\let \delayedendstrut\localendstrut
1415 \enforced\let \delayedstrut \localstrut
1416 \enforced\lettonothing\localbegstrut
1417 \enforced\lettonothing\localendstrut
1418 \enforced\lettonothing\localstrut
1419 \fi
1420 \ifconditional\c_framed_has_height
1421 \enforced\let\\\pack_framed_vboxed_newline
1422 \ifconditional\c_framed_has_width
1423 \enforced\let\hairline\pack_framed_vboxed_hairline
1424 \ifconditional\c_framed_has_format
1425 \let\next\pack_framed_format_format_yes
1426 \else
1427 \let\next\pack_framed_format_format_nop
1428 \fi
1429 \else
1430 \enforced\let\hairline\pack_framed_hboxed_hairline
1431 \ifconditional\c_framed_has_format
1432 \let\next\pack_framed_format_format_height
1433 \else
1434 \let\next\pack_framed_format_format_vsize
1435 \fi
1436 \fi
1437 \orelse\ifconditional\c_framed_has_width
1438 \ifconditional\c_framed_has_format
1439 \enforced\let\\\pack_framed_vboxed_newline
1440 \enforced\let\hairline\pack_framed_vboxed_hairline
1441 \let\next\pack_framed_format_format_width
1442 \else
1443 \enforced\let\\\pack_framed_hboxed_newline
1444 \enforced\let\hairline\pack_framed_hboxed_hairline
1445 \let\next\pack_framed_format_format_hsize
1446 \fi
1447 \else
1448 \enforced\let\\\pack_framed_hboxed_newline
1449 \enforced\let\hairline\pack_framed_hboxed_hairline
1450 \let\next\pack_framed_format_format_no_size
1451 \fi
1452 \pack_framed_check_extra_offsets
1453 \edef\p_framed_background{\framedparameter\c!background}
1454
1455
1456
1457
1458
1459
1460 \edef\framedwidth {\the\ifdim\d_framed_width >\zeropoint\d_framed_width \else\zeropoint\fi}
1461 \edef\framedheight{\the\ifdim\d_framed_height>\zeropoint\d_framed_height\else\zeropoint\fi}
1462 \edef\framedoffset{\the\ifconditional\c_framed_has_offset\dimexpr\localoffset\relax\else\zeropoint\fi}
1463
1464
1465
1466 \ifempty\p_framed_orientation
1467 \let\pack_framed_stop_orientation\relax
1468 \else
1469 \pack_framed_start_orientation
1470 \fi
1471 \afterassignment\pack_framed_restart
1472 \setbox\b_framed_normal\next}
1473
1474
1475
1476\installcorenamespace{framedwidthalternative}
1477\installcorenamespace{framedheightalternative}
1478\installcorenamespace{framedstrutalternative}
1479\installcorenamespace{framedoffsetalternative}
1480
1481
1482
1483
1484
1485
1486
1487\defcsname\??framedwidthalternative\empty\endcsname
1488 {\ifconditional\c_framed_has_format
1489 \c_framed_has_width\conditionaltrue
1490 \d_framed_width\hsize
1491 \else
1492 \c_framed_has_width\conditionalfalse
1493 \d_framed_width\zeropoint
1494 \fi}
1495
1496\defcsname\??framedwidthalternative\v!fit\endcsname
1497 {\ifconditional\c_framed_has_format
1498 \c_framed_has_width\conditionaltrue
1499 \d_framed_width\hsize
1500 \else
1501 \c_framed_has_width\conditionalfalse
1502 \d_framed_width\zeropoint
1503 \fi}
1504
1505\defcsname\??framedwidthalternative\v!fixed\endcsname
1506 {\ifconditional\c_framed_has_format
1507 \c_framed_has_width\conditionaltrue
1508 \d_framed_width\hsize
1509 \else
1510 \c_framed_has_width\conditionalfalse
1511 \d_framed_width\zeropoint
1512 \fi}
1513
1514\defcsname\??framedwidthalternative\v!broad\endcsname
1515 {\c_framed_has_width\conditionaltrue
1516 \d_framed_width\hsize}
1517
1518\defcsname\??framedwidthalternative\v!max\endcsname
1519 {\c_framed_has_width\conditionaltrue
1520 \d_framed_width\hsize}
1521
1522\defcsname\??framedwidthalternative\v!local\endcsname
1523 {\c_framed_has_width\conditionaltrue
1524
1525 \d_framed_width\localhsize}
1526
1527
1528
1529
1530
1531\def\framed_width_alternative_unknown
1532 {\c_framed_has_width\conditionaltrue
1533 \d_framed_width{\localwidth}}
1534
1535
1536
1537\defcsname\??framedheightalternative\empty\endcsname
1538 {\c_framed_has_height\conditionalfalse
1539 \d_framed_height\zeropoint}
1540
1541\defcsname\??framedheightalternative\v!fit\endcsname
1542 {\c_framed_has_height\conditionalfalse
1543 \d_framed_height\zeropoint}
1544
1545\defcsname\??framedheightalternative\v!broad\endcsname
1546 {\c_framed_has_height\conditionalfalse
1547 \d_framed_height\zeropoint}
1548
1549\defcsname\??framedheightalternative\v!max\endcsname
1550 {\c_framed_has_height\conditionaltrue
1551 \d_framed_height\vsize}
1552
1553
1554
1555
1556
1557\def\framed_height_alternative_unknown
1558 {\c_framed_has_height\conditionaltrue
1559 \d_framed_height{\localheight}}
1560
1561
1562
1563\defcsname\??framedstrutalternative\v!no\endcsname
1564 {\c_framed_has_strut\plusone}
1565
1566\defcsname\??framedstrutalternative\v!global\endcsname
1567 {\setstrut}
1568
1569\defcsname\??framedstrutalternative\v!local\endcsname
1570 {\setfontstrut}
1571
1572\defcsname\??framedstrutalternative\v!yes\endcsname
1573 {\setstrut}
1574
1575\defcsname\??framedstrutalternative\s!unknown\endcsname
1576 {\setstrut}
1577
1578\def\framed_strut_alternative_unknown
1579 {\setstrut}
1580
1581\defcsname\??framedstrutalternative\v!none\endcsname
1582 {\c_framed_has_strut\zerocount}
1583
1584
1585
1586\defcsname\??framedoffsetalternative\v!none\endcsname
1587 {\c_framed_has_offset\conditionalfalse
1588 \c_framed_has_strut\plusone
1589 \c_framed_is_overlaid\conditionalfalse
1590 \d_framed_local_offset\d_framed_linewidth}
1591
1592\defcsname\??framedoffsetalternative\v!overlay\endcsname
1593 {
1594 \c_framed_has_offset\conditionalfalse
1595 \c_framed_has_strut\plusone
1596 \c_framed_is_overlaid\conditionaltrue
1597 \d_framed_local_offset\zeropoint}
1598
1599
1600
1601
1602
1603
1604
1605\defcsname\??framedoffsetalternative\v!default\endcsname
1606 {\c_framed_has_offset\conditionaltrue
1607 \c_framed_has_strut\plustwo
1608 \c_framed_is_overlaid\conditionalfalse
1609 \let\localoffset\defaultframeoffset
1610 \letframedparameter\c!offset\defaultframeoffset
1611 \d_framed_local_offset{\localoffset\d_framed_linewidth}}
1612
1613\def\framed_offset_alternative_unknown
1614 {\c_framed_has_offset\conditionaltrue
1615 \c_framed_has_strut\plustwo
1616 \c_framed_is_overlaid\conditionalfalse
1617 \let\defaultframeoffset\localoffset
1618 \d_framed_local_offset{\localoffset\d_framed_linewidth}}
1619
1620\letcsname\??framedoffsetalternative\s!unknown\endcsname\framed_offset_alternative_unknown
1621
1622
1623
1624\let\pack_framed_stop_orientation\relax
1625
1626\def\pack_framed_restart
1627 {\aftergroup\pack_framed_finish}
1628
1629\def\pack_framed_do_top
1630 {\raggedtopcommand
1631 \framedparameter\c!top
1632 \edef\p_blank{\framedparameter\c!blank}
1633 \ifx\p_blank\v!yes\else
1634 \doinhibitblank
1635 \fi}
1636
1637\def\pack_framed_do_bottom
1638 {\framedparameter\c!bottom
1639 \raggedbottomcommand}
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674\newif\ifreshapeframebox \reshapeframeboxtrue
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696\def\pack_framed_profile_box
1697 {\profilegivenbox\p_profile\b_framed_normal
1698 \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}}
1699
1700\def\pack_framed_reverse_box
1701 {\ifvbox\b_framed_normal
1702
1703
1704 \ifcstok{\framedparameter\c!linedirection}\v!reverse
1705 \reversevboxcontent\b_framed_normal
1706 \setbox\b_framed_normal\vpack{\unvbox\b_framed_normal}
1707 \fi
1708 \fi}
1709
1710\def\pack_framed_finish_a
1711 {\ifreshapeframebox
1712 \pack_framed_reshape_process
1713 \orelse\ifx\p_framed_franalyze\v!yes
1714 \pack_framed_reshape_analyze
1715 \else
1716 \pack_framed_reshape_reset
1717 \fi
1718 \c_framed_has_width\conditionalfalse}
1719
1720\def\pack_framed_finish_b
1721 {\ifx\p_framed_franalyze\v!yes
1722 \pack_framed_reshape_analyze
1723 \else
1724 \pack_framed_reshape_reset
1725 \fi
1726 \c_framed_has_width\conditionalfalse}
1727
1728\def\pack_framed_finish_c
1729 {\ifx\p_framed_franalyze\v!yes
1730 \pack_framed_reshape_analyze
1731 \else
1732 \pack_framed_reshape_reset
1733 \fi}
1734
1735
1736
1737
1738
1739\protected\def\pack_framed_finish
1740 {\ifempty{\framedparameter\c!freezespacing}\else
1741 \boxadapt\b_framed_normal\lastnamedcs\relax
1742 \fi
1743
1744
1745
1746 \pack_framed_locator_before\p_framed_location
1747 \ifconditional\c_framed_has_format
1748 \ifempty\p_framed_anchoring\else
1749 \pack_framed_reverse_box
1750 \fi
1751 \ifx\p_framed_autowidth\v!force
1752 \pack_framed_finish_a
1753 \orelse\ifx\localwidth\v!fit
1754 \ifx\p_framed_autowidth\v!yes
1755 \pack_framed_finish_a
1756 \else
1757 \pack_framed_finish_b
1758 \fi
1759 \orelse\ifx\localwidth\v!fixed
1760 \pack_framed_finish_b
1761 \else
1762 \pack_framed_finish_c
1763 \fi
1764 \ifconditional\c_framed_has_height \else
1765 \edef\p_profile{\framedparameter\c!profile}
1766 \ifempty\p_profile\else
1767 \pack_framed_profile_box
1768 \fi
1769 \fi
1770 \ifconditional\page_postprocessors_needed_box
1771
1772 \page_postprocessors_linenumbers_box\b_framed_normal
1773 \fi
1774 \else
1775 \pack_framed_finish_c
1776 \fi
1777 \ifconditional\c_framed_has_width
1778 \wd\b_framed_normal\d_framed_width
1779 \fi
1780 \ifconditional\c_framed_has_height
1781 \ht\b_framed_normal\d_framed_height
1782 \else
1783 \edef\p_framed_minheight{\framedparameter\c!minheight}
1784 \ifempty\p_framed_minheight \orelse \ifdim\ht\b_framed_normal<\p_framed_minheight
1785 \ht\b_framed_normal\p_framed_minheight
1786 \fi
1787 \fi
1788 \edef\p_framed_empty{\framedparameter\c!empty}
1789 \ifx\p_framed_empty\v!yes
1790 \pack_framed_fake_box
1791 \fi
1792 \ifempty\p_framed_anchoring\else
1793 \pack_framed_handle_anchoring
1794 \fi
1795 \pack_framed_stop_orientation
1796 \iftrialtypesetting \else
1797 \edef\m_overlay_region{\framedparameter\c!region}
1798 \ifempty\m_overlay_region\else
1799 \pack_framed_set_region
1800 \fi
1801 \fi
1802 \d_framed_applied_offset
1803 \ifconditional\c_framed_is_overlaid
1804 \zeropoint
1805 \else
1806 \d_framed_linewidth
1807 \fi
1808 \ifconditional\c_framed_has_offset
1809 \advanceby\d_framed_applied_offset\localoffset\relax
1810 \fi
1811 \ifconditional\c_framed_has_extra_offset
1812 \pack_framed_apply_extra_offsets
1813 \orelse\ifzeropt\d_framed_applied_offset
1814 \else
1815 \pack_framed_widen_box
1816 \fi
1817
1818 \ifrelax\postprocessframebox \else
1819
1820 \let\next\postprocessframebox
1821 \let\postprocessframebox\relax
1822 \next\b_framed_normal
1823 \fi
1824 \iftrialtypesetting
1825
1826 \else
1827 \ifconditional\c_framed_has_frame
1828 \pack_framed_add_outline
1829 \fi
1830 \ifempty\p_framed_background \else
1831 \edef\p_framed_component{\framedparameter\c!component}
1832 \pack_framed_add_background
1833 \fi
1834 \fi
1835
1836 \pack_framed_locator_after\p_framed_location
1837 \iftrialtypesetting \orelse \ifempty\m_overlay_region \else
1838 \pack_framed_add_region
1839 \fi
1840 \box\b_framed_normal
1841 \global\frameddimensionstate
1842 \ifconditional\c_framed_has_width
1843 \ifconditional\c_framed_has_height \plusthree \else \plusone \fi
1844 \else
1845 \ifconditional\c_framed_has_height \plustwo \else \zerocount \fi
1846 \fi
1847 \egroup
1848 \egroup}
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872\def\pack_framed_handle_anchoring
1873 {\scratchcounter\autoorientation\p_framed_anchoring\relax
1874 \edef\p_xanchor{\framedparameter\c!xanchor}
1875 \edef\p_yanchor{\framedparameter\c!yanchor}
1876 \setbox\b_framed_normal\hpack{\hpack
1877
1878
1879 \s!orientation\scratchcounter
1880 \ifempty\p_xanchor\else \s!xoffset \p_xanchor\fi
1881 \ifempty\p_yanchor\else \s!yoffset \p_yanchor\fi
1882 {\box\b_framed_normal}}}
1883
1884\installcorenamespace{framedlocatorbefore}
1885\installcorenamespace{framedlocatorafter}
1886
1887\newconstant\frameddimensionstate
1888
1889\def\pack_framed_fake_box
1890 {\setbox\scratchbox\emptyhbox
1891 \wd\scratchbox\wd\b_framed_normal
1892 \ht\scratchbox\ht\b_framed_normal
1893 \dp\scratchbox\dp\b_framed_normal
1894 \setbox\b_framed_normal\box\scratchbox}
1895
1896\permanent\protected\def\installframedlocator#1#2#3
1897 {\defcsname\??framedlocatorbefore#1\endcsname{#2}
1898 \defcsname\??framedlocatorafter #1\endcsname{#3}}
1899
1900\def\pack_framed_locator_before#1{\begincsname\??framedlocatorbefore#1\endcsname}
1901\def\pack_framed_locator_after #1{\begincsname\??framedlocatorafter #1\endcsname}
1902
1903\newdimension\d_framed_locator_ht
1904\newdimension\d_framed_locator_dp
1905\newdimension\d_framed_locator_lo
1906\newdimension\d_framed_locator_ro
1907
1908\def\pack_framed_locator_set#1
1909 {\d_framed_locator_ht{
1910 #1\d_framed_linewidth
1911 \ifconditional\c_framed_has_offset
1912 (\framedparameter\c!offset)
1913 \fi
1914 (\framedparameter\c!toffset)
1915 }
1916 \d_framed_locator_dp{\ht\b_framed_normal\d_framed_locator_ht}}
1917
1918\def\pack_framed_locator_set_lo
1919 {\global\d_framed_locator_lo{
1920 \d_framed_linewidth
1921 \ifconditional\c_framed_has_offset
1922 (\framedparameter\c!offset)
1923 \fi
1924 (\framedparameter\c!loffset)
1925 }}
1926
1927\def\pack_framed_locator_set_ro
1928 {\global\d_framed_locator_ro{
1929 \d_framed_linewidth
1930 \ifconditional\c_framed_has_offset
1931 (\framedparameter\c!offset)
1932 \fi
1933 (\framedparameter\c!roffset)
1934 }}
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964\installframedlocator \v!hanging
1965 {}
1966 {\scratchdimen\ht\b_framed_normal
1967 \setbox\b_framed_normal\hpack{\lower\scratchdimen\box\b_framed_normal}
1968 \dp\b_framed_normal\scratchdimen
1969 \ht\b_framed_normal\zeropoint
1970 \box\b_framed_normal}
1971
1972\installframedlocator \v!depth
1973 {}
1974 {\setbox\b_framed_normal\hpack{\lower\strutdp\box\b_framed_normal}
1975 \ht\b_framed_normal{\ht\b_framed_normal\strutdp}
1976 \dp\b_framed_normal\strutdp
1977 \box\b_framed_normal}
1978
1979\installframedlocator \v!height
1980 {}
1981 {\scratchdimen{\ht\b_framed_normal\strutht}
1982 \setbox\b_framed_normal\hpack{\lower\scratchdimen\box\b_framed_normal}
1983 \dp\b_framed_normal{\ht\b_framed_normal\strutht}
1984 \ht\b_framed_normal\strutht
1985 \box\b_framed_normal}
1986
1987\installframedlocator \v!high
1988 {}
1989 {\pack_framed_locator_set\strutht
1990 \setbox\b_framed_normal\hpack{\lower\d_framed_locator_dp\box\b_framed_normal}
1991 \ht\b_framed_normal\strutht
1992 \dp\b_framed_normal\strutdp
1993 \hpack{\box\b_framed_normal}}
1994
1995\installframedlocator \v!line
1996 {}
1997 {\setbox\b_framed_normal\hpack{\lower.5\ht\b_framed_normal\box\b_framed_normal}
1998 \ht\b_framed_normal.5\lineheight
1999 \dp\b_framed_normal.5\lineheight
2000 \hpack{\box\b_framed_normal}}
2001
2002\installframedlocator \v!low
2003 {}
2004 {\pack_framed_locator_set\strutdp
2005 \setbox\b_framed_normal\hpack{\lower\d_framed_locator_ht\box\b_framed_normal}
2006 \ht\b_framed_normal\strutht
2007 \dp\b_framed_normal\strutdp
2008 \box\b_framed_normal}
2009
2010\installframedlocator \v!top
2011 {}
2012 {\pack_framed_locator_set\strutht
2013 \setbox\b_framed_normal\hpack{\lower\d_framed_locator_dp\box\b_framed_normal}
2014 \ht\b_framed_normal\d_framed_locator_ht
2015 \dp\b_framed_normal\d_framed_locator_dp
2016 \hpack{\box\b_framed_normal}}
2017
2018\installframedlocator \v!middle
2019 {}
2020 {\scratchdimen.5\ht\b_framed_normal
2021 \setbox\b_framed_normal\hpack{\lower\scratchdimen\box\b_framed_normal}
2022 \ht\b_framed_normal\scratchdimen
2023 \dp\b_framed_normal\scratchdimen
2024 \hpack{\box\b_framed_normal}}
2025
2026\installframedlocator \v!lohi
2027 {\pack_framed_locator_before\v!middle}
2028 {\pack_framed_locator_after \v!middle}
2029
2030\installframedlocator \v!bottom
2031 {}
2032 {\pack_framed_locator_set\strutdp
2033 \setbox\b_framed_normal\hpack{\lower\d_framed_locator_ht\box\b_framed_normal}
2034 \ht\b_framed_normal\d_framed_locator_dp
2035 \dp\b_framed_normal\d_framed_locator_ht
2036 \hpack{\box\b_framed_normal}}
2037
2038\installframedlocator \v!keep
2039 {\pack_framed_remove_depth}
2040 {\pack_framed_restore_depth}
2041
2042\newdimension\d_framed_formula
2043
2044\installframedlocator \v!formula
2045 {}
2046 {\pack_framed_locator_set\d_framed_formula
2047 \setbox\b_framed_normal\hpack{\lower\d_framed_locator_dp\box\b_framed_normal}
2048 \ht\b_framed_normal\d_framed_locator_ht
2049 \dp\b_framed_normal\d_framed_locator_dp
2050 \hpack{\box\b_framed_normal}}
2051
2052\installframedlocator \v!inline
2053 {}
2054 {\scratchoffset{\strutdp\d_framed_applied_offset}
2055 \boxyoffset\b_framed_normal{\boxyoffset\b_framed_normal\scratchoffset}
2056 \ht\b_framed_normal{\ht\b_framed_normal\scratchoffset}
2057 \dp\b_framed_normal{\strutdp\d_framed_applied_offset}
2058 \box\b_framed_normal}
2059
2060
2061
2062\newdimension\d_framed_original_wd
2063\newdimension\d_framed_original_ht
2064\newdimension\d_framed_original_dp
2065
2066\def\pack_framed_remove_depth
2067 {\d_framed_original_wd\wd\b_framed_normal
2068 \d_framed_original_ht\ht\b_framed_normal
2069 \d_framed_original_dp\dp\b_framed_normal
2070 \ifzeropt\d_framed_original_dp\else
2071 \setbox\b_framed_normal\hpack{\raise\d_framed_original_dp\box\b_framed_normal}
2072 \fi
2073 \wd\b_framed_normal\d_framed_original_wd
2074 \ht\b_framed_normal{\d_framed_original_ht\d_framed_original_dp}
2075 \dp\b_framed_normal\zeropoint}
2076
2077\def\pack_framed_restore_depth
2078 {\ifzeropt\d_framed_original_dp \else
2079 \setbox\b_framed_normal\hpack{\lower\d_framed_original_dp\box\b_framed_normal}
2080 \fi
2081 \wd\b_framed_normal\d_framed_original_wd
2082 \ht\b_framed_normal\d_framed_original_ht
2083 \dp\b_framed_normal\d_framed_original_dp}
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093\def\pack_framed_start_orientation
2094 {\ifcase\p_framed_orientation
2095 \let\pack_framed_stop_orientation\relax
2096 \else
2097 \let\pack_framed_stop_orientation\pack_framed_stop_orientation_indeed
2098 \fi}
2099
2100\def\pack_framed_stop_orientation_indeed
2101 {\setbox\b_framed_normal\hpack{\dorotatebox\p_framed_orientation\hpack{\box\b_framed_normal}}
2102 \d_framed_height\ht\b_framed_normal
2103 \d_framed_width \wd\b_framed_normal}
2104
2105
2106
2107
2108
2109\permanent\tolerant\protected\def\inframed[#S#1]{\framed[\c!location=\v!low,#1]}
2110
2111
2112
2113
2114
2115
2116
2117\newdimension\d_framed_applied_offset
2118\newdimension\d_framed_loffset
2119\newdimension\d_framed_roffset
2120\newdimension\d_framed_toffset
2121\newdimension\d_framed_boffset
2122
2123\def\pack_framed_check_extra_offsets
2124 {\c_framed_has_extra_offset\conditionalfalse
2125 \d_framed_loffset{\framedparameter\c!loffset}
2126 \d_framed_roffset{\framedparameter\c!roffset}
2127 \d_framed_toffset{\framedparameter\c!toffset}
2128 \d_framed_boffset{\framedparameter\c!boffset}
2129 \ifzeropt\d_framed_loffset\else \advanceby\d_framed_width \d_framed_loffset \c_framed_has_extra_offset\conditionaltrue \fi
2130 \ifzeropt\d_framed_roffset\else \advanceby\d_framed_width \d_framed_roffset \c_framed_has_extra_offset\conditionaltrue \fi
2131 \ifzeropt\d_framed_toffset\else \advanceby\d_framed_height\d_framed_toffset \c_framed_has_extra_offset\conditionaltrue \fi
2132 \ifzeropt\d_framed_boffset\else \advanceby\d_framed_height\d_framed_boffset \c_framed_has_extra_offset\conditionaltrue \fi}
2133
2134\def\pack_framed_apply_extra_offsets
2135 {\setbox\b_framed_normal\vpack\bgroup
2136 \advanceby\d_framed_toffset\d_framed_applied_offset
2137 \advanceby\d_framed_boffset\d_framed_applied_offset
2138 \advanceby\d_framed_loffset\d_framed_applied_offset
2139 \advanceby\d_framed_roffset\d_framed_applied_offset
2140 \kern\d_framed_toffset
2141 \hpack\bgroup
2142 \kern\d_framed_loffset
2143 \box\b_framed_normal
2144 \kern\d_framed_roffset
2145 \egroup
2146 \kern\d_framed_boffset
2147 \egroup}
2148
2149\def\pack_framed_widen_box
2150 {\setbox\b_framed_normal\vpack
2151 {\kern\d_framed_applied_offset
2152 \hpack{\kern\d_framed_applied_offset\box\b_framed_normal\kern\d_framed_applied_offset}
2153 \kern\d_framed_applied_offset}}
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226\ifdefined\raggedonelinerstate \else \newconditional\raggedonelinerstate \fi
2227
2228\permanent\protected\def\doformatonelinerbox
2229 {\ifconditional\raggedonelinerstate
2230 \expandafter\dodoformatonelinerbox
2231 \else
2232 \expandafter\nodoformatonelinerbox
2233 \fi}
2234
2235\permanent\protected\def\dodoformatonelinerbox
2236 {\afterassignment\redoformatonelinerbox
2237 \setbox\nextbox\hbox}
2238
2239\permanent\protected\def\redoformatonelinerbox
2240 {\aftergroup\dododoformatonelinerbox
2241 \ignorespaces}
2242
2243\permanent\protected\def\dododoformatonelinerbox
2244 {\hpack to \hsize
2245 {\ifcase\raggedstatus\or\hss\or\hss \fi
2246 \unhbox\nextbox \removeunwantedspaces
2247 \ifcase\raggedstatus\or \or\hss\or\hss\fi}
2248 \egroup}
2249
2250\permanent\protected\def\nodoformatonelinerbox
2251 {\let\next=}
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269\def\pack_framed_set_foregroundcolor
2270 {\edef\p_framed_foregroundcolor{\framedparameter\c!foregroundcolor}
2271 \ifempty\p_framed_foregroundcolor\else\dousecolorparameter\p_framed_foregroundcolor\fi}
2272
2273\def\pack_framed_do_setups
2274 {\ifempty\p_framed_setups \else
2275 \setups[\p_framed_setups]
2276
2277 \fi}
2278
2279\def\pack_framed_format_format_yes
2280 {\vbox to \d_framed_height \p_framed_adaptive
2281 \bgroup
2282 \let\postprocessframebox\relax
2283
2284 \iftrialtypesetting \else
2285 \pack_framed_set_foregroundcolor
2286 \fi
2287 \oninterlineskip
2288 \hsize\d_framed_width
2289 \vsize\d_framed_height
2290 \pack_framed_do_setups
2291 \raggedcommand
2292 \pack_framed_do_top
2293 \synchronizeinlinedirection
2294 \localbegstrut
2295 \atendofgroup\localendstrut
2296 \atendofgroup\pack_framed_do_bottom
2297 \doformatonelinerbox}
2298
2299\def\pack_framed_format_format_nop
2300 {\vbox to \d_framed_height
2301 \bgroup
2302 \let\postprocessframebox\relax
2303
2304 \iftrialtypesetting \else
2305 \pack_framed_set_foregroundcolor
2306 \fi
2307 \oninterlineskip
2308 \hsize\d_framed_width
2309 \vsize\d_framed_height
2310 \pack_framed_do_setups
2311 \raggedcenter
2312 \vss
2313 \synchronizeinlinedirection
2314 \localbegstrut
2315 \atendofgroup\localendstrut
2316 \atendofgroup\vss
2317 \doformatonelinerbox}
2318
2319\def\pack_framed_format_format_height
2320 {\vbox to \d_framed_height
2321 \bgroup
2322 \let\postprocessframebox\relax
2323
2324 \iftrialtypesetting \else
2325 \pack_framed_set_foregroundcolor
2326 \fi
2327 \oninterlineskip
2328 \pack_framed_do_setups
2329 \raggedcommand
2330 \vss
2331 \synchronizeinlinedirection
2332 \localbegstrut
2333 \atendofgroup\localendstrut
2334 \atendofgroup\vss
2335 \doformatonelinerbox}
2336
2337\def\pack_framed_format_format_width
2338 {\vbox
2339 \bgroup
2340 \let\postprocessframebox\relax
2341
2342 \iftrialtypesetting \else
2343 \pack_framed_set_foregroundcolor
2344 \fi
2345 \oninterlineskip
2346 \hsize\d_framed_width
2347 \pack_framed_do_setups
2348 \raggedcommand
2349 \pack_framed_do_top
2350 \synchronizeinlinedirection
2351 \localbegstrut
2352 \atendofgroup\localendstrut
2353 \atendofgroup\pack_framed_do_bottom
2354 \doformatonelinerbox}
2355
2356\def\pack_framed_format_format_vsize
2357 {\vbox to \d_framed_height
2358 \bgroup
2359 \let\postprocessframebox\relax
2360
2361 \iftrialtypesetting \else
2362 \pack_framed_set_foregroundcolor
2363 \fi
2364 \vsize\d_framed_height
2365 \pack_framed_do_setups
2366 \vss
2367 \atendofgroup\vss
2368 \hbox
2369 \bgroup
2370 \aftergroup\egroup
2371 \synchronizeinlinedirection
2372 \localstrut
2373 \doformatonelinerbox}
2374
2375\def\pack_framed_format_format_hsize
2376 {\hbox to \d_framed_width
2377 \bgroup
2378 \let\postprocessframebox\relax
2379
2380 \iftrialtypesetting \else
2381 \pack_framed_set_foregroundcolor
2382 \fi
2383 \pack_framed_do_setups
2384 \hss
2385 \synchronizeinlinedirection
2386 \localstrut
2387 \atendofgroup\hss
2388 \doformatonelinerbox}
2389
2390\def\pack_framed_format_format_no_size
2391 {\hbox
2392 \bgroup
2393 \iftrialtypesetting \else
2394 \pack_framed_set_foregroundcolor
2395 \fi
2396 \let\postprocessframebox\relax
2397 \pack_framed_do_setups
2398 \synchronizeinlinedirection
2399 \localstrut
2400 \doformatonelinerbox}
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470\def\pack_framed_reshape_reset
2471 {\framednoflines \zerocount
2472 \framedfirstheight \zeropoint
2473 \framedlastdepth \zeropoint
2474 \framedminwidth \zeropoint
2475 \framedmaxwidth \zeropoint
2476 \framedaveragewidth\zeropoint}
2477
2478\def\pack_framed_reshape_process
2479 {\ifvbox\b_framed_normal
2480 \ifconditional\c_pack_resync
2481 \clf_doresyncframedbox
2482 \else
2483 \clf_doreshapeframedbox
2484 \fi\b_framed_normal\relax
2485 \ifx\p_framed_adaptive\s!delay
2486 \adaptivecheckbox\b_framed_normal
2487 \fi
2488 \fi}
2489
2490\def\pack_framed_reshape_analyze
2491 {\ifvbox\b_framed_normal
2492 \ifconditional\c_pack_resync
2493 \clf_doresyncframedbox
2494 \else
2495 \clf_doanalyzeframedbox
2496 \fi\b_framed_normal\relax
2497 \fi}
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586\protected\def\pack_framed_vboxed_hairline
2587 {\begingroup
2588 \scratchoffset\ifconditional\c_framed_has_offset \localoffset \else \zeropoint \fi
2589 \scratchwidth{\scratchoffset\d_framed_linewidth}
2590 \par
2591 \nointerlineskip
2592 \kern\scratchoffset
2593 \dontleavehmode
2594 \hrule\s!height\d_framed_linewidth\s!depth\zeropoint
2595 \par
2596 \kern\d_framed_linewidth
2597 \dontleavehmode
2598 \hpack to \zeropoint{\hss\vrule\s!height\d_framed_linewidth\s!depth\zeropoint\s!width\scratchwidth}
2599 \hfill
2600 \hpack to \zeropoint{\vrule\s!height\d_framed_linewidth\s!depth\zeropoint\s!width\scratchwidth\hss}
2601 \par
2602 \nointerlineskip
2603 \kern\scratchoffset
2604 \nointerlineskip
2605 \endgraf
2606 \nointerlineskip
2607 \localbegstrut
2608 \endgroup}
2609
2610\protected\def\pack_framed_hboxed_hairline
2611 {\bgroup
2612 \scratchoffset\ifconditional\c_framed_has_offset \localoffset \else \zeropoint \fi
2613 \ifconditional\c_framed_has_height
2614 \dimen\scratchheight{\localheight\plustwo\strutdp\plustwo\d_framed_linewidth}
2615 \dimen\scratchdepth {\localheight\plustwo\strutdp\plustwo\d_framed_linewidth}
2616 \else
2617 \dimen\scratchheight{\strutht\scratchoffset}
2618 \dimen\scratchdepth {\strutdp\scratchoffset}
2619 \fi
2620 \unskip
2621 \setbox\scratchbox\hpack
2622 {\kern\scratchoffset
2623 \vrule\s!height\dimen\scratchheight\s!depth\dimen\scratchdepth\s!width\d_framed_linewidth
2624 \kern\scratchoffset}
2625 \ht\scratchbox\strutht
2626 \dp\scratchbox\strutdp
2627 \box\scratchbox
2628 \ignorespaces
2629 \egroup}
2630
2631
2632
2633
2634\protected\def\pack_framed_vboxed_newline
2635 {\endgraf\ignorespaces}
2636
2637\protected\def\pack_framed_hboxed_newline
2638 {\unskip\normalspace\ignorespaces}
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762\installcorenamespace{framedtext}
2763\installcorenamespace{framedtextlocation}
2764
2765\installframedcommandhandler \??framedtext {framedtext} \??framedtext
2766
2767\let\setupframedtexts\setupframedtext
2768
2769\setupframedtext
2770 [\c!width=.75\hsize,
2771 \c!height=\v!fit,
2772 \c!align=\v!yes,
2773
2774 \c!bottom=\vfill,
2775 \c!offset=1em,
2776
2777
2778
2779
2780 \c!right=\hfill,
2781 \c!before=\blank,
2782 \c!after=\blank,
2783
2784 \c!frame=\v!on,
2785
2786
2787
2788
2789 \c!radius=.5\bodyfontsize,
2790 \c!corner=\v!rectangular,
2791
2792
2793
2794
2795
2796
2797 \c!linecorrection=\v!on,
2798 \c!depthcorrection=\v!on,
2799 \c!margin=\v!standard]
2800
2801\appendtoks
2802 \frozen\instance\protected\edefcsname\e!start\currentframedtext\endcsname{\pack_framed_text_start [\currentframedtext]}
2803 \frozen\instance\protected\edefcsname\e!stop \currentframedtext\endcsname{\pack_framed_text_stop }
2804 \frozen\instance\protected\edefcsname \currentframedtext\endcsname{\pack_framed_text_direct[\currentframedtext]}
2805\to \everydefineframedtext
2806
2807\defcsname\??framedtextlocation\v!left\endcsname
2808 {\letframedtextparameter\c!left \relax
2809 \letframedtextparameter\c!right\hfill}
2810
2811\defcsname\??framedtextlocation\v!right\endcsname
2812 {\letframedtextparameter\c!left \hfill
2813 \letframedtextparameter\c!right\relax}
2814
2815\defcsname\??framedtextlocation\v!middle\endcsname
2816 {\letframedtextparameter\c!left \hfill
2817 \letframedtextparameter\c!right\hfill}
2818
2819\defcsname\??framedtextlocation\v!none\endcsname
2820 {\letframedtextparameter\c!left \relax
2821 \letframedtextparameter\c!right\relax
2822 \c_framed_text_location_none\conditionaltrue}
2823
2824\tolerant\protected\def\pack_framed_text_start[#1]#*[#S#2]#*[#S#3]
2825 {\bgroup
2826 \cdef\currentframedtext{#1}
2827 \doifelseassignment{#2}
2828 {\pack_framed_text_start_indeed\empty{#2}}
2829 {\pack_framed_text_start_indeed{#2}{#3}}}
2830
2831
2832
2833\def\pack_framed_text_start_indeed#1#2
2834 {\setupframedtexts[\currentframedtext][#2]
2835 \ifempty{#1}\else
2836 \setframedtextparameter\c!location{#1}
2837 \fi
2838 \c_framed_text_location_none\conditionalfalse
2839 \begincsname\??framedtextlocation\framedtextparameter\c!location\endcsname
2840 \resetframedtextparameter\c!location
2841 \pack_framed_text_check
2842 \setbox\b_framed_normal\vbox
2843 \startboxedcontent
2844 \hsize\localhsize
2845
2846 \usebodyfontparameter\framedtextparameter
2847
2848 \letframedtextparameter\c!strut\v!no
2849 \inheritedframedtextframed\bgroup
2850 \enforced\let\\\endgraf
2851 \edef\p_framed_text_depthcorrection{\framedtextparameter\c!depthcorrection}
2852 \ifx\p_framed_text_depthcorrection\v!on
2853 \pack_framed_text_start_depth_correction
2854 \else
2855 \bgroup
2856 \fi
2857
2858 \doinhibitblank
2859 \useindentingparameter\framedtextparameter
2860 \useframedtextstyleandcolor\c!style\c!color
2861 \framedtextparameter\c!inner
2862 \ignorespaces}
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875\defineplacement[\??framedtext][\s!parent=\??framedtext\currentframedtext]
2876
2877\protected\def\pack_framed_text_stop
2878 {\endgraf
2879 \removelastskip
2880 \ifx\p_framed_text_depthcorrection\v!on
2881 \pack_framed_text_stop_depth_correction
2882 \else
2883 \egroup
2884 \fi
2885 \stopboxedcontent
2886 \ifconditional\c_framed_text_location_none
2887 \egroup
2888 \box\b_framed_normal
2889 \orelse\ifinsidefloat
2890 \egroup
2891 \box\b_framed_normal
2892 \else
2893 \egroup
2894 \placement[\??framedtext][\c!depthcorrection=\v!off]{\box\b_framed_normal}
2895 \fi
2896 \egroup}
2897
2898
2899
2900\def\pack_framed_text_check
2901 {\localhsize\hsize
2902 \ifinsidefloat \orelse \ifdim\d_page_sides_vsize>\zeropoint
2903
2904
2905
2906 \checksidefloat
2907 \setlocalhsize
2908 \fi}
2909
2910\def\pack_framed_text_start_depth_correction
2911 {\bgroup
2912 \ifhmode
2913 \par
2914 \fi
2915 \ifvmode
2916 \verticalstrut
2917
2918
2919 \vskip\struttotal
2920 \nowhitespace
2921 \fi}
2922
2923\def\pack_framed_text_stop_depth_correction
2924 {\ifhmode
2925 \par
2926 \fi
2927 \ifvmode
2928 \forgetall
2929 \vskip\struttotal
2930 \verticalstrut
2931 \egroup
2932 \forgetall
2933 \vskip\lineheight
2934 \verticalstrut
2935 \else
2936 \egroup
2937 \fi}
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957\let\pack_framed_strut\relax
2958
2959\tolerant\protected\def\pack_framed_text_direct[#1]#*[#S#2]
2960 {\bgroup
2961 \cdef\currentframedtext{#1}
2962 \usebodyfontparameter\framedtextparameter
2963 \setupcurrentframedtext[#2]
2964 \edef\p_framed_text_strut{\framedtextparameter\c!strut}
2965 \letframedtextparameter\c!strut\v!no
2966 \inheritedframedtextframed\bgroup
2967 \blank[\v!disable]
2968 \enforced\let\\\endgraf
2969 \useframedtextstyleandcolor\c!style\c!color
2970
2971 \framedtextparameter\c!inner
2972 \ifx\p_framed_text_strut\v!no
2973 \let\pack_framed_strut\relax
2974 \else
2975 \let\pack_framed_strut\strut
2976 \fi
2977 \bgroup
2978 \aftergroup\pack_framed_text_stop_direct
2979 \afterassignment\ignorespaces
2980 \afterassignment\pack_framed_strut
2981 \let\next=}
2982
2983\def\pack_framed_text_stop_direct
2984 {\removelastskip
2985 \egroup
2986 \egroup}
2987
2988\defineframedtext
2989 [\v!framedtext]
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003\appendtoks
3004 \ifcsname\??regularframedlevel\currentframed\endcsname
3005
3006 \else
3007 \expandafter\newinteger\csname\??regularframedlevel\currentframed\endcsname
3008 \fi
3009\to \everypresetframed
3010
3011\appendtoks
3012 \frozen\instance\protected\edefcsname\currentframed\endcsname{\pack_framed_defined_process[\currentframed]}
3013\to \everydefineframed
3014
3015\newinteger\c_temp_framed_crap
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033\permanent\tolerant\protected\def\pack_framed_defined_process[#1]#*[#S#2]
3034 {\bgroup
3035 \ifcsname\??regularframedlevel#1\endcsname
3036
3037 \scratchcounter\lastnamedcs
3038 \else
3039 \scratchcounter\c_temp_framed_crap
3040 \fi
3041 \advanceby\scratchcounter\plusone
3042 \defcsname\??framed#1>\the\scratchcounter:\s!parent\endcsname{\??framed#1}
3043 \bgroup
3044 \cdef\currentframed{#1>\the\scratchcounter}
3045 \pack_framed_initialize
3046 \setupcurrentframed[#2]
3047 \pack_framed_process_indeed}
3048
3049\aliased\let\placeframed\pack_framed_defined_process
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094\installcorenamespace{framedcontent}
3095
3096\installframedcommandhandler \??framedcontent {framedcontent} \??framedcontent
3097
3098\setupframedcontent
3099 [\c!leftoffset=\zeropoint,
3100
3101 \c!rightoffset=\scratchleftoffset,
3102 \c!topoffset=\zeropoint,
3103
3104 \c!bottomoffset=\scratchtopoffset,
3105 \c!strut=\v!no,
3106
3107
3108
3109
3110 \c!offset=\v!overlay]
3111
3112\permanent\let\stopframedcontent\relax
3113
3114\permanent\tolerant\protected\def\startframedcontent[#1]
3115 {\bgroup
3116 \cdef\currentframedcontent{#1}
3117 \ifx\currentframedcontent\v!off
3118 \enforced\let\stopframedcontent\egroup
3119 \else
3120 \checkframedcontentparent
3121 \enforced\let\stopframedcontent\pack_framed_stop_content_indeed
3122 \expandafter\pack_framed_start_content_indeed
3123 \fi}
3124
3125\def\pack_framed_start_content_indeed
3126 {\setbox\b_framed_normal\hpack\bgroup
3127 \setlocalhsize
3128 \hsize\localhsize
3129 \scratchleftoffset {\framedcontentparameter\c!leftoffset}
3130 \scratchrightoffset {\framedcontentparameter\c!rightoffset}
3131 \scratchtopoffset {\framedcontentparameter\c!topoffset}
3132 \scratchbottomoffset{\framedcontentparameter\c!bottomoffset}
3133 \advanceby\hsize{\scratchleftoffset\scratchrightoffset }
3134 \advanceby\vsize{\scratchtopoffset \scratchbottomoffset}
3135 \kern\scratchleftoffset
3136 \vpack\bgroup
3137 \vskip\scratchtopoffset
3138 \vbox\bgroup
3139 \forgetall
3140 \blank[\v!disable]}
3141
3142\protected\def\pack_framed_stop_content_indeed
3143 {\removelastskip
3144 \egroup
3145 \vskip\scratchbottomoffset
3146 \egroup
3147 \kern\scratchrightoffset
3148 \egroup
3149 \ifcstok{\framedcontentparameter\c!width}\v!fit
3150 \letframedcontentparameter\c!width\v!fixed
3151 \fi
3152 \ifinsidefloat
3153 \donefalse
3154 \orelse\ifcstok{\framedcontentparameter\c!linecorrection}\v!yes
3155 \donetrue
3156 \else
3157 \donefalse
3158 \fi
3159
3160 \ifdone\startlinecorrection\fi
3161 \framedcontentparameter\c!left
3162 \inheritedframedcontentframed{\box\b_framed_normal}
3163 \framedcontentparameter\c!right
3164 \ifdone\stoplinecorrection\fi
3165 \egroup}
3166
3167
3168
3169\setuplinewidth
3170 [\v!medium]
3171
3172
3173
3174\defineframed
3175 [\v!unframed]
3176 [\c!frame=\v!off,
3177 \c!rulethickness=\zeropoint,
3178 \c!foregroundstyle=\framedparameter\c!style,
3179 \c!foregroundcolor=\framedparameter\c!color]
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192\permanent\protected\def\doifelseframed#1
3193 {\ifcstok{#1\c!frame }\v!on\expandafter\firstoftwoarguments
3194 \orelse\ifcstok{#1\c!topframe }\v!on\expandafter\firstoftwoarguments
3195 \orelse\ifcstok{#1\c!bottomframe}\v!on\expandafter\firstoftwoarguments
3196 \orelse\ifcstok{#1\c!leftframe }\v!on\expandafter\firstoftwoarguments
3197 \orelse\ifcstok{#1\c!rightframe }\v!on\expandafter\firstoftwoarguments
3198 \orelse\ifempty{#1\c!background }\expandafter\secondoftwoarguments
3199 \else \expandafter\firstoftwoarguments\fi}
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212\permanent\tolerant\protected\def\startclipframed[#1]
3213 {\startgraphicgroup
3214 \framed[\c!background={\v!foreground,clipframed},#1]\bgroup\starteffect[\v!clip]}
3215
3216\permanent\protected\def\stopclipframed
3217 {\stopeffect
3218 \egroup
3219 \stopgraphicgroup}
3220
3221\defineoverlay
3222 [clipframed]
3223 [{\blackrule[\c!width=\overlaywidth,\c!height=\overlayheight,\c!color=darkred]}]
3224
3225
3226\protect \endinput
3227 |