1
2
3
4
5
6
7
8
9
10
11
12
13
14\writestatus{loading}{ConTeXt Spacing Macros Pages}
15
16\unprotect
17
18
19
20
21\installcorenamespace {alignswitch}
22
23\letvalue{\??alignswitch\v!left }\zerocount
24\letvalue{\??alignswitch\v!middle}\plusone
25\letvalue{\??alignswitch\v!right }\plustwo
26
27\def\setalignmentswitch#1
28 {\chardef\alignmentswitch\csname\??alignswitch\ifcsname\??alignswitch#1\endcsname#1\else\v!left\fi\endcsname}
29
30\newif \ifpagestatemismatch
31\newcount \realpagestateno
32\newconstant\frozenpagestate
33
34\def\dotrackpagestate#1#2
35 {\ifdoublesided \ifinpagebody \else
36 \doforcedtrackpagestate{#1}{#2}
37 \fi \fi}
38
39\def\doforcedtrackpagestate#1#2
40 {\ifcase\frozenpagestate
41 \global\advance#2\plusone
42 \setpagestate[#1][\number#2]
43 \fi}
44
45\let\m_spac_pagestates_realpage\empty
46
47\newconditional\c_spac_pagestates_found
48
49\unexpanded\def\docheckpagestate#1#2
50 {\ifcase\frozenpagestate
51 \setpagestaterealpageno{#1}{\number#2}
52 \fi}
53
54\unexpanded\def\doifelserightpagestate#1#2
55 {\ifcase\frozenpagestate
56 \pagestatemismatchfalse
57 \realpagestateno\realfolio
58 \ifinpagebody
59 \ifdoublesided
60 \ifodd\realpageno\relax
61 \settrue\c_spac_pagestates_found
62 \else
63 \setfalse\c_spac_pagestates_found
64 \fi
65 \else
66 \settrue\c_spac_pagestates_found
67 \fi
68 \else\ifdoublesided
69 \edef\m_spac_pagestates_realpage{\pagestaterealpage{#1}{\number#2}}
70 \ifx\m_spac_pagestates_realpage\empty
71 \ifodd\realpageno\relax
72 \settrue\c_spac_pagestates_found
73 \else
74 \setfalse\c_spac_pagestates_found
75 \fi
76 \else
77 \realpagestateno\m_spac_pagestates_realpage\relax
78 \ifnum\realpagestateno=\realpageno \else
79 \pagestatemismatchtrue
80 \fi
81 \ifodd\realpagestateno\relax
82 \settrue\c_spac_pagestates_found
83 \else
84 \setfalse\c_spac_pagestates_found
85 \fi
86 \fi
87 \else
88 \settrue\c_spac_pagestates_found
89 \fi\fi
90 \else
91 \ifodd\realpagestateno\relax
92 \settrue\c_spac_pagestates_found
93 \else
94 \setfalse\c_spac_pagestates_found
95 \fi
96 \fi
97 \ifconditional\c_spac_pagestates_found
98 \expandafter\firstoftwoarguments
99 \else
100 \expandafter\secondoftwoarguments
101 \fi}
102
103\unexpanded\def\doifelseforcedrightpagestate#1#2
104 {\ifcase\frozenpagestate
105 \pagestatemismatchfalse
106 \realpagestateno\realfolio
107 \edef\m_spac_pagestates_realpage{\pagestaterealpage{#1}{\number#2}}
108 \ifx\m_spac_pagestates_realpage\empty
109 \ifodd\realpageno\relax
110 \settrue\c_spac_pagestates_found
111 \else
112 \setfalse\c_spac_pagestates_found
113 \fi
114 \else
115 \realpagestateno\m_spac_pagestates_realpage\relax
116 \ifnum\realpagestateno=\realpageno \else
117 \pagestatemismatchtrue
118 \fi
119 \ifodd\realpagestateno\relax
120 \settrue\c_spac_pagestates_found
121 \else
122 \setfalse\c_spac_pagestates_found
123 \fi
124 \fi
125 \else
126 \ifodd\realpagestateno\relax
127 \settrue\c_spac_pagestates_found
128 \else
129 \setfalse\c_spac_pagestates_found
130 \fi
131 \fi
132 \ifconditional\c_spac_pagestates_found
133 \expandafter\firstoftwoarguments
134 \else
135 \expandafter\secondoftwoarguments
136 \fi}
137
138\let\doifrightpagestateelse \doifelserightpagestate
139\let\doifforcedrightpagestateelse\doifelseforcedrightpagestate
140
141\unexpanded\def\freezepagestate {\frozenpagestate\plusone }
142\unexpanded\def\defrostpagestate{\frozenpagestate\zerocount}
143
144
145
146
147
148\newcount\nofraggedparagraphs
149
150\definepagestate[\s!paragraph]
151
152\unexpanded\def\signalrightpage {\dotrackpagestate \s!paragraph\nofraggedparagraphs}
153\unexpanded\def\doifelserightpage{\doifelserightpagestate\s!paragraph\nofraggedparagraphs}
154\unexpanded\def\rightpageorder {\pagestaterealpageorder\s!paragraph\nofraggedparagraphs}
155
156\let\doifrightpageelse\doifelserightpage
157
158\installcorenamespace{pagechanges}
159
160\newif\ifpagechanged \let\lastchangedpage\empty
161
162\def\spac_pagechanges_check#1#2#3
163 {\pagechangedfalse
164 \doforcedtrackpagestate{#2}{#3}
165 \edef\m_spac_pagestates_realpage{\pagestaterealpage{#2}{\number#3}}
166 \ifx\m_spac_pagestates_realpage\empty \else
167 \ifnum\m_spac_pagestates_realpage>0\csname\??pagechanges#2:#1\endcsname\relax
168 \pagechangedtrue
169 \fi
170 \fi
171 \ifpagechanged
172 \letgvalue{\??pagechanges#2:#1}\m_spac_pagestates_realpage
173 \glet\lastchangedpage\m_spac_pagestates_realpage
174 \else
175 \glet\lastchangedpage\realfolio
176 \fi}
177
178\def\changedpagestate#1#2
179 {\executeifdefined{\??pagechanges#2:#1}0}
180
181\def\checkpagechange#1{\spac_pagechanges_check{#1}\s!paragraph\nofraggedparagraphs}
182\def\changedpage #1{\changedpagestate{#1}\s!paragraph}
183
184\protect \endinput
185 |