1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Packaging Macros Layers}
15
16
17
18
19
20\unprotect
21
22
23
24
25
26
27
28
29
30
31
32
33\ifdefined\defineoverlay \else \message{loaded to early} \wait \fi
34
35\pushoverloadmode
36
37\permanent\overloaded\tolerant\protected\def\defineoverlay[#1]#*[#S#2]#*[#S#3]
38 {\ifnum\lastarguments=\plusthree
39
40 \def\pack_framed_define_overlay_indeed##1{\defcsname\??overlay##1\endcsname{\setlayer[#2]{\executedefinedoverlay{##1}{#3}}}}
41 \else
42 \def\pack_framed_define_overlay_indeed##1{\defcsname\??overlay##1\endcsname{\executedefinedoverlay{##1}{#2}}}
43 \fi
44 \processcommalist[#1]\pack_framed_define_overlay_indeed}
45
46\popoverloadmode
47
48
49
50
51
52
53
54
55\installcorenamespace{layer}
56\installcorenamespace{layerbox}
57\installcorenamespace{layerpreset}
58\installcorenamespace{layerposition}
59
60
61
62
63
64
65
66
67
68
69\installcommandhandler \??layer {layer} \??layer
70
71\setuplayer
72 [\c!state=\v!start,
73
74
75
76
77
78
79 \c!direction=\v!normal,
80 \c!position=\v!no,
81 \c!method=\v!overlay,
82 \c!x=\zeropoint,
83 \c!y=\zeropoint,
84 \c!line=0,
85 \c!column=0,
86 \c!width=\wd\nextbox,
87 \c!height=\ht\nextbox,
88 \c!offset=\zeropoint,
89 \c!hoffset=\zeropoint,
90 \c!voffset=\zeropoint,
91 \c!dx=\zeropoint,
92 \c!dy=\zeropoint,
93 \c!location=rb,
94 \c!sx=1,
95 \c!sy=1,
96 \c!region=\layeranchor]
97
98\permanent\def\layeranchor{\currentlayer:\the\realpageno}
99
100\lettonothing\m_pack_layers_anchor
101\lettonothing\m_pack_layers_page
102\lettonothing\m_pack_layers_region
103\lettonothing\m_pack_layers_target
104\lettonothing\p_pack_layers_column
105\lettonothing\p_pack_layers_corner
106\lettonothing\p_pack_layers_dx
107\lettonothing\p_pack_layers_dy
108\lettonothing\p_pack_layers_height
109\lettonothing\p_pack_layers_hoffset
110\lettonothing\p_pack_layers_line
111\lettonothing\p_pack_layers_location
112\lettonothing\p_pack_layers_method
113\lettonothing\p_pack_layers_offset
114\lettonothing\p_pack_layers_option
115\lettonothing\p_pack_layers_position
116\lettonothing\p_pack_layers_preset
117\lettonothing\p_pack_layers_region
118\lettonothing\p_pack_layers_repeat
119\lettonothing\p_pack_layers_rotation
120\lettonothing\p_pack_layers_state
121\lettonothing\p_pack_layers_sx
122\lettonothing\p_pack_layers_sy
123\lettonothing\p_pack_layers_voffset
124\lettonothing\p_pack_layers_width
125\lettonothing\p_pack_layers_x
126\lettonothing\p_pack_layers_y
127
128\newconditional\c_pack_layers_repeated
129\newconditional\c_pack_layers_trace
130\newinteger \c_pack_layers_current_data
131
132\newbox\b_layers \pushoverloadmode \mutable\let\b_layers\b_layers \popoverloadmode
133
134\newdimension\d_pack_layers_x_size
135\newdimension\d_pack_layers_y_size
136\newdimension\d_pack_layers_x_offset
137\newdimension\d_pack_layers_y_offset
138\newdimension\d_pack_layers_x_position
139\newdimension\d_pack_layers_y_position
140
141\newdimension\layerwidth
142\newdimension\layerheight
143
144\mutable\let\lastlayerxpos\!!zeropoint
145\mutable\let\lastlayerypos\!!zeropoint
146\mutable\let\lastlayerwd \!!zeropoint
147\mutable\let\lastlayerht \!!zeropoint
148\mutable\let\lastlayerdp \!!zeropoint
149
150\appendtoks
151 \ifcstok{\layerparameter\c!doublesided}\v!yes
152 \relateparameterhandlers{layer}{\v!left \currentlayer}{layer}\currentlayer
153 \relateparameterhandlers{layer}{\v!right\currentlayer}{layer}\currentlayer
154 \pack_layers_preset_box{\v!left \currentlayer}
155 \pack_layers_preset_box{\v!right\currentlayer}
156 \fi
157 \pack_layers_preset_box\currentlayer
158 \normalexpanded{\defineoverlay[\currentlayer][\noexpand\composedlayer{\currentlayer}]}
159\to \everydefinelayer
160
161\def\pack_layers_preset_box#1
162 {\ifcsname\??layerbox#1\endcsname
163 \resetlayer[#1]
164 \else
165 \expandafter\newbox\csname\??layerbox#1\endcsname
166 \fi}
167
168
169
170
171
172
173\def\pack_layers_reset_box#1
174 {\ifcsname\??layerbox#1\endcsname
175
176 \global\setbox\lastnamedcs\emptybox
177 \fi}
178
179\permanent\protected\def\resetlayer[#1]
180 {\pack_layers_reset_box{#1}
181 \pack_layers_reset_box{\v!left #1}
182 \pack_layers_reset_box{\v!right#1}
183 \pack_layers_reset_box{#1:\the\realpageno}}
184
185
186
187
188
189
190
191
192
193
194
195
196\mutable\lettonothing\currentlayerwidth
197\mutable\lettonothing\currentlayerheight
198
199\permanent\tolerant\protected\def\setcurrentlayerdimensions[#1]#*[#2]
200 {\edef\currentlayerwidth {\thelayerwidth {#2#1}}
201 \edef\currentlayerheight{\thelayerheight{#2#1}}}
202
203\permanent\def\thelayerwidth #1{\the\ifcsname\??layerbox#1\endcsname\wd\lastnamedcs\else\zeropoint\fi}
204\permanent\def\thelayerheight#1{\the\ifcsname\??layerbox#1\endcsname\ht\lastnamedcs\else\zeropoint\fi}
205
206\permanent\tolerant\protected\def\setlayer[#1]#*[#S#2]#*[#S#3]
207 {\bgroup
208 \nofarguments\lastarguments
209 \checkpositionoverlays
210 \cdef\currentlayer{#1}
211 \edef\p_pack_layers_state{\layerparameter\c!state}
212 \ifx\p_pack_layers_state\v!stop
213 \dowithnextboxcs\egroup\hbox
214 \orelse\ifnum\nofarguments=\plusthree
215 \edef\m_pack_layers_target{#2}
216 \pack_layers_set_indeed{#3}
217 \orelse\ifhastok={#2}
218 \lettonothing\m_pack_layers_target
219 \pack_layers_set_indeed{#2}
220 \else
221 \edef\m_pack_layers_target{#2}
222 \pack_layers_set_indeed\empty
223 \fi}
224
225\def\pack_layers_set_indeed#1
226 {\page_backgrounds_recalculate
227 \global\advanceby\c_pack_layers_current_data\plusone
228 \forgetall
229 \dontcomplain
230 \edef\p_pack_layers_option{\layerparameter\c!option}
231 \ifx\p_pack_layers_option\v!test
232 \c_pack_layers_trace\conditionaltrue
233 \traceboxplacementtrue
234 \fi
235 \dowithnextbox{\pack_layers_set_finish{#1}}\hbox}
236
237\def\pack_layers_set_finish#1
238 {\ifcsname\??layerbox\currentlayer\endcsname
239 \ifx\m_pack_layers_target\v!even
240 \ifodd\realpageno
241
242 \else
243 \let\m_pack_layers_target\v!left
244 \pack_layers_set_content{#1}
245 \fi
246 \orelse\ifx\m_pack_layers_target\v!odd
247 \ifodd\realpageno
248 \let\m_pack_layers_target\v!right
249 \pack_layers_set_content{#1}
250 \else
251
252 \fi
253 \else
254 \pack_layers_set_content{#1}
255 \fi
256 \else
257 \writestatus{layer}{unknown layer \currentlayer}
258 \fi
259 \egroup}
260
261
262
263
264\def\pack_layers_set_last_position_yes
265 {
266 \edef\m_pack_layers_anchor{\??layerposition\the\c_pack_layers_current_data}
267 \edef\m_pack_layers_page {\MPp\m_pack_layers_anchor}
268
269 \edef\m_pack_layers_region{\layerparameter\c!region}
270 \d_pack_layers_x_position \dimexpr\MPx\m_pack_layers_region\MPx\m_pack_layers_anchor\relax
271 \d_pack_layers_y_position \dimexpr \MPy\m_pack_layers_region\MPy\m_pack_layers_anchor\MPh\m_pack_layers_region\relax
272 \xdef\lastlayerxpos{\the\d_pack_layers_x_position}
273 \xdef\lastlayerypos{\the\d_pack_layers_y_position}
274
275
276
277 \global\letlayerparameter\c!state\v!start
278 \setbox\b_layers\vpack to \d_pack_layers_y_size
279 {\hpack to \d_pack_layers_x_size
280 {\xypos\m_pack_layers_anchor\hss}
281 \vss}}
282
283\def\pack_layers_set_last_position_nop
284 {\setbox\b_layers\emptybox
285 \d_pack_layers_x_position\p_pack_layers_sx\dimexpr\p_pack_layers_x\relax
286 \d_pack_layers_y_position\p_pack_layers_sy\dimexpr\p_pack_layers_y\relax
287 \glet\lastlayerxpos\!!zeropoint
288 \glet\lastlayerypos\!!zeropoint
289 \ifinset\v!bottom\p_pack_layers_corner\pack_layers_set_bottom_positions\fi
290 \ifinset\v!right \p_pack_layers_corner\pack_layers_set_right_positions \fi
291 \ifinset\v!middle\p_pack_layers_corner\pack_layers_set_middle_positions\fi
292 \edef\m_pack_layers_page{\layerparameter\c!page}}
293
294\permanent\tolerant\protected\def\definelayerpreset[#1]#*[#S#2]
295 {\ifarguments\or
296 \letcsname\??layerpreset#1\endcsname\empty
297 \orelse\ifhastok={#2}
298 \defcsname\??layerpreset#1\endcsname{\setupcurrentlayer[#2]}
299 \else
300 \defcsname\??layerpreset#1\endcsname{\csname\??layerpreset#2\endcsname}
301 \fi}
302
303\mutable\integerdef\b_layers_page\zerocount
304
305\def\pack_layers_set_content#1
306 {\layerwidth \layerparameter\c!width
307 \layerheight\layerparameter\c!height
308 \d_pack_layers_x_size\layerwidth
309 \d_pack_layers_y_size\layerheight
310
311 \setupcurrentlayer[#1]
312
313 \edef\p_pack_layers_preset {\layerparameter\c!preset }
314
315 \ifcsname\??layerpreset\p_pack_layers_preset\endcsname
316 \lastnamedcs
317 \setupcurrentlayer[#1]
318 \fi
319
320 \edef\p_pack_layers_rotation {\layerparameter\c!rotation }
321 \edef\p_pack_layers_position {\layerparameter\c!position }
322 \edef\p_pack_layers_hoffset {\layerparameter\c!hoffset }
323 \edef\p_pack_layers_voffset {\layerparameter\c!voffset }
324 \edef\p_pack_layers_offset {\layerparameter\c!offset }
325 \edef\p_pack_layers_dx {\layerparameter\c!dx }
326 \edef\p_pack_layers_dy {\layerparameter\c!dy }
327 \edef\p_pack_layers_sx {\layerparameter\c!sx }
328 \edef\p_pack_layers_sy {\layerparameter\c!sy }
329 \edef\p_pack_layers_x {\layerparameter\c!x }
330 \edef\p_pack_layers_y {\layerparameter\c!y }
331 \edef\p_pack_layers_corner {\layerparameter\c!corner }
332 \edef\p_pack_layers_location {\layerparameter\c!location }
333 \edef\p_pack_layers_line {\layerparameter\c!line }
334 \edef\p_pack_layers_column {\layerparameter\c!column }
335 \edef\p_pack_layers_width {\layerparameter\c!width }
336 \edef\p_pack_layers_height {\layerparameter\c!height }
337
338 \ifx\p_pack_layers_position\v!overlay
339 \let\p_pack_layers_width \zeropoint
340 \let\p_pack_layers_height \zeropoint
341 \let\p_pack_layers_position\v!yes
342 \fi
343 \ifempty\p_pack_layers_rotation \else
344
345 \setbox\nextbox\hpack
346 {\rotate[\c!location=\v!high,\c!rotation=\layerparameter\c!rotation]{\box\nextbox}}
347 \fi
348 \d_pack_layers_x_offset\p_pack_layers_sx\dimexpr
349 \ifx\p_pack_layers_hoffset\v!max\d_pack_layers_x_size\else\p_pack_layers_hoffset\fi\p_pack_layers_offset\p_pack_layers_dx
350 \relax
351 \d_pack_layers_y_offset\p_pack_layers_sy\dimexpr
352 \ifx\p_pack_layers_voffset\v!max\d_pack_layers_y_size\else\p_pack_layers_voffset\fi\p_pack_layers_offset\p_pack_layers_dy
353 \relax
354 \ifx\p_pack_layers_position\v!yes
355 \pack_layers_set_last_position_yes
356 \else
357 \pack_layers_set_last_position_nop
358 \fi
359
360 \ifempty\m_pack_layers_page \else
361 \edef\m_pack_layers_page{:\m_pack_layers_page}
362 \ifcsname\??layerbox\m_pack_layers_target\currentlayer\m_pack_layers_page\endcsname \else
363 \expandafter\newbox\csname\??layerbox\m_pack_layers_target\currentlayer\m_pack_layers_page\endcsname
364 \fi
365 \fi
366 \integerdef\b_layers_page\csname\??layerbox\m_pack_layers_target\currentlayer\m_pack_layers_page\endcsname
367 \ifvoid\b_layers_page
368 \gsetboxllx\b_layers_page\zeropoint
369 \gsetboxlly\b_layers_page\zeropoint
370 \fi
371 \global\setbox\b_layers_page\vpack
372 {\offinterlineskip
373 \ifvoid\b_layers_page
374 \scratchwidth \zeropoint
375 \scratchheight\zeropoint
376 \else
377 \scratchwidth \wd\b_layers_page
378 \scratchheight\ht\b_layers_page
379 \ht\b_layers_page\zeropoint
380 \dp\b_layers_page\zeropoint
381 \wd\b_layers_page\zeropoint
382 \ifcstok{\layerparameter\c!direction}\v!reverse\else
383 \box\b_layers_page
384 \fi
385 \fi
386
387 \xdef\lastlayerwd{\the\wd\nextbox}
388 \xdef\lastlayerht{\the\ht\nextbox}
389 \xdef\lastlayerdp{\the\dp\nextbox}
390
391 \ifx\p_pack_layers_location\v!grid
392 \ht\nextbox\strutheight
393 \dp\nextbox\strutdepth
394 \else
395 \setbox\nextbox\hpack
396 {\alignedbox[\p_pack_layers_location]\vpack{\box\nextbox}}
397 \fi
398 \ifnum\p_pack_layers_line=\zerocount\else
399
400 \advanceby\d_pack_layers_y_position\dimexpr\p_pack_layers_line\lineheight\topskip\lineheight\ht\nextbox\relax
401 \fi
402 \ifnum\p_pack_layers_column=\zerocount\else
403
404 \advanceby\d_pack_layers_x_position\layoutcolumnoffset\p_pack_layers_column\relax
405 \fi
406 \ifx\p_pack_layers_location\v!grid
407 \setbox\nextbox\hpack
408 {\alignedbox[rb]\vpack{\box\nextbox}}
409 \fi
410
411 \scratchdimen\dimexpr\d_pack_layers_x_position\d_pack_layers_x_offset\relax
412 \ifdim\scratchdimen<\getboxllx\b_layers_page
413 \gsetboxllx\b_layers_page\scratchdimen
414 \fi
415 \advanceby\scratchdimen\wd\nextbox
416 \wd\nextbox\ifdim\scratchdimen>\scratchwidth \scratchdimen \else \scratchwidth \fi
417 \scratchdimen\dimexpr\d_pack_layers_y_position\d_pack_layers_y_offset\relax
418 \ifdim\scratchdimen<\getboxlly\b_layers_page
419 \gsetboxlly\b_layers_page\scratchdimen
420 \fi
421
422 \advanceby\scratchdimen\dimexpr\ht\nextbox\dp\nextbox\relax
423 \ht\nextbox\ifdim\scratchdimen>\scratchheight \scratchdimen \else \scratchheight \fi
424 \dp\nextbox\zeropoint
425
426 \hsize\p_pack_layers_width
427 \vpack to \p_pack_layers_height \bgroup
428 \smashbox\nextbox
429 \vskip\dimexpr\d_pack_layers_y_position\d_pack_layers_y_offset\relax
430 \hskip\dimexpr\d_pack_layers_x_position\d_pack_layers_x_offset\relax
431
432
433 \box\nextbox
434 \ifvoid\b_layers_page
435
436 \else
437
438 \vskip\dimexpr\d_pack_layers_y_position\d_pack_layers_y_offset\relax
439 \box\b_layers_page
440 \fi
441 \egroup}
442
443
444 \ifvoid\b_layers \else
445 \box\b_layers
446 \fi}
447
448\def\pack_layers_set_bottom_positions
449 {\ifnum\p_pack_layers_line=\zerocount\else
450
451 \edef\p_pack_layers_line{\the\numexpr\p_pack_layers_line\layoutlines\plusone\relax}
452 \fi
453 \ifdim\d_pack_layers_y_size>\zeropoint
454 \advanceby\d_pack_layers_y_position\d_pack_layers_y_size
455 \d_pack_layers_y_position\d_pack_layers_y_position
456 \d_pack_layers_y_offset\d_pack_layers_y_offset
457 \fi}
458
459\def\pack_layers_set_right_positions
460 {\ifnum\p_pack_layers_column=\zerocount\else
461
462 \edef\p_pack_layers_column{\the\numexpr\layerparameter\c!column\layoutcolumns\plusone\relax}
463 \fi
464 \ifdim\d_pack_layers_x_size>\zeropoint
465 \advanceby\d_pack_layers_x_position\d_pack_layers_x_size
466 \d_pack_layers_x_position\d_pack_layers_x_position
467 \d_pack_layers_x_offset\d_pack_layers_x_offset
468 \fi}
469
470\def\pack_layers_set_middle_positions
471 {\ifdim\d_pack_layers_x_size>\zeropoint \advanceby\d_pack_layers_x_position.5\d_pack_layers_x_size \fi
472 \ifdim\d_pack_layers_y_size>\zeropoint \advanceby\d_pack_layers_y_position.5\d_pack_layers_y_size \fi}
473
474
475
476
477
478
479
480
481
482\permanent\def\doifelselayerdata#1
483 {\ifcsname\??layerbox#1\endcsname
484
485 \ifvoid\lastnamedcs
486 \doubleexpandafter\secondoftwoarguments
487 \else
488 \doubleexpandafter\firstoftwoarguments
489 \fi
490 \else
491 \expandafter\secondoftwoarguments
492 \fi}
493
494\aliased\let\doiflayerdataelse\doifelselayerdata
495
496
497
498
499
500
501
502
503
504
505\permanent\protected\def\flushlayer[#1]
506 {\begingroup
507 \forgetall
508 \cdef\currentlayer{#1}
509 \edef\p_pack_layers_state{\layerparameter\c!state}
510 \ifx\p_pack_layers_state\v!stop
511
512 \orelse\ifx\p_pack_layers_state\v!next
513 \global\letlayerparameter\c!state\v!start
514 \orelse\ifx\p_pack_layers_state\v!continue
515 \global\letlayerparameter\c!state\v!repeat
516 \orelse\ifcstok{\layerparameter\c!doublesided}\v!yes
517 \ifcsname\??layerbox#1\endcsname
518
519 \doifbothsidesoverruled
520 {\pack_layers_flush_double\v!left }
521 {\pack_layers_flush_double\v!right}
522 {\pack_layers_flush_double\v!left }
523 \else
524 \pack_layers_flush_single
525 \fi
526 \else
527 \pack_layers_flush_single
528 \fi
529 \endgroup}
530
531
532
533\mutable\integerdef\b_layer_one\zerocount
534\mutable\integerdef\b_layer_two\zerocount
535
536\def\pack_layers_flush_single
537 {\ifcsname\??layerbox\currentlayer\endcsname
538 \ifvoid\lastnamedcs
539 \ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
540 \ifvoid\lastnamedcs\else
541 \chardef\b_layer_two\lastnamedcs
542 \pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two
543 \fi
544 \fi
545 \else
546 \chardef\b_layer_one\lastnamedcs
547 \ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
548 \ifvoid\lastnamedcs\else
549 \chardef\b_layer_two\lastnamedcs
550 \startoverlay
551 {\pack_layers_flush_indeed\plusone \currentlayer \b_layer_one}
552 {\pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two}
553 \stopoverlay
554 \fi
555 \else
556 \pack_layers_flush_indeed\plusone\currentlayer\b_layer_one
557 \fi
558 \fi
559 \orelse\ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
560 \ifvoid\lastnamedcs
561
562 \else
563 \chardef\b_layer_two\lastnamedcs
564 \pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two
565 \fi
566 \fi}
567
568
569
570\def\pack_layers_flush_double#1
571 {\startoverlay
572 {\ifcsname\??layerbox\currentlayer\endcsname
573 \ifvoid\lastnamedcs\else \chardef\b_layer_two\lastnamedcs
574 \pack_layers_flush_indeed\plusone\currentlayer\b_layer_two
575 \fi
576 \fi}
577 {\ifcsname\??layerbox\currentlayer:\the\realpageno\endcsname
578 \ifvoid\lastnamedcs\else \chardef\b_layer_two\lastnamedcs
579 \pack_layers_flush_indeed\zerocount{\currentlayer:\the\realpageno}\b_layer_two
580 \fi
581 \fi}
582 {\ifcsname\??layerbox#1\currentlayer\endcsname
583 \ifvoid\lastnamedcs\else \chardef\b_layer_two\lastnamedcs
584 \pack_layers_flush_indeed\plusone{#1\currentlayer}\b_layer_two
585 \fi
586 \fi}
587 {\ifcsname\??layerbox#1\currentlayer:\the\realpageno\endcsname
588 \ifvoid\lastnamedcs\else \chardef\b_layer_two\lastnamedcs
589 \pack_layers_flush_indeed\zerocount{#1\currentlayer:\the\realpageno}\b_layer_two
590 \fi
591 \fi}
592 \stopoverlay}
593
594\let\pack_layers_top_fill \relax
595\let\pack_layers_bottom_fill\vss
596
597\def\pack_layers_flush_indeed#1#2#3
598 {\begingroup
599 \offinterlineskip
600 \edef\p_pack_layers_preset{\layerparameter\c!preset}
601 \ifcsname\??layerpreset\p_pack_layers_preset\endcsname
602 \lastnamedcs
603 \fi
604 \edef\p_pack_layers_method{\layerparameter\c!method}
605 \edef\p_pack_layers_option{\layerparameter\c!option}
606 \ifx\p_pack_layers_option\v!test
607 \c_pack_layers_trace\conditionaltrue
608 \traceboxplacementtrue
609 \fi
610 \ifcase#1\relax
611 \c_pack_layers_repeated\conditionalfalse
612 \else
613 \edef\p_pack_layers_position{\layerparameter\c!position}
614 \ifx\p_pack_layers_position\v!yes
615 \c_pack_layers_repeated\conditionalfalse
616 \else
617 \edef\p_pack_layers_repeat{\layerparameter\c!repeat}
618 \ifx\p_pack_layers_repeat\v!yes
619 \c_pack_layers_repeated\conditionaltrue
620 \orelse\ifx\p_pack_layers_state\v!repeat
621 \c_pack_layers_repeated\conditionaltrue
622 \else
623 \c_pack_layers_repeated\conditionalfalse
624 \fi
625 \fi
626 \fi
627
628 \let\b_layers#3
629
630
631
632 \setbox\nextbox
633 \ifx\p_pack_layers_method\v!fit
634 \pack_layers_positioned_box_yes
635 \else
636 \pack_layers_positioned_box_nop
637 \fi
638
639 \doifelseoverlay{#2}
640 {\setlayoutcomponentattribute{\v!layer:#2}}
641 \resetlayoutcomponentattribute
642
643
644 \setbox\nextbox
645 \ifx\p_pack_layers_option\v!test \ruledvbox \else \vpack \fi \ifx\p_pack_layers_method\v!overlay to \d_overlay_height \fi \layoutcomponentboxattribute
646 {\pack_layers_top_fill
647
648
649
650
651
652 \ifx\p_pack_layers_method\v!overlay \wd\nextbox\d_overlay_width\fi
653 \box\nextbox
654
655 \pack_layers_bottom_fill}
656
657 \edef\p_pack_layers_position{\layerparameter\c!position}
658 \ifx\p_pack_layers_position\v!yes
659 \edef\p_pack_layers_region{\layerparameter\c!region}
660 \ifempty\p_pack_layers_region\else
661 \anch_mark_tagged_box\nextbox\p_pack_layers_region\zerocount
662 \fi
663 \fi
664 \box\nextbox
665
666 \ifconditional\c_pack_layers_repeated\else
667 \gsetboxllx\b_layers\zeropoint
668 \gsetboxlly\b_layers\zeropoint
669 \fi
670 \endgroup}
671
672\def\pack_layers_positioned_box_yes
673 {\vpack
674 {\vskip\getboxlly\b_layers
675 \hskip\getboxllx\b_layers
676 \hsize\dimexpr\getboxllx\b_layers\wd\b_layers\relax
677 \ifconditional\c_pack_layers_repeated\copy\else\box\fi\b_layers}}
678
679\def\pack_layers_positioned_box_nop
680 {\ifconditional\c_pack_layers_repeated\copy\else\box\fi\b_layers}
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695\permanent\protected\def\composedlayer#1{\flushlayer[#1]}
696
697\permanent\protected\def\tightlayer[#1]
698 {\hpack
699 {\cdef\currentlayer{#1}
700 \setbox\nextbox\emptybox
701 \d_overlay_width \layerparameter\c!width
702 \d_overlay_height\layerparameter\c!height
703 \composedlayer{#1}}}
704
705\aliased\let\placelayer\flushlayer
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737\mutable\def\MPlayerwidth {\hsize}
738\mutable\def\MPlayerheight{\vsize}
739
740\permanent\tolerant\protected\def\setMPlayer[#1]#*[#2]#*[S#3]
741 {\edef\MPlayerwidth {\MPw{#2}}
742 \edef\MPlayerheight{\MPh{#2}}
743 \setlayer[#1][\c!x=\MPx{#2},\c!y=\MPy{#2},\c!position=\v!no,#3]}
744
745\permanent\tolerant\protected\def\getMPlayer[#1]#*[#S#2]
746 {\framed[\c!background={\v!foreground,#1},\c!frame=\v!off,\c!offset=\v!overlay,#2]}
747
748
749
750\ifdefined\settextpagecontent \else
751 \writestatus\m!system{error in pagelyr.tex} \wait
752\fi
753
754\definelayer
755 [OTRTEXT]
756
757\setuplayer
758 [OTRTEXT]
759 [\c!width=\innermakeupwidth,
760 \c!height=\textheight]
761
762\aliased\let\normalsettextpagecontent\settextpagecontent
763
764\overloaded\aliased\let\normalsettextpagecontent\settextpagecontent
765
766\permanent\overloaded\protected\def\settextpagecontent#1#2#3
767 {\doifelselayerdata{OTRTEXT}
768 {\setbox#1\hpack to \makeupwidth
769 {\startoverlay
770 {\tightlayer[OTRTEXT]}
771 {\normalsettextpagecontent{#1}{#2}{#3}\box#1}
772 \stopoverlay}
773 \dp#1\zeropoint}
774 {\normalsettextpagecontent{#1}{#2}{#3}}}
775
776\protect \endinput
777 |