summaryrefslogtreecommitdiff
path: root/tex/context/base/page-spr.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/page-spr.mkiv')
-rw-r--r--tex/context/base/page-spr.mkiv90
1 files changed, 31 insertions, 59 deletions
diff --git a/tex/context/base/page-spr.mkiv b/tex/context/base/page-spr.mkiv
index dc1e013d5..f4768d4e9 100644
--- a/tex/context/base/page-spr.mkiv
+++ b/tex/context/base/page-spr.mkiv
@@ -17,9 +17,10 @@
\unprotect
-\newbox \b_page_spread_content
-\newconditional\c_page_spread_busy
-\newconditional\c_page_spread_once % when true only one flush (writes etc)
+\newbox\spreadbox
+\newif \ifinspread
+
+\setnewconstant\showspreadmode\plusone
% beware, ugly overload, to be redone
@@ -34,81 +35,52 @@
\noindent % content can be < \hsize
\page_otr_command_package_contents#2#3}}%
\dp#1\zeropoint
- \ifconditional\c_page_spread_busy
- \normalsettextpagecontent_spread{#1}%
- \else
- \normalsettextpagecontent_normal{#1}%
- \fi}
-
-\def\normalsettextpagecontent_normal#1%
- {\setbox#1\hbox to \makeupwidth
- {\hss\box#1\hss}} % never change the \hss's
-
-\def\normalsettextpagecontent_spread#1%
- {\setbox#1\hbox to \makeupwidth
- {\ifvoid\b_page_spread_content
- \ifconditional\c_page_spread_once
- \box#1%
+ \setbox#1\hbox to \makeupwidth
+ {\ifinspread
+ \ifvoid\spreadbox
+ \global\setbox\spreadbox\box#1%
+ \copy\spreadbox\hss % left page
\else
- \global\setbox\b_page_spread_content\box#1%
- \copy\b_page_spread_content
+ % prevent duplicate writes in normal run
+ \ifarrangingpages \else \ifcase\showspreadmode
+ \global\setbox\spreadbox\emptyhbox
+ \wd\spreadbox\makeupwidth
+ \ht\spreadbox\textheight
+ \fi \fi
+ \hss\box\spreadbox % right page
\fi
- \hss % left page
\else
- \hss % right page
- \ifarrangingpages
- % writes don't matter anyway
- \else\ifconditional\c_page_spread_once
- \global\setbox\b_page_spread_content\emptyhbox
- \wd\b_page_spread_content\makeupwidth
- \ht\b_page_spread_content\textheight
- \else
- % writes can interfere (todo: write stripper, but how about hyperlinks)
- \fi \fi
- \box\b_page_spread_content
+ \hss\box#1\hss % never change the \hss's
\fi}}
-\unexpanded\def\page_spread_flush
- {\ifconditional\c_page_spread_busy \ifvoid\b_page_spread_content\else
+\def\doflushspread
+ {\ifinspread \ifvoid\spreadbox\else
% this page will be discarded later
\emptyhbox \page
\fi \fi }
\unexpanded\def\startspread
- {\ifdoublesided
- \ifconditional\c_page_spread_busy
- \doubleexpandafter\page_spread_start_nop
- \else
- \doubleexpandafter\page_spread_start_yes
- \fi
+ {\bgroup
+ \ifdoublesided
+ \page[\v!left]%
+ %\setsystemmode{spread}%
+ \inspreadtrue
+ \expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}%
+ \unexpanded\def\startspread{\bgroup\let\stopspread\egroup}%
+ \let\stopspread\dostopspread
\else
- \expandafter\page_spread_start_nop
+ \let\stopspread\egroup
\fi}
\let\stopspread\relax
-\unexpanded\def\page_spread_start_yes
- {\bgroup
- \page[\v!left]%
- %\setsystemmode{spread}%
- \settrue\c_page_spread_busy
- \expanded{\setuplayout[\c!textwidth=\the\dimexpr2\textwidth+2\backspace\relax]}%
- \let\stopspread\page_spread_stop_yes}
-
-\unexpanded\def\page_spread_stop_yes
- {\kern\zeropoint
- \page
+\def\dostopspread
+ {\kern\zeropoint\page
+ \inspreadfalse
\setuplayout[\c!textwidth=\textwidth]
\page[\v!left]
\egroup}
-\unexpanded\def\page_spread_start_nop
- {\bgroup
- \let\stopspread\page_spread_stop_nop}
-
-\unexpanded\def\page_spread_stop_nop
- {\egroup}
-
\protect \endinput
% texexec --arr --pdf test