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