1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19\writestatus{loading}{ConTeXt Page Macros Page Grids}
20
21\registerctxluafile{pagecst}{}
22
23\unprotect
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41\definesystemconstant{pagegrid}
42
43\installcorenamespace{pagegrid}
44
45\installframedcommandhandler \??pagegrid {pagegrid} \??pagegrid
46
47\setuppagegrid
48 [\c!distance=1.5\bodyfontsize,
49 \c!n=\plustwo,
50 \c!nleft=\pagegridparameter\c!n,
51 \c!nright=\pagegridparameter\c!n,
52
53
54
55 \c!lines=\layoutparameter\c!lines,
56 \c!frame=\v!off,
57 \c!strut=\v!no,
58 \c!offset=\v!overlay,
59 \c!alternative=\v!local,
60 \c!width=\v!auto,
61 \c!page=,
62 \c!direction=\v!normal,
63 \c!maxheight=\textheight,
64 \c!maxwidth=\makeupwidth]
65
66\appendtoks
67 \frozen\instance\protected\edefcsname\e!start\currentpagegrid\endcsname{\startpagegrid[\currentpagegrid]}
68 \frozen\instance\protected\edefcsname\e!stop \currentpagegrid\endcsname{\stoppagegrid}
69 \clf_definecolumnset {
70 name {\currentpagegrid}
71 }
72\to \everydefinepagegrid
73
74\newdimension\d_page_grd_column_width
75\newdimension\d_page_grd_max_height
76\newdimension\d_page_grd_max_width
77\newdimension\d_page_grd_distance
78
79\newdimension\d_page_grd_reserved_height
80\newdimension\d_page_grd_reserved_width
81\newinteger \c_page_grd_reserved_state
82
83\newdimension\d_page_grd_gap_height
84
85\newinteger \c_page_grd_n_of_left
86\newinteger \c_page_grd_n_of_right
87\newinteger \c_page_grd_n_of_rows
88\newinteger \c_page_grd_first_column
89\newinteger \c_page_grd_last_column
90
91\newbox \b_page_grd_collected
92\newbox \b_page_grd_column_rest
93\newbox \b_page_grd_column
94
95
96
97\permanent\tolerant\protected\def\setuppagegridlines[#1]#*[#2]#*[#3]#*[#4]
98 {\clf_setcolumnsetlines{name {#1} page {#2} column {#3} value {#4}}}
99
100\permanent\tolerant\protected\def\setuppagegridstart[#1]#*[#2]#*[#3]#*[#4]
101 {\clf_setcolumnsetstart{name {#1} page {#2} column {#3} value {#4}}}
102
103\protected\def\page_grd_check
104 {\dorecurse{(\pagegridparameter\c!nleft)(\pagegridparameter\c!nright)}
105 {\page_grd_check_column{##1}}}
106
107\protected\def\page_grd_check_column#1
108 {\chaintocurrentpagegrid{\currentpagegrid:#1}
109 \edef\p_distance{\namedpagegridparameter{\currentpagegrid:#1}\c!distance}
110 \edef\p_width {\namedpagegridparameter{\currentpagegrid:#1}\c!width}
111 \clf_setcolumnsetproperties {
112 name {\currentpagegrid}
113 column {#1}
114 \ifchkdimension\p_distance\or
115 distance \lastchkdimension
116 \fi
117 \ifx\p_width\v!auto\orelse\ifchkdimension\or
118 width \lastchkdimension
119 \fi
120 }}
121
122\appendtoks
123 \dorecurse{(\pagegridparameter\c!nleft)(\pagegridparameter\c!nright)}
124 {\chaintocurrentpagegrid{\currentpagegrid:#1}}
125\to \everydefinepagegrid
126
127\permanent\tolerant\protected\def\startpagegrid[#S#1]#*[#S#2]
128 {\bgroup
129 \enforced\let\startpagegrid\page_grd_start_dummy
130 \ifarguments
131 \lettonothing\currentpagegrid
132 \or
133 \ifhastok={#1}
134 \lettonothing\currentpagegrid
135 \setupcurrentpagegrid[#1]
136 \else
137 \cdef\currentpagegrid{#1}
138 \fi
139 \or
140 \cdef\currentpagegrid{#1}
141 \setupcurrentpagegrid[#2]
142 \fi
143 \usepageparameter\pagegridparameter
144 \c_page_grd_n_of_left {\pagegridparameter\c!nleft}
145 \c_page_grd_n_of_right{\pagegridparameter\c!nright}
146 \c_page_grd_n_of_rows {\pagegridparameter\c!lines}
147 \d_page_grd_max_width {\pagegridparameter\c!maxwidth}
148 \d_page_grd_max_height{\pagegridparameter\c!maxheight}
149 \d_page_grd_distance {\pagegridparameter\c!distance}
150
151 \automigrationmode\zerocount
152
153 \ifcase\c_page_grd_n_of_rows
154 \getrawnoflines{\d_page_grd_max_height\strutheight\topskip}
155 \c_page_grd_n_of_rows\noflines
156 \fi
157 \edef\p_width{\pagegridparameter\c!width}
158 \insidecolumnstrue
159 \clf_resetcolumnset {
160 name {\currentpagegrid}
161 nofrows \c_page_grd_n_of_rows
162 nofleft \c_page_grd_n_of_left
163 nofright \c_page_grd_n_of_right
164 lineheight \strutht
165 linedepth \strutdp
166 \ifx\p_width\v!auto
167
168 \else
169 width \p_width
170 \fi
171 distance \d_page_grd_distance
172 maxwidth \d_page_grd_max_width
173 }
174
175 \page_grd_check
176
177 \clf_flushcolumnsetareas{\currentpagegrid}\relax
178 \setupoutputroutine[\s!pagegrid]
179 \page_grd_command_set_hsize
180 \page_grd_command_set_vsize
181
182 \columnwidth \d_page_grd_column_width
183 \columndistance\d_page_grd_distance
184 \nofcolumns \c_page_grd_n_of_left
185 \textwidth \d_page_grd_column_width
186
187 }
188
189\tolerant\def\page_grd_start_dummy[#S#1]#*[#S#2]
190 {\let\page_grd_stop\egroup}
191
192\permanent\protected\def\stoppagegrid
193 {\page_grd_stop}
194
195\def\page_grd_stop
196 {\endgraf
197 \vfill
198 \page_grd_command_set_vsize
199 \penalty\c_page_otr_eject_penalty
200 \page_grd_command_flush_page
201 \page_otr_fill_and_eject_page
202 \page_grd_command_set_vsize
203 \egroup
204 \page_otr_command_set_vsize
205 \page_otr_command_set_hsize}
206
207\permanent\protected\def\reservepagegrid[#S#1]
208 {\begingroup
209 \letdummyparameter\c!c\plusone
210 \letdummyparameter\c!r\plusone
211 \letdummyparameter\c!nc\plusone
212 \letdummyparameter\c!nr\plusone
213 \getdummyparameters[#1]
214 \clf_blockcolumnset {
215 name {\currentpagegrid}
216 c \dummyparameter\c!c
217 r \dummyparameter\c!r
218 nc \dummyparameter\c!nc
219 nr \dummyparameter\c!nr
220 }
221 \endgroup}
222
223\permanent\tolerant\protected\def\setpagegrid[#S#1]
224 {\begingroup
225 \letdummyparameter\c!c\zerocount
226 \letdummyparameter\c!r\zerocount
227 \letdummyparameter\c!method\v!here
228 \letdummyparameter\c!option\v!none
229 \getdummyparameters[#1]
230 \dowithnextboxcs\page_grd_set_indeed\hbox}
231
232\def\page_grd_set_indeed
233 {\clf_checkcolumnset {
234 name {\currentpagegrid}
235 c {\dummyparameter\c!c}
236 r {\dummyparameter\c!r}
237 box \nextbox
238 method {\dummyparameter\c!method}
239 option {\dummyparameter\c!option}
240 }
241 \ifcase\c_page_grd_reserved_state
242 \setbox\nextbox\vpack to \d_page_grd_reserved_height \bgroup
243 \vss
244 \hpack to \d_page_grd_reserved_width \bgroup
245 \box\nextbox
246 \hss
247 \egroup
248 \vss
249 \egroup
250 \wd\nextbox\d_page_grd_reserved_width
251 \clf_putincolumnset {
252 name {\currentpagegrid}
253 box \nextbox
254 }
255 \fi
256 \endgroup}
257
258\protected\def\page_grd_command_set_vsize
259 {\clf_setvsizecolumnset{\currentpagegrid}
260 \ifdim\d_page_grd_gap_height<\lineheight
261 \page_grd_command_flush_page
262 \page_otr_fill_and_eject_page
263 \fi
264 \global\vsize\d_page_grd_gap_height
265 \pagegoal\vsize}
266
267\protected\def\page_grd_command_set_hsize
268 {\clf_sethsizecolumnset{\currentpagegrid}
269 \hsize\d_page_grd_column_width
270 \textwidth\d_page_grd_column_width}
271
272\protected\def\page_grd_command_routine
273 {\ifvoid\normalpagebox \else
274 \clf_addtocolumnset{\currentpagegrid}\normalpagebox
275 \fi
276 \page_grd_command_set_vsize
277 \page_grd_command_flush_saved_floats
278 \page_grd_command_set_vsize
279 \ifdim\d_page_grd_gap_height<\lineheight
280 \page_grd_command_flush_page
281 \fi
282 \page_grd_command_set_vsize
283 \clf_flushcolumnsetrest {\currentpagegrid}\normalpagebox
284 \ifvoid\normalpagebox \else
285 \unvbox\normalpagebox
286 \fi}
287
288\installoutputroutine\synchronizepagegrid
289 {\ifvoid\normalpagebox\else
290 \clf_addtocolumnset{\currentpagegrid}\normalpagebox
291 \page_grd_command_set_vsize
292 \clf_flushcolumnsetrest{\currentpagegrid}\normalpagebox
293 \ifvoid\normalpagebox \else
294 \unvbox\normalpagebox
295 \fi
296 \fi}
297
298
299
300\protected\def\page_grd_command_flush_page_column#1
301 {\privatescratchcounter#1\relax
302 \clf_flushcolumnsetcolumn{\currentpagegrid}\privatescratchcounter
303 \anch_mark_column_box\b_page_grd_column\privatescratchcounter
304 \page_marks_synchronize_column\c_page_grd_first_column\c_page_grd_last_column\privatescratchcounter\b_page_grd_column
305 \ifnum\privatescratchcounter>\c_page_grd_n_of_left
306 \advanceby\privatescratchcounter\c_page_grd_n_of_left
307 \page_lines_add_numbers_to_box\b_page_grd_column\privatescratchcounter\c_page_grd_n_of_right\plustwo
308 \else
309 \page_lines_add_numbers_to_box\b_page_grd_column\privatescratchcounter\c_page_grd_n_of_left\plustwo
310 \fi
311 \begingroup
312 \cdef\currentpagegrid{\currentpagegrid:#1}
313 \inheritedpagegridframedbox\currentpagegrid\b_page_grd_column
314 \endgroup}
315
316\protected\def\page_grd_command_flush_page
317 {\deactivatecolor
318 \setbox\b_page_grd_collected\hpack\bgroup
319 \clf_preparecolumnsetflush{\currentpagegrid}
320 \letpagegridparameter\c!region\currentpagegrid
321 \ifcstok{\pagegridparameter\c!direction}\v!reverse
322 \dostepwiserecurse\c_page_grd_last_column\c_page_grd_first_column\minusone
323 {\page_grd_command_flush_page_column{##1}
324 \ifnum##1>\plusone
325 \kern{\namedpagegridparameter{\currentpagegrid:##1}\c!distance}
326 \fi}
327 \else
328 \dostepwiserecurse\c_page_grd_first_column\c_page_grd_last_column\plusone
329 {\page_grd_command_flush_page_column{##1}
330 \ifnum##1<\c_page_grd_last_column
331 \kern{\namedpagegridparameter{\currentpagegrid:##1}\c!distance}
332 \fi}
333 \fi
334 \clf_finishcolumnsetflush{\currentpagegrid}
335 \egroup
336 \page_otr_construct_and_shipout\box\b_page_grd_collected\zerocount
337 \clf_flushcolumnsetareas{\currentpagegrid}\relax
338 \page_grd_command_flush_saved_floats}
339
340
341
342\protected\def\page_grd_command_next_progress
343 {\strut
344 \page_grd_command_flush_all_floats
345 \page_otr_eject_page
346 \ifcase\clf_columnsetnoto\else
347 \expandafter\page_grd_command_next_progress
348 \fi}
349
350\protected\def\page_grd_command_handle_column
351 {\ifcase\clf_columnsetgoto{\currentpagegrid}{\page_breaks_columns_current_option}\relax\else
352 \expandafter\page_grd_command_next_progress
353 \fi}
354
355\installcolumnbreakmethod\s!pagegrid\s!unknown {\page_grd_command_handle_column}
356\installcolumnbreakmethod\s!pagegrid\v!yes {\page_grd_command_handle_column}
357
358\protected\def\page_grd_command_next_page
359 {\ifcase\clf_columnsetgoto{\currentpagegrid}{\v!page}\relax\else
360 \page_grd_command_flush_page
361 \fi}
362
363\protected\def\page_grd_command_next_page_and_inserts
364 {\page_grd_command_flush_all_floats
365 \page_grd_command_next_page}
366
367\let\page_grd_command_flush_all_floats\page_one_command_flush_all_floats
368\let\page_grd_command_package_contents\page_one_command_package_contents
369
370\protected\def\page_grd_command_flush_saved_floats
371 {\ifconditional\c_page_floats_flushing \else
372 \ifconditional\c_page_floats_some_waiting
373 \page_grd_command_flush_saved_floats_indeed
374 \fi
375 \fi}
376
377\protected\def\page_grd_command_flush_saved_floats_indeed
378 {\page_floats_flush\s!text\plusone
379 \clf_checkcolumnset {
380 name {\currentpagegrid}
381 method {\floatmethod}
382 width \wd\floatbox
383 height \ht\floatbox
384 }
385 \ifcase\c_page_grd_reserved_state
386 \page_grd_place_float_here_indeed
387 \page_grd_command_set_vsize
388 \ifconditional\c_page_floats_some_waiting
389 \doubleexpandafter\page_grd_command_flush_saved_floats_indeed
390 \fi
391 \else
392 \page_floats_resave\s!text
393 \fi}
394
395
396
397\protected\def\page_grd_command_flush_floats
398 {\wait\global\c_page_floats_flushing\conditionaltrue
399 \ifconditional\c_page_floats_some_waiting
400 \par
401 \page_grd_command_flush_floats_indeed
402 \fi
403 \global\savednoffloats\zerocount
404 \global\c_page_floats_some_waiting\conditionalfalse
405 \global\c_page_floats_flushing\conditionalfalse}
406
407\def\page_grd_command_flush_floats_indeed
408 {\ifconditional\c_page_floats_some_waiting
409 \ifconditional\c_page_floats_compress_flushed
410 \page_floats_collect\s!text\hsize\d_page_floats_compress_distance
411 \ifcase\nofcollectedfloats
412 \page_floats_get
413
414
415 \else
416 \c_page_floats_center_box\conditionalfalse
417 \global\setbox\floatbox\hbox to \hsize
418 {\hfil
419 \dorecurse\nofcollectedfloats
420 {\ifcase\columndirection
421 \page_floats_flush\s!text\plusone
422 \else
423 \page_floats_flush\s!text{\tointeger{\nofcollectedfloats\recurselevel1}}
424 \fi
425 \ifdim\wd\floatbox>\makeupwidth
426 \hbox to \makeupwidth{\hss\box\floatbox\hss}
427 \else
428 \box\floatbox
429 \fi
430 \ifnum\recurselevel<\nofcollectedfloats
431 \hfil
432 \fi}
433 \hfil}
434 \fi
435 \else
436 \page_floats_get
437 \fi
438 \doplacefloatbox
439 \expandafter\page_grd_command_flush_floats_indeed
440 \fi}
441
442
443
444\protected\def\page_grd_command_check_if_float_fits
445 {\clf_checkcolumnset {
446 name {\currentpagegrid}
447 method {\floatmethod}
448
449
450 box \floatbox
451 }
452 \ifcase\c_page_grd_reserved_state
453 \global\c_page_floats_room\conditionaltrue
454 \else
455 \global\c_page_floats_room\conditionalfalse
456 \fi}
457
458\protected\def\page_grd_place_float_here_indeed
459 {\setbox\floatbox\vpack to \d_page_grd_reserved_height \bgroup
460 \vss
461 \hpack to \d_page_grd_reserved_width \bgroup
462
463 \box\floatbox
464 \hss
465 \egroup
466 \vss
467 \egroup
468 \clf_putincolumnset {
469 name {\currentpagegrid}
470 box \floatbox
471 }}
472
473\def\page_grd_place_float_slot
474 {
475 \ifempty\floatmethod
476 \let\floatmethod\v!here
477 \fi
478
479 \penalty\c_page_otr_eject_penalty
480
481 \setbox\savedfloatbox\box\floatbox
482 \page_grd_command_flush_saved_floats
483 \setbox\floatbox\box\savedfloatbox
484
485 \ifconditional\c_page_floats_some_waiting
486 \page_floats_save\s!text
487 \nonoindentation
488 \else
489 \clf_checkcolumnset {
490 name {\currentpagegrid}
491 method {\floatmethod}
492 \ifempty\floatcolumn \else
493 c \floatcolumn
494 \fi
495 \ifempty\floatrow \else
496 r \floatrow
497 \fi
498 box \floatbox
499 }
500 \ifcase\c_page_grd_reserved_state
501 \page_grd_place_float_here_indeed
502 \else
503 \page_floats_save\s!text
504 \nonoindentation
505 \fi
506 \fi}
507
508\def\page_grd_place_float_fixed
509 {\ifempty\floatcolumn
510 \let\floatmethod\v!here
511 \orelse\ifempty\floatrow
512 \let\floatmethod\v!here
513 \else
514 \let\floatmethod\v!fixed
515 \fi
516 \page_grd_place_float_slot}
517
518\def\page_grd_place_float_force
519 {
520 \penalty\c_page_otr_eject_penalty
521 \clf_checkcolumnset {
522 name {\currentpagegrid}
523 method {\floatmethod}
524 box \floatbox
525 }
526 \ifcase\c_page_grd_reserved_state
527 \page_grd_place_float_here_indeed
528 \else
529 \page_floats_save\s!text
530 \nonoindentation
531 \fi}
532
533\def\page_grd_place_float_page {\page_grd_place_float_slot}
534
535\def\page_grd_place_float_here {\let\floatmethod\v!here\page_grd_place_float_slot}
536\def\page_grd_place_float_top {\page_grd_place_float_slot}
537\def\page_grd_place_float_bottom{\page_grd_place_float_slot}
538
539\installfloatmethod \s!pagegrid \v!here \page_grd_place_float_here
540\installfloatmethod \s!pagegrid \v!force \page_grd_place_float_force
541
542
543
544\installfloatmethod \s!pagegrid \v!top \page_grd_place_float_top
545\installfloatmethod \s!pagegrid \v!bottom \page_grd_place_float_bottom
546
547
548
549\installfloatmethod \s!pagegrid \v!page \page_grd_place_float_page
550
551
552
553
554
555
556
557
558
559
560
561
562\installfloatmethod \s!pagegrid \s!tblr \page_grd_place_float_slot
563\installfloatmethod \s!pagegrid \s!lrtb \page_grd_place_float_slot
564\installfloatmethod \s!pagegrid \s!tbrl \page_grd_place_float_slot
565\installfloatmethod \s!pagegrid \s!rltb \page_grd_place_float_slot
566\installfloatmethod \s!pagegrid \s!fxtb \page_grd_place_float_slot
567\installfloatmethod \s!pagegrid \s!btlr \page_grd_place_float_slot
568\installfloatmethod \s!pagegrid \s!lrbt \page_grd_place_float_slot
569\installfloatmethod \s!pagegrid \s!btrl \page_grd_place_float_slot
570\installfloatmethod \s!pagegrid \s!rlbt \page_grd_place_float_slot
571\installfloatmethod \s!pagegrid \s!fxbt \page_grd_place_float_slot
572\installfloatmethod \s!pagegrid \s!fixd \page_grd_place_float_fixed
573
574\protected\def\page_grd_command_side_float_output
575 {}
576
577\protected\def\page_grd_command_flush_side_floats
578 {\page_sides_forget_floats}
579
580\protected\def\page_grd_command_synchronize_side_floats
581 {\page_sides_forget_floats}
582
583\protected\def\page_grd_command_synchronize_hsize
584 {\page_grd_command_set_hsize}
585
586\protected\def\page_grd_command_flush_all_floats
587 {\page_one_command_flush_all_floats}
588
589\defineoutputroutine
590 [\s!pagegrid]
591 [\s!page_otr_command_routine =\page_grd_command_routine,
592 \s!page_otr_command_package_contents =\page_grd_command_package_contents,
593 \s!page_otr_command_set_vsize =\page_grd_command_set_vsize,
594 \s!page_otr_command_set_hsize =\page_grd_command_set_hsize,
595 \s!page_otr_command_synchronize_hsize =\page_grd_command_synchronize_hsize,
596 \s!page_otr_command_next_page =\page_grd_command_next_page,
597 \s!page_otr_command_next_page_and_inserts =\page_grd_command_next_page_and_inserts,
598
599
600
601
602 \s!page_otr_command_check_if_float_fits =\page_grd_command_check_if_float_fits,
603
604
605 \s!page_otr_command_synchronize_side_floats=\page_grd_command_synchronize_side_floats,
606 \s!page_otr_command_side_float_output =\page_grd_command_side_float_output,
607 \s!page_otr_command_flush_floats =\page_grd_command_flush_floats,
608 \s!page_otr_command_flush_side_floats =\page_grd_command_flush_side_floats,
609 \s!page_otr_command_flush_saved_floats =\page_grd_command_flush_saved_floats,
610 \s!page_otr_command_flush_all_floats =\page_grd_command_flush_all_floats,
611
612 ]
613
614
615
616\installcorenamespace{pagegridspan}
617
618\installframedcommandhandler \??pagegridspan {pagegridspan} \??pagegridspan
619
620\setuppagegridspan
621 [\c!frame=\v!off,
622 \c!before=,
623 \c!after=,
624 \c!offset=\v!overlay,
625 \c!location=\v!left,
626 \c!linecorrection=\v!off,
627 \c!depthcorrection=\v!off,
628 \c!n=\plustwo,
629 \c!nlines=\zerocount,
630 \c!align=\v!normal,
631 \c!width=\d_page_grd_span_width,
632 \c!indenting=,
633 \c!indentnext=\v!yes,
634 \c!default=\v!here,
635 \c!alternative=\v!a]
636
637\newdimension\d_page_grd_span_width
638
639\let\page_grd_span_stop\relax
640
641\permanent\tolerant\protected\def\startpagegridspan[#1]#*[#2]#*[#3]
642 {\endgraf
643 \synchronizepagegrid
644 \bgroup
645 \forgetall
646 \cdef\currentpagegridspan{#1}
647 \clf_sethsizecolumnspan{\currentpagegrid}\pagegridspanparameter\c!n\relax
648 \setbox\scratchbox\hbox\bgroup\inheritedpagegridspanframed\bgroup
649 \def\page_grd_span_stop{\page_grd_span_stop_indeed{#2}}
650 \usepagegridspanstyleandcolor\c!style\c!color
651 \pagegridspanparameter\c!before
652 \ignorespaces}
653
654\protected\def\page_grd_span_stop_indeed#1
655 {\removeunwantedspaces
656 \par
657 \verticalstrut
658 \kern2\struttotal
659 \verticalstrut
660 \endgraf
661 \pagegridspanparameter\c!after
662 \egroup\egroup
663 \setpagegrid[#1]{\box\scratchbox}
664
665 \egroup
666 \endgraf}
667
668\permanent\protected\def\stoppagegridspan
669 {\page_grd_span_stop}
670
671\permanent\def\pagegridspanwidth#1
672 {\todimension{#1\d_page_grd_column_width#1\d_page_grd_distance\d_page_grd_distance}}
673
674
675
676\installcorenamespace{pagegridarea}
677
678\installframedcommandhandler \??pagegridarea {pagegridarea} \??pagegridarea
679
680\setuppagegridarea
681 [\c!x=\plusone,
682 \c!y=\plusone,
683 \c!nx=\plusone,
684 \c!ny=\plusone,
685 \c!clipoffset=2\lineheight,
686 \c!leftoffset=\zeropoint,
687 \c!rightoffset=\zeropoint,
688 \c!offset=\v!overlay,
689 \c!strut=\v!no,
690 \c!frame=\v!off,
691
692 \c!align=\v!normal,
693 \c!page=\plusone,
694 \c!state=\v!stop]
695
696
697
698
699\appendtoks
700
701
702
703
704
705
706 \clf_registercolumnsetarea {
707 name {\currentpagegridarea}
708
709
710 state {\pagegridareaparameter\c!state}
711 c {\pagegridareaparameter\c!x}
712 r {\pagegridareaparameter\c!y}
713 nc {\pagegridareaparameter\c!nx}
714 nr {\pagegridareaparameter\c!ny}
715 }
716\to \everydefinepagegridarea
717
718\permanent\tolerant\protected\def\setuppagegridareatext[#1]#*[#2]
719 {\cdef\currentpagegridarea{#1}
720 \setpagegridareaparameter\c!text{#2}}
721
722
723
724\permanent\protected\def\page_grd_set_area#1#2#3#4#5#6#7#8
725 {\begingroup
726 \cdef\currentpagegridarea{#2}
727 \setpagegridareaparameter\c!width {#5\scaledpoint}
728 \setpagegridareaparameter\c!height{#6\scaledpoint}
729 \setbox\nextbox\hpack\bgroup\inheritedpagegridareaframed\bgroup
730 \usepagegridareastyleandcolor\c!style\c!color
731 \ignorespaces
732 \pagegridareaparameter\c!text
733 \egroup\egroup
734
735 \scratchdimen#8\scaledpoint
736 \ifdim\scratchdimen>\zeropoint
737 \setbox\scratchbox\vbox\bgroup
738 \clip
739 [ \c!offset=\pagegridareaparameter\c!clipoffset,
740 \c!rightoffset=\pagegridareaparameter\c!rightoffset,
741 \c!width=\scratchdimen,
742
743 ]
744 {\copy\nextbox}
745 \egroup
746 \clf_setcolumnsetarea{name {#1} box \scratchbox c #3 r #4}
747 \setbox\scratchbox\vbox\bgroup
748 \hskip\layoutparameter\c!backspace
749 \clip
750 [ \c!offset=\pagegridareaparameter\c!clipoffset,
751 \c!leftoffset=\pagegridareaparameter\c!rightoffset,
752 \c!hoffset=\scratchdimen,
753 \c!width=\dimexpr\wd\nextbox\scratchdimen\relax,
754
755 ]
756 {\box\nextbox}
757 \egroup
758 \clf_setcolumnsetarea{name {#1} box \scratchbox c #7 r #4}
759 \else
760 \setbox\scratchbox\vbox\bgroup
761 \box\nextbox
762 \egroup
763 \clf_setcolumnsetarea{name {#1} box \scratchbox c #3 r #4}
764 \fi
765 \endgroup}
766
767
768
769
770
771\aliased\let\definecolumnset \definepagegrid
772\aliased\let\setupcolumnset \setuppagegrid
773\aliased\let\setupcolumnsetlines \setuppagegridlines
774\aliased\let\setupcolumnsetstart \setuppagegridstart
775\aliased\let\startcolumnset \startpagegrid
776\aliased\let\stopcolumnset \stoppagegrid
777\aliased\let\definecolumnsetspan \definepagegridspan
778\aliased\let\setupcolumnsetspan \setuppagegridspan
779\aliased\let\startcolumnsetspan \startpagegridspan
780\aliased\let\stopcolumnsetspan \stoppagegridspan
781\aliased\let\columnsetspanwidth \pagegridspanwidth
782\aliased\let\definecolumnsetarea \definepagegridarea
783\aliased\let\setupcolumnsetarea \setuppagegridarea
784\aliased\let\setupcolumnsetareatext\setuppagegridareatext
785
786
787
788\protect \endinput
789 |