1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Page Macros Float Management}
15
16
17
18
19\registerctxluafile{pageflt}{}
20
21\unprotect
22
23\defineinsertion[\s!topfloat]
24\defineinsertion[\s!bottomfloat]
25\defineinsertion[\s!pagefloat]
26
27\newdimen \d_page_floats_inserted_bottom
28\newdimen \d_page_floats_inserted_top
29\newdimen \d_page_floats_inserted_page
30\newcount \c_page_floats_n_of_top \c_page_floats_n_of_top \plustwo
31\newcount \c_page_floats_n_of_bottom \c_page_floats_n_of_bottom\zerocount
32\newcount \c_page_floats_n_of_page \c_page_floats_n_of_page \plustwo
33
34\newconstant\c_page_floats_insertions_topskip_mode
35
36
37
38
39
40\def\page_floats_report_total
41 {\showmessage\m!floatblocks4
42 {\the\totalnoffloats
43 \ifx\floatlocationmethod\empty
44 \ifx\floatlocation\empty\else,\floatlocation\fi
45 \else
46 ,\floatlocationmethod
47 \fi}}
48
49\def\page_floats_report_flushed
50 {\showmessage\m!floatblocks3
51 {\the\numexpr\totalnoffloats\savednoffloats\relax}}
52
53
54
55\newconditional\c_page_floats_room
56\newconditional\c_page_floats_some_waiting
57\newconditional\c_page_floats_not_permitted
58\newconditional\c_page_floats_flushing
59\newconditional\c_page_floats_center_box \settrue\c_page_floats_center_box
60\newconditional\c_page_floats_center_box_local
61\newconditional\c_page_floats_center_box_global
62\newconditional\c_page_floats_compress_flushed \settrue\c_page_floats_compress_flushed
63
64\newdimen \d_page_floats_compress_distance
65
66
67
68\newcount\totalnoffloats
69\newcount\savednoffloats
70\newcount\nofcollectedfloats
71\newdimen\maxcollectedfloatstotal
72
73\newcount\noffloatinserts
74
75\newbox \floattext
76
77\newdimen\floatwidth
78\newdimen\floatheight
79\newdimen\floatdepth
80\newdimen\floattextwidth
81\newdimen\floattextheight
82
83\newbox \floatbox
84\newbox \savedfloatbox
85
86
87
88
89
90
91\newtoks \everyfloatscheck
92
93\appendtoks
94 \ifcase\savednoffloats
95 \global\setfalse\c_page_floats_some_waiting
96 \else
97 \global\settrue\c_page_floats_some_waiting
98 \fi
99\to \everyfloatscheck
100
101\unexpanded\def\page_floats_flush#1#2
102 {\clf_flushfloat{#1}#2\relax
103 \the\everyfloatscheck}
104
105\unexpanded\def\page_floats_flush_by_label#1#2
106 {\clf_flushlabeledfloat{#1}{#2}\relax
107 \the\everyfloatscheck}
108
109\unexpanded\def\page_floats_save#1
110 {\clf_savefloat{#1}\relax
111 \the\everyfloatscheck}
112
113\unexpanded\def\page_floats_resave#1
114 {\clf_resavefloat{#1}\relax
115 \the\everyfloatscheck}
116
117\unexpanded\def\page_floats_push_saved
118 {\clf_pushfloat
119 \the\everyfloatscheck}
120
121\unexpanded\def\page_floats_pop_saved
122 {\clf_popfloat
123 \the\everyfloatscheck}
124
125\unexpanded\def\page_floats_get_info#1
126 {\clf_consultfloat{#1}}
127
128\unexpanded\def\page_floats_if_else#1
129 {\clf_doifelsestackedfloats{#1}}
130
131\unexpanded\def\page_floats_collect#1#2#3
132 {\clf_collectfloat{#1}\dimexpr#2\relax\dimexpr#3\relax}
133
134\def\nofstackedfloatsincategory#1
135 {\clf_nofstackedfloats{#1}}
136
137\let\page_floats_column_push_saved\page_floats_push_saved
138\let\page_floats_column_pop_saved \page_floats_pop_saved
139
140\unexpanded\def\page_floats_save_page_float#1#2
141 {\clf_savespecificfloat{#1}{specification{#2}}\relax}
142
143\unexpanded\def\page_floats_save_somewhere_float#1#2
144 {\clf_savespecificfloat{#1}{specification{#2}label{\floatlabel}}\relax}
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163\unexpanded\def\placenamedfloat
164 {\dodoubleargument\page_floats_place_named}
165
166\def\page_floats_place_named[#1][#2]
167 {\doloop
168 {\page_floats_flush_by_label\s!somewhere{#2}
169 \ifvoid\floatbox
170 \exitloop
171 \else
172 \def\currentfloat{#1}
173 \blank[\rootfloatparameter\c!spacebefore]
174 \box\floatbox
175 \blank[\rootfloatparameter\c!spaceafter]
176 \fi}}
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192\unexpanded\def\placefloatwithsetups
193 {\dotripleempty\page_floats_place_with_setups}
194
195\def\page_floats_place_with_setups[#1][#2][#3]#4
196 {\def\floatsetupcaption {#4}
197 \def\floatsetupcontent {\copy\nextbox}
198 \def\floatsetupwidth {\wd\nextbox}
199 \def\floatsetupheight {\ht\nextbox}
200 \def\placesetupfloat[##1]{\placefloat[##1][#2][#3]{#4}{\floatsetupcontent}}
201 \dowithnextbox{\setups[#1]}\vbox}
202
203
204
205
206
207
208\def\page_floats_get_used_hsize{\hsize}
209
210\unexpanded\def\page_floats_get
211 {\ifconditional\c_page_floats_some_waiting
212 \page_floats_flush\s!text\plusone
213 \ifconditional\c_page_floats_center_box
214 \ifdim\wd\globalscratchbox<\page_floats_get_used_hsize
215 \global\setbox\floatbox\hpack to \page_floats_get_used_hsize{\hss\box\floatbox\hss}
216 \else
217
218 \ifinsidecolumns
219 \ifdim\wd\floatbox>\makeupwidth
220 \wd\floatbox\makeupwidth
221 \fi
222 \fi
223 \fi
224 \fi
225 \else
226 \global\savednoffloats\zerocount
227 \global\setbox\floatbox\emptybox
228 \fi}
229
230\unexpanded\def\page_floats_flush_saved
231 {\doloop
232 {\ifconditional\c_page_floats_some_waiting
233 \page_otr_command_check_if_float_fits
234 \ifconditional\c_page_floats_room
235 \page_floats_get
236 \doplacefloatbox
237 \else
238 \exitloop
239 \fi
240 \else
241
242
243
244 \exitloop
245
246 \fi}}
247
248
249
250
251
252
253
254
255
256
257\unexpanded\def\placefloatplaceholder
258 {\ifconditional\c_page_floats_room \else
259 \ifdim\dimexpr\pagegoal\pagetotal3\lineheight\relax>\zeropoint
260 \startlinecorrection[blank]
261 \mhbox{\inframed{\labeltexts{placeholder}{\lastcaptiontag}}}
262 \stoplinecorrection
263 \else
264 \allowbreak
265 \fi
266 \fi}
267
268\setuplabeltext
269 [placeholder={\Word{\lastplacedfloat}, moved}]
270
271
272
273\newtoks\everybeforeflushedpagefloat
274
275\def\page_floats_flush_page_floats_indeed#1
276 {\page_floats_flush{#1}\plusone
277 \edef\floatspecification{\clf_getfloatvariable{specification}}
278 \the\everybeforeflushedpagefloat
279 \vpack to \textheight
280 {\doifnotinset\v!high\floatspecification\vfill
281 \box\floatbox
282 \doifnotinset\v!low\floatspecification\vfill}
283 \page_otr_fill_and_eject_page}
284
285\let\m_page_otr_checked_page_float\relax
286
287\unexpanded\def\page_floats_flush_page_floats
288 {\edef\m_page_otr_checked_page_float{\clf_checkedpagefloat}
289 \ifx\m_page_otr_checked_page_float\empty
290
291 \else\ifx\m_page_otr_checked_page_float\v!empty
292 \emptyhbox \page_otr_fill_and_eject_page
293 \else
294 \page_floats_flush_page_floats_indeed\m_page_otr_checked_page_float
295 \fi\fi}
296
297
298
299
300
301
302
303
304\appendtoks
305 \global\setbox\savedfloatbox\box\floatbox
306\to \everybeforeoutput
307
308\appendtoks
309 \global\setbox\floatbox\box\savedfloatbox
310\to \everyafteroutput
311
312\protect \endinput
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 |