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