page-spr.mkxl /size: 3643 b    last modification: 2023-12-21 09:44
1%D \module
2%D   [       file=page-spr,
3%D        version=2002.11.11,
4%D          title=\CONTEXT\ Page Macros,
5%D       subtitle=Spreading,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Page Macros / Spreading}
15
16% This module is experimental and not yet official!
17
18\unprotect
19
20\newbox        \b_page_spread_content
21\newconditional\c_page_spread_busy
22\newconditional\c_page_spread_once     % when true only one flush (writes etc)
23
24\permanent\overloaded\protected\def\normalsettextpagecontent#1#2#3% #2 and #3 will disappear
25  {\setbox#1\hpack
26     {\setlayoutcomponentattribute{\v!page:\v!text}%
27      \vpack \layoutcomponentboxattribute to \textheight
28        {\offinterlineskip
29         \freezetextwidth
30         \hsize\textwidth   % local variant of \sethsize
31         \boxmaxdepth\maxdepth
32         \page_otr_flush_top_content
33         \noindent          % content can be < \hsize
34         \page_otr_command_package_contents#2#3}}%
35   \dp#1\zeropoint
36   \ifconditional\c_page_spread_busy
37      \normalsettextpagecontent_spread{#1}%
38   \else
39      \normalsettextpagecontent_normal{#1}%
40   \fi}
41
42\def\normalsettextpagecontent_normal#1%
43  {\ifdim\wd#1=\makeupwidth\else
44     \setbox#1\hpack to \makeupwidth
45       {\hss\box#1\hss}% never change the \hss's
46   \fi}
47
48\def\normalsettextpagecontent_spread#1%
49  {\setbox#1\hpack to \makeupwidth
50     {\ifvoid\b_page_spread_content
51        \ifconditional\c_page_spread_once
52          \box#1%
53        \else
54          \global\setbox\b_page_spread_content\box#1%
55          \copy\b_page_spread_content
56        \fi
57        \hss % left page
58      \else
59        \hss % right page
60        \ifarrangingpages
61          % writes don't matter anyway
62        \orelse\ifconditional\c_page_spread_once
63          \global\setbox\b_page_spread_content\emptyhbox
64          \wd\b_page_spread_content\makeupwidth
65          \ht\b_page_spread_content\textheight
66        \else
67          % writes can interfere (todo: write stripper, but how about hyperlinks)
68        \fi
69        \box\b_page_spread_content
70      \fi}}
71
72\protected\def\page_spread_flush
73  {\ifconditional\c_page_spread_busy \ifvoid\b_page_spread_content\else
74     % this page will be discarded later
75     \emptyhbox \page
76   \fi \fi }
77
78\permanent\protected\def\startspread
79  {\unless\ifdoublesided
80     \expandafter\page_spread_start_nop
81   \orelse\ifconditional\c_page_spread_busy
82     \expandafter\page_spread_start_nop
83   \else
84     \expandafter\page_spread_start_yes
85   \fi}
86
87\aliased\let\stopspread\relax
88
89\protected\def\page_spread_start_yes
90  {\bgroup
91   \page[\v!left]%
92  %\setsystemmode{spread}%
93   \c_page_spread_busy\conditionaltrue
94   \normalexpanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}%
95   \enforced\let\stopspread\page_spread_stop_yes}
96
97\permanent\protected\def\page_spread_stop_yes
98  {\kern\zeropoint
99   \page
100   \setuplayout[\c!textwidth=\textwidth]%
101   \page[\v!left]%
102   \egroup}
103
104\protected\def\page_spread_start_nop
105  {\bgroup
106   \let\stopspread\page_spread_stop_nop}
107
108\protected\def\page_spread_stop_nop
109  {\egroup}
110
111\protect \endinput
112
113% texexec --arr --pdf test
114%
115% \setuplayout[width=middle]
116% \setuppapersize[A4][A3,landscape]
117% \setuppagenumbering[alternative=doublesided]
118% \setuparranging[2UP]
119%
120% \starttext
121%
122% \dorecurse{3}{\input tufte }
123%
124% \startspread
125%   \dorecurse{10}{\input tufte }
126% \stopspread
127%
128% \dorecurse{3}{\input tufte }
129%
130% \stoptext
131