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