1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20\writestatus{loading}{ConTeXt Page Macros Page Selection}
21
22\unprotect
23
24\registerctxluafile{pagesel}{autosuffix}
25
26\startcontextdefinitioncode
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55\installcorenamespace{withpages}
56
57\installsetuponlycommandhandler \??withpages {withpages}
58
59
60\newinteger\c_page_selectors_n
61
62\permanent\tolerant\protected\def\insertpages[#filename]#spacer[#emptylist]#spacer[#S#settings]
63 {\doifelseassignment{#emptylist}
64 {\page_selectors_insert_indeed[#filename][][#emptylist]}
65 {\page_selectors_insert_indeed[#filename][#emptylist][#settings]}}
66
67\def\page_selectors_insert_indeed[#filename][#emptylist][#S#settings]
68 {\bgroup
69 \dontcomplain
70 \getfiguredimensions[#filename]
71 \setupcurrentwithpages
72 [\c!width=\zeropoint,
73 \c!n=\noffigurepages,
74 \c!category=,
75 \c!alternative=\v!a,
76 #settings]
77 \global\c_page_selectors_n\directwithpagesparameter\c!n\relax
78 \scratchwidth\directwithpagesparameter\c!width\relax
79 \ifinset{0}{#emptylist}
80 \emptyhbox
81 \page
82 \fi
83 \dorecurse\c_page_selectors_n
84 {\page_selectors_filter_alternative{#filename}\recurselevel
85 \ifinset{\recurselevel}{#emptylist}
86 \emptyhbox
87 \page
88 \fi}
89 \egroup}
90
91\let\page_selectors_filter_step_indeed\gobbleoneargument
92\let\page_selectors_filter_step \gobbleoneargument
93
94\installcorenamespace{filterpagesalternative}
95
96\protected\def\page_selectors_filter_alternative
97 {\expandnamespaceparameter
98 \??filterpagesalternative
99 \directwithpagesparameter\c!alternative
100 \v!a}
101
102\permanent\tolerant\protected\def\filterpages[#filename]#spacer[#selection]#spacer[#S#settings]
103 {\doifelseassignment{#selection}
104 {\page_selectors_filter_indeed[#filename][][#selection]}
105 {\page_selectors_filter_indeed[#filename][#selection][#settings]}}
106
107\def\page_selectors_filter_indeed[#filename][#selection][#S#settings]
108 {\bgroup
109 \dontcomplain
110 \getfiguredimensions[#filename]
111 \setupcurrentwithpages
112 [\c!width=\zeropoint,
113 \c!n=\noffigurepages,
114 \c!category=,
115 \c!alternative=\v!a,
116 #settings]
117 \global\c_page_selectors_n\directwithpagesparameter\c!n\relax
118 \scratchwidth\directwithpagesparameter\c!width\relax
119 \edef\p_selection{#selection}
120 \ifempty\p_selection
121 \let\p_selection\v!all
122 \fi
123 \ifx\p_selection\v!all
124 \dorecurse\c_page_selectors_n
125 {\page_selectors_filter_alternative{#filename}\recurselevel}
126 \orelse\ifx\p_selection\v!even
127 \dorecurse\c_page_selectors_n
128 {\ifodd\recurselevel\else
129 \page_selectors_filter_alternative{#filename}\recurselevel
130 \fi}
131 \orelse\ifx\p_selection\v!odd
132 \dorecurse\c_page_selectors_n
133 {\ifodd\recurselevel\relax
134 \page_selectors_filter_alternative{#filename}\recurselevel
135 \fi}
136 \else
137 \def\page_selectors_filter_step_indeed#page
138 {\ifnum#page>\c_page_selectors_n\else
139 \page_selectors_filter_alternative{#filename}{#page}
140 \fi}
141 \def\page_selectors_filter_step#step
142 {\dowithminmaxrange{1}{\noffigurepages}{#step}\page_selectors_filter_step_indeed}
143 \processcommacommand[\p_selection]\page_selectors_filter_step
144 \fi
145 \egroup}
146
147\defcsname\??filterpagesalternative\v!a\endcsname#filename#page
148 {\hpack to \textwidth
149 {\ifdim\scratchwidth>\zeropoint
150 \rightorleftpageaction{\scratchwidth\zeropoint}{\hfill}
151 \fi
152 \setbox\scratchbox\hpack
153 {\hskip\scratchwidth
154 \edef\p_category{\directwithpagesparameter\c!category}
155 \ifx\p_category\empty
156 \externalfigure[#filename][\c!page=#page,\c!height=\textheight]
157 \else
158 \externalfigure[#filename][\p_category][\c!page=#page]
159 \fi
160 \hss}
161 \wd\scratchbox\zeropoint
162 \box\scratchbox}
163 \page}
164
165\defcsname\??filterpagesalternative\v!b\endcsname#filename#page
166 {\startTEXpage
167 \externalfigure[#filename][\c!page=#page]
168 \stopTEXpage}
169
170\letcsname\??filterpagesalternative\v!default\expandafter\endcsname\csname\??filterpagesalternative\v!a\endcsname
171\letcsname\??filterpagesalternative\v!page \expandafter\endcsname\csname\??filterpagesalternative\v!b\endcsname
172
173\permanent\tolerant\protected\def\copypages[#filename]#spacer[#S#settings]#spacer[#S#figuresettings]
174 {\bgroup
175 \getfiguredimensions[#filename]
176 \setupcurrentwithpages
177 [\c!marking=\v!off,
178 \c!offset=\zeropoint,
179 \c!n=\noffigurepages,
180 \c!category=,
181 #settings]
182 \global\c_page_selectors_n\directwithpagesparameter\c!n\relax
183 \scratchoffset\directwithpagesparameter\c!offset\relax
184 \dorecurse\c_page_selectors_n
185 {\vbox to \textheight
186 {\hsize\textwidth
187 \centeredbox
188 {\ifcstok{\directwithpagesparameter\c!marking}\v!on
189 \expandafter\cuthbox
190 \else
191 \expandafter\hpack
192 \fi
193 {\ifdim\scratchoffset>\zeropoint\relax
194 \advanceby\vsize 2\scratchoffset
195 \advanceby\hsize 2\scratchoffset
196 \externalfigure[#filename][\c!page=\recurselevel,#figuresettings,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]
197 \else
198 \externalfigure[#filename][\c!page=\recurselevel,#figuresettings,\c!offset=\v!overlay]
199 \fi}}}
200 \page}
201 \egroup}
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229\installcorenamespace{combinepagesalternative}
230
231\permanent\tolerant\protected\def\combinepages[#filename]#spacer[#S#settings]
232 {\bgroup
233 \dontcomplain
234 \getfiguredimensions[#filename]
235 \setupcurrentwithpages
236 [\c!alternative=\v!a,
237 \c!n=\noffigurepages,\c!nx=\plustwo,\c!ny=\plustwo,
238 \c!start=\plusone,\c!stop=\maxcard,
239 \c!distance=\bodyfontsize,
240 \c!bottom=\vfill,\c!top=\vss,\c!left=\hss,\c!right=\hss,
241 \c!before=\page,\c!after=\page,\c!inbetween=\blank,
242 \c!frame=,\c!background=,\c!backgroundcolor=,
243 \c!name={#filename},
244 \c!category=,
245 #settings]
246 \global\c_page_selectors_n\directwithpagesparameter\c!n\relax
247 \directwithpagesparameter\c!before
248 \scratchnx\directwithpagesparameter\c!nx
249 \scratchny\directwithpagesparameter\c!ny
250 \scratchdistance\directwithpagesparameter\c!distance\relax
251 \scratchwidth\dimexpr(\textwidth\scratchnx\scratchdistance\scratchdistance)\scratchnx\relax
252 \scratchheight\dimexpr(\textheight\scratchny\scratchdistance\scratchdistance)\scratchny\relax
253 \expandnamespaceparameter\??combinepagesalternative\directwithpagesparameter\c!alternative\v!b
254 \directwithpagesparameter\c!after
255 \egroup}
256
257\defcsname\??combinepagesalternative\v!a\endcsname
258 {\global\combinedpagescounter\directwithpagesparameter\c!start\relax
259 \doloop
260 {\vbox to \textheight
261 {\dorecurse\scratchny
262 {\hbox to \textwidth
263 {\dorecurse\scratchnx
264 {\vbox to \scratchheight
265 {\hsize\scratchwidth
266 \vsize\scratchheight
267 \directwithpagesparameter\c!top
268 \hbox to \hsize
269 {\directwithpagesparameter\c!left
270 \ifnum\combinedpagescounter>\directwithpagesparameter\c!stop\relax
271 \global\c_page_selectors_n\zerocount
272 \orelse\ifnum\combinedpagescounter>\c_page_selectors_n \else
273 \externalfigure
274 [\directwithpagesparameter\c!name]
275 [\c!object=\v!no,
276 \c!page=\number\combinedpagescounter,
277 \c!factor=\v!max,
278 \c!background=\directwithpagesparameter\c!background,
279 \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor,
280 \c!frame=\directwithpagesparameter\c!frame]
281 \fi
282 \directwithpagesparameter\c!right}
283 \directwithpagesparameter\c!bottom}
284 \global\advanceby\combinedpagescounter\plusone
285 \hfil}
286 \hfilneg}
287 \vfil}
288 \vfilneg}
289 \page
290 \ifnum\combinedpagescounter>\c_page_selectors_n
291 \exitloop
292 \fi}}
293
294\defcsname\??combinepagesalternative\v!c\endcsname
295 {\global\combinedpagescounter\directwithpagesparameter\c!start\relax
296 \doloop
297 {\vbox to \textheight
298 {\hbox to \textwidth
299 {\dorecurse\scratchnx
300 {\directwithpagesparameter\c!left
301 \vbox to \textheight
302 {\hsize\scratchwidth
303 \dorecurse\scratchny
304 {\directwithpagesparameter\c!top
305 \hbox to \hsize
306 {\vbox to \scratchheight
307 {\hsize\scratchwidth
308 \vsize\scratchheight
309 \ifnum\combinedpagescounter>\directwithpagesparameter\c!stop\relax
310 \global\c_page_selectors_n\zerocount
311 \orunless\ifnum\combinedpagescounter>\c_page_selectors_n
312 \externalfigure
313 [\directwithpagesparameter\c!name]
314 [\c!object=\v!no,
315 \c!page=\number\combinedpagescounter,
316 \c!factor=\v!max,
317 \c!background=\directwithpagesparameter\c!background,
318 \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor,
319 \c!frame=\directwithpagesparameter\c!frame]
320 \fi}}
321 \global\advanceby\combinedpagescounter\plusone
322 \directwithpagesparameter\c!bottom}}
323 \hfil}
324 \hfilneg}}
325 \page
326 \ifnum\combinedpagescounter>\c_page_selectors_n
327 \exitloop
328 \fi}}
329
330\letcsname\??combinepagesalternative\v!horizontal\expandafter\endcsname\csname\??combinepagesalternative\v!a\endcsname
331\letcsname\??combinepagesalternative\v!vertical \expandafter\endcsname\csname\??combinepagesalternative\v!c\endcsname
332
333\defcsname\??combinepagesalternative\v!b\endcsname
334 {\global\combinedpagescounter\directwithpagesparameter\c!start\relax
335 \doloop
336 {\startbaselinecorrection
337 \hbox to \textwidth
338 {\dorecurse\scratchnx
339 {\global\advanceby\combinedpagescounter\plusone
340 \ifnum\combinedpagescounter>\c_page_selectors_n \else
341 \normalexpanded{\externalfigure
342 [\directwithpagesparameter\c!name]
343 [\c!page=\number\combinedpagescounter,
344 \c!width=\the\scratchwidth,
345 \c!background=\directwithpagesparameter\c!background,
346 \c!backgroundcolor=\directwithpagesparameter\c!backgroundcolor,
347 \c!frame=\directwithpagesparameter\c!frame]}
348 \hfill
349 \fi}
350 \hfillneg}
351 \stopbaselinecorrection
352 \ifnum\combinedpagescounter<\c_page_selectors_n\relax
353 \directwithpagesparameter\c!inbetween
354 \else
355 \exitloop
356 \fi}}
357
358
359
360\permanent\tolerant\protected\def\slicepages[#filename]#spacer[#S#oddsettings]#spacer[#S#evensettings]
361 {\ifparameter#evensettings\or
362 \page_selectors_slice_indeed[#filename][#oddsettings][#evensettings]
363 \else
364 \page_selectors_slice_indeed[#filename][#oddsettings][#oddsettings]
365 \fi}
366
367\mutable\let\slicedpagenumber\!!zerocount
368\mutable\let\slicedpagestepx \!!zerocount
369\mutable\let\slicedpagestepy \!!zerocount
370
371\def\page_selectors_slice_indeed[#filename][#S#oddsettings][#S#evensettings]
372 {\bgroup
373 \dontcomplain
374 \glet\slicedpagenumber\!!zerocount
375 \getfiguredimensions[#filename]
376 \setupcurrentwithpages
377 [\c!offset=\zeropoint,
378 \c!hoffset=\zeropoint,
379 \c!voffset=\zeropoint,
380 \c!width=\figurewidth,
381 \c!height=\figureheight,
382 \c!n=\noffigurepages,
383 \c!category=,
384 #oddsettings]
385 \global\c_page_selectors_n\directwithpagesparameter\c!n\relax
386 \ifnum\c_page_selectors_n>\zerocount
387 \definepapersize
388 [\s!dummy]
389 [\c!height=\directwithpagesparameter\c!height,
390 \c!width=\directwithpagesparameter\c!width]
391 \setuppapersize
392 [\s!dummy]
393 [\s!dummy]
394 \setuplayout
395 [\c!backspace=\zeropoint,\c!topspace=\zeropoint,
396 \c!height=\v!middle,\c!width=\v!middle,
397 \c!textdistance=\zeropoint,
398 \c!header=\zeropoint,\c!footer=\zeropoint]
399 \fi
400 \dorecurse\noffigurepages
401 {\glet\slicedpagenumber\recurselevel
402 \ifnum\c_page_selectors_n>\plusone
403 \dorecurse\c_page_selectors_n
404 {\let\slicedpagestepx\recurselevel
405 \dorecurse\c_page_selectors_n
406 {\let\slicedpagestepy\recurselevel
407 \clip
408 [\c!nx=\c_page_selectors_n,\c!ny=\c_page_selectors_n,\c!x=\slicedpagestepx,\c!y=\slicedpagestepy]
409 {\scale
410 [\c!scale=\the\c_page_selectors_n000]
411 {\externalfigure[#filename][\c!page=\slicedpagenumber]}}
412 \page}}
413 \else
414 \ifodd\slicedpagenumber\relax
415 \setupcurrentwithpages[#oddsettings]
416 \else
417 \setupcurrentwithpages[#evensettings]
418 \fi
419 \hskip\directwithpagesparameter\c!offset\relax
420 \clip
421 [\c!hoffset=\directwithpagesparameter\c!hoffset,\c!voffset=\directwithpagesparameter\c!voffset,
422 \c!height=\directwithpagesparameter\c!height,\c!width=\directwithpagesparameter\c!width]
423 {\externalfigure[#filename][\c!page=\slicedpagenumber]}
424 \page
425 \fi}
426 \egroup}
427
428
429
430\permanent\protected\def\trimpages[#S#1]
431 {\begingroup
432 \getdummyparameters
433 [\c!file=dummy,
434 \c!hoffset=\zeropoint,
435 \c!voffset=\zeropoint,
436 \c!width=17cm,
437 \c!height=24cm,
438 \c!x=\zeropoint,
439 \c!y=\zeropoint,
440 #1]
441 \getfiguredimensions
442 [\dummyparameter\c!file]
443 [\c!object=\v!no]
444 \dorecurse\noffigurepages
445 {\scale
446 [\c!width=\paperwidth,
447 \c!height=\paperheight]
448 {\offset
449 [\c!x=\dummyparameter\c!x,
450 \c!y=\dummyparameter\c!y]
451 {\clip
452 [\c!hoffset=\dummyparameter\c!hoffset,
453 \c!voffset=\dummyparameter\c!voffset,
454 \c!width=\dummyparameter\c!width,
455 \c!height=\dummyparameter\c!height]
456 {
457 \setbox\nextbox\hbox
458 {\externalfigure[\dummyparameter\c!file][\c!page=##1]}
459 \ifdim\wd\nextbox>\ht\nextbox
460 \rotate[\c!rotation=90]{\box\nextbox}
461 \else
462 \box\nextbox
463 \fi}}}}
464 \endgroup}
465
466\stopcontextdefinitioncode
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502\protect \endinput
503 |