summaryrefslogtreecommitdiff
path: root/tex/context/base/strc-pag.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/strc-pag.mkiv')
-rw-r--r--tex/context/base/strc-pag.mkiv193
1 files changed, 98 insertions, 95 deletions
diff --git a/tex/context/base/strc-pag.mkiv b/tex/context/base/strc-pag.mkiv
index e3828464c..8071fbab1 100644
--- a/tex/context/base/strc-pag.mkiv
+++ b/tex/context/base/strc-pag.mkiv
@@ -19,11 +19,11 @@
% Allocation:
-\countdef\realpageno = 0 \realpageno = 1
-\countdef\userpageno = 1 \userpageno = 1
-\countdef\subpageno = 2 \subpageno = 0 % !!
-\countdef\arrangeno = 3 \arrangeno = 0 % !!
-\countdef\pagenoshift = 4 \pagenoshift = 0 % !!
+\countdef\realpageno \zerocount \realpageno \plusone
+\countdef\userpageno \plusone \userpageno \plusone
+\countdef\subpageno \plustwo \subpageno \zerocount % !
+\countdef\arrangeno \plusthree \arrangeno \zerocount % !
+\countdef\pagenoshift\plusfour \pagenoshift\zerocount % !
\let\pageno\userpageno
@@ -33,7 +33,8 @@
\newtoks\everyinitializepagecounters
-\def\initializepagecounters{\the\everyinitializepagecounters}
+\unexpanded\def\initializepagecounters
+ {\the\everyinitializepagecounters}
\appendtoks
\initializepagecounters
@@ -71,27 +72,30 @@
% \stopbodymatter
% \stoptext
-\definecounter[\s!realpage][\c!prefix=\v!no,\c!start=1,\c!prefixsegments=,\s!counter=realpageno,\c!method=\v!page]
-\definecounter[\s!userpage][\c!prefix=\v!no,\c!start=1,\c!prefixsegments=,\s!counter=userpageno,\c!method=\v!page]
-\definecounter[\s!subpage] [\c!prefix=\v!no,\c!start=1,\c!prefixsegments=,\s!counter=subpageno, \c!method=\v!page]
+\definecounter[\s!realpage][\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=realpageno,\c!method=\v!page]
+\definecounter[\s!userpage][\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=userpageno,\c!method=\v!page]
+\definecounter[\s!subpage] [\c!prefix=\v!no,\c!start=\plusone,\c!prefixsegments=,\s!counter=subpageno, \c!method=\v!page]
\newtoks\everysetuprealpagenumber % todo: set state: none, start, stop, reset
\newtoks\everysetupuserpagenumber % todo: set state: none, start, stop, reset
\newtoks\everysetupsubpagenumber % todo: set state: none, start, stop, reset
-\unexpanded\def\setuprealpagenumber{\dosingleargument\dosetuprealpagenumber}
-\unexpanded\def\setupuserpagenumber{\dosingleargument\dosetupuserpagenumber}
-\unexpanded\def\setupsubpagenumber {\dosingleargument\dosetupsubpagenumber}
+\unexpanded\def\setuprealpagenumber{\dosingleargument\strc_pagenumbers_setup_realpage}
+\unexpanded\def\setupuserpagenumber{\dosingleargument\strc_pagenumbers_setup_userpage}
+\unexpanded\def\setupsubpagenumber {\dosingleargument\strc_pagenumbers_setup_subpage }
-\def\dosavepagenumberstate#1{\edef\oldpagenumberstate{\counterparameter#1\c!state}}
+\let\m_strc_pagenumbers_state_old\zerocount
+\let\m_strc_pagenumbers_state_new\zerocount
-\def\dosetuprealpagenumber[#1]{\dosavepagenumberstate\s!realpage\strc_counters_setup[\s!realpage][#1]\the\everysetuprealpagenumber}
-\def\dosetupuserpagenumber[#1]{\dosavepagenumberstate\s!userpage\strc_counters_setup[\s!userpage][#1]\the\everysetupuserpagenumber}
-\def\dosetupsubpagenumber [#1]{\dosavepagenumberstate\s!subpage \strc_counters_setup[\s!subpage ][#1]\the\everysetupsubpagenumber }
+\def\strc_pagenumbers_save_state#1{\edef\m_strc_pagenumbers_state_old\m_strc_pagenumbers_state_old{\counterparameter#1\c!state}}
-\def\resetrealpagenumber {} % not permitted
-\def\resetuserpagenumber {\strc_counters_reset\s!userpage}
-\def\resetsubpagenumber {\strc_counters_reset\s!subpage}
+\def\strc_pagenumbers_setup_realpage[#1]{\strc_pagenumbers_save_state\s!realpage\strc_counters_setup[\s!realpage][#1]\the\everysetuprealpagenumber}
+\def\strc_pagenumbers_setup_userpage[#1]{\strc_pagenumbers_save_state\s!userpage\strc_counters_setup[\s!userpage][#1]\the\everysetupuserpagenumber}
+\def\strc_pagenumbers_setup_subpage [#1]{\strc_pagenumbers_save_state\s!subpage \strc_counters_setup[\s!subpage ][#1]\the\everysetupsubpagenumber }
+
+\unexpanded\def\resetrealpagenumber {} % not permitted
+\unexpanded\def\resetuserpagenumber {\strc_counters_reset\s!userpage}
+\unexpanded\def\resetsubpagenumber {\strc_counters_reset\s!subpage}
\appendtoks
\strc_counters_set\s!realpage\realpageno
@@ -102,7 +106,7 @@
\let\setuppagenumber\setupuserpagenumber
\let\resetpagenumber\resetuserpagenumber
-\def\savecurrentpagestate % \normalexpanded?
+\def\strc_pagenumbers_page_state_save % \normalexpanded?
{\ctxlua{structures.pages.save({
prefix = "\counterparameter\s!userpage\c!prefix",
separatorset = "\counterparameter\s!userpage\c!prefixseparatorset",
@@ -120,11 +124,13 @@
)}}
\prependtoks
- \savecurrentpagestate
+ \strc_pagenumbers_page_state_save
\to \everyshipout
-\def\pushpagestate{\setxvalue{\??nm:\s!userpage:\c!state}{\counterparameter\s!userpage\c!state}}
-\def\poppagestate {\normalexpanded{\setuppagenumber[\c!state=\getvalue{\??nm:\s!userpage:\c!state}]}}
+\installcorenamespace{pagestatestack} % no level yet
+
+\unexpanded\def\strc_pagenumbers_page_state_push{\setxvalue{\??pagestatestack\c!state}{\counterparameter\s!userpage\c!state}}
+\unexpanded\def\strc_pagenumbers_page_state_pop {\normalexpanded{\setuppagenumber[\c!state=\getvalue{\??pagestatestack\c!state}]}}
\setuppagenumber
[\c!way=\v!by\v!text,
@@ -207,17 +213,17 @@
\def\nextuserpagenumber {\directconvertedcounter\s!userpage\v!next}
\def\nextsubpagenumber {\directconvertedcounter\s!subpage \v!next}
-\def\dodeincrementpageboundcounters % only at the end
+\unexpanded\def\strc_pagenumbers_decrement_counters % only at the end
{\strc_counters_decrement\s!realpage
\strc_counters_decrement\s!userpage
\strc_counters_decrement\s!subpage}
-\def\doincrementpageboundcounters
+\unexpanded\def\strc_pagenumbers_increment_counters
{\incrementpagenumber
\incrementsubpagenumber}
\appendtoks
- \dodeincrementpageboundcounters
+ \strc_pagenumbers_decrement_counters
\to \everygoodbye
% Equivalents (compatibility):
@@ -238,61 +244,49 @@
% States:
-\newif\ifrightpage \rightpagetrue
\newif\ifdoublesided \newconditional\layoutisdoublesided
\newif\ifsinglesided \newconditional\layoutissinglesided
% Realpage and subpage numbers:
-\def\setnextrealpageno{\global\realpageno\strc_counters_incremented\s!realpage\relax}
-\def\setnextsubpageno {\global\subpageno \strc_counters_incremented\s!subpage \relax}
+\unexpanded\def\setnextrealpageno{\global\realpageno\strc_counters_incremented\s!realpage\relax}
+\unexpanded\def\setnextsubpageno {\global\subpageno \strc_counters_incremented\s!subpage \relax}
% Page numbers: (can move to lua) ... inconsistent names
-\def\dodecrementpagenumber {\global\userpageno\strc_counters_decremented\s!userpage\relax}
-\def\doincrementpagenumber {\global\userpageno\strc_counters_incremented\s!userpage\relax}
+\installcorenamespace{pagenumberinc}
+\installcorenamespace{pagenumberdec}
-\def\decrementsubpagenumber{\global\subpageno \strc_counters_decremented\s!subpage \relax}
-\def\incrementsubpagenumber{\global\subpageno \strc_counters_incremented\s!subpage \relax}
+\unexpanded\def\strc_pagenumbers_decrement_userpage{\global\userpageno\strc_counters_decremented\s!userpage\relax}
+\unexpanded\def\strc_pagenumbers_increment_userpage{\global\userpageno\strc_counters_incremented\s!userpage\relax}
-\def\dosynchronizepagenumber{\global\let\@@pnstate\v!start}
+\unexpanded\def\decrementsubpagenumber{\global\subpageno \strc_counters_decremented\s!subpage \relax}
+\unexpanded\def\incrementsubpagenumber{\global\subpageno \strc_counters_incremented\s!subpage \relax}
-\def\decrementpagenumber{\csname\??pn-\counterparameter\s!userpage\c!state\endcsname}
-\def\incrementpagenumber{\csname\??pn+\counterparameter\s!userpage\c!state\endcsname}
+\unexpanded\def\strc_pagenumbers_synchronize_userpage{\global\c_strc_pagenumbers_state_userpage\plustwo} % start and visible
-\letvalue{\??pn-\v!start}\dodecrementpagenumber
-\letvalue{\??pn-\v!none }\dodecrementpagenumber
-\letvalue{\??pn-\v!empty}\dodecrementpagenumber
+\unexpanded\def\decrementpagenumber{\csname\??pagenumberdec\counterparameter\s!userpage\c!state\endcsname}
+\unexpanded\def\incrementpagenumber{\csname\??pagenumberinc\counterparameter\s!userpage\c!state\endcsname}
-\letvalue{\??pn+\v!start}\doincrementpagenumber
-\letvalue{\??pn+\v!none }\doincrementpagenumber
-\setvalue{\??pn+\v!empty}{\doincrementpagenumber\dosynchronizepagenumber}
-\letvalue{\??pn+\v!keep }\dosynchronizepagenumber
+\letvalue{\??pagenumberdec\v!start}\strc_pagenumbers_decrement_userpage
+\letvalue{\??pagenumberdec\v!none }\strc_pagenumbers_decrement_userpage
+\letvalue{\??pagenumberdec\v!empty}\strc_pagenumbers_decrement_userpage
-% Control:
-
-\def\getpagestatus % hierboven gebruiken
- {\ifdoublesided
- \global\rightpagetrue
- % todo: \global\rightpagetrue or \global\rightpagefalse
- \else
- \global\rightpagetrue
- \fi}
+\letvalue{\??pagenumberinc\v!start}\strc_pagenumbers_increment_userpage
+\letvalue{\??pagenumberinc\v!none }\strc_pagenumbers_increment_userpage
+\setvalue{\??pagenumberinc\v!empty}{\strc_pagenumbers_increment_userpage\strc_pagenumbers_synchronize_userpage}
+\letvalue{\??pagenumberinc\v!keep }\strc_pagenumbers_synchronize_userpage
% Setup general page numbering
-\newtoks\everysetuppagenumbering
+\installcorenamespace{pagenumbering}
-\unexpanded\def\setuppagenumbering
- {\dosingleempty\dosetuppagenumbering}
-
-\def\dosetuppagenumbering[#1]%
- {\getparameters[\??nm][#1]\the\everysetuppagenumbering}
+\installdirectcommandhandler \??pagenumbering {pagenumbering}
\appendtoks
\singlesidedfalse \setfalse\layoutisdoublesided
\doublesidedfalse \setfalse\layoutissinglesided
- \normalexpanded{\noexpand\processallactionsinset[\@@nmalternative]}
+ \processallactionsinset[\directpagenumberingparameter\c!alternative]
[ \v!singlesided=>\singlesidedtrue\settrue\layoutissinglesided,
\v!doublesided=>\doublesidedtrue\settrue\layoutisdoublesided]%
\ifdefined\trackingmarginnotestrue
@@ -303,19 +297,24 @@
\fi
\fi
\page_backgrounds_recalculate
- \dosetpagenumberlocation
+ \strc_pagenumbers_set_location
\to \everysetuppagenumbering
\ifdefined \page_backgrounds_recalculate \else
\let\page_backgrounds_recalculate\relax
\fi
-\ifdefined \dosetpagenumberlocation \else
- \let\dosetpagenumberlocation\relax
+\ifdefined \strc_pagenumbers_set_location \else
+ \let\strc_pagenumbers_set_location\relax
\fi
-\def\flushfinallayoutpage
- {\doifsomething\@@nmpage{\doifnot\@@nmpage\v!no{\page[\@@nmpage]}}}
+\unexpanded\def\strc_pagenumbers_flush_final_page
+ {\edef\p_strc_pagenumbers_page{\directpagenumberingparameter\c!page}%
+ \ifx\p_strc_pagenumbers_page\empty \else
+ \ifx\p_strc_pagenumbers_page\v!no \else
+ \page[\p_strc_pagenumbers_page]
+ \fi
+ \fi}
% The numbered location handler is there because we need to be downward
% compatible. So, in fact there can be multiple handlers active at the
@@ -323,28 +322,32 @@
% Rendering:
-\unexpanded\def\placelocationpagenumber
- {\ifnum\userpagenumberstate=\plustwo
- \ifnum\overallpagenumberstate=\plusone
- \doif\@@nmstrut\v!yes\strut
+\unexpanded\def\strc_pagenumbers_place_location
+ {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo
+ \ifnum\c_strc_pagenumbers_state=\plusone
+ \doif{\directpagenumberingparameter\c!strut}\v!yes\strut
\begingroup
- \dousestyleparameter\@@nmstyle
- \dousecolorparameter\@@nmcolor
- \@@nmcommand{\@@nmleft\labeltexts\v!pagenumber{\prefixedpagenumber}\@@nmright}%
+ \usepagenumberingstyleandcolor\c!style\c!color
+ \directpagenumberingparameter\c!command
+ {\directpagenumberingparameter\c!left
+ \labeltexts\v!pagenumber\prefixedpagenumber
+ \directpagenumberingparameter\c!right}%
\endgroup
\fi
\fi}
\unexpanded\def\completepagenumber
- {\ifnum\userpagenumberstate=\plustwo
- \ifnum\overallpagenumberstate=\plusone
- \@@nmleft\labeltexts\v!pagenumber\prefixedpagenumber\@@nmright
+ {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo
+ \ifnum\c_strc_pagenumbers_state=\plusone
+ \directpagenumberingparameter\c!left
+ \labeltexts\v!pagenumber\prefixedpagenumber
+ \directpagenumberingparameter\c!right
\fi
\fi}
\unexpanded\def\placepagenumber
- {\ifnum\userpagenumberstate=\plustwo
- \ifnum\overallpagenumberstate=\plusone
+ {\ifnum\c_strc_pagenumbers_state_userpage=\plustwo
+ \ifnum\c_strc_pagenumbers_state=\plusone
\labeltexts\v!pagenumber\pagenumber
\fi
\fi}
@@ -356,35 +359,35 @@
% compatible. So, in fact there can be multiple handlers active at the
% same time, but only the current one does something.
-\setnewconstant\realpagenumberstate \plustwo % counter state : 0=stop, 1=start, 2=start and visible
-\setnewconstant\userpagenumberstate \plustwo % counter state : 0=stop, 1=start, 2=start and visible
-\setnewconstant\subpagenumberstate \plustwo % counter state : 0=stop, 1=start, 2=start and visible
-\setnewconstant\overallpagenumberstate\plusone % general number: 0=invisible, 1=visible
+\setnewconstant\c_strc_pagenumbers_state_realpage\plustwo % counter state : 0=stop, 1=start, 2=start and visible
+\setnewconstant\c_strc_pagenumbers_state_userpage\plustwo % counter state : 0=stop, 1=start, 2=start and visible
+\setnewconstant\c_strc_pagenumbers_state_subpage \plustwo % counter state : 0=stop, 1=start, 2=start and visible
+\setnewconstant\c_strc_pagenumbers_state \plusone % general number: 0=invisible, 1=visible
-\def\checkpagenumberstatechange#1#2%
- {\edef\newpagenumberstate{\counterparameter#1\c!state}%
- \ifx\newpagenumberstate\oldpagenumberstate \else
- \doifelse\newpagenumberstate\v!start
+\unexpanded\def\strc_pagenumbers_check_state_change#1#2%
+ {\edef\m_strc_pagenumbers_state_new{\counterparameter#1\c!state}%
+ \ifx\m_strc_pagenumbers_state_new\m_strc_pagenumbers_state_old \else
+ \doifelse\m_strc_pagenumbers_state_new\v!start
{#2\plustwo}%
{#2\zerocount}%
\fi}
\appendtoks % todo: set state: none, start, stop, reset
- \checkpagenumberstatechange\s!realpage\realpagenumberstate
+ \strc_pagenumbers_check_state_change\s!realpage\c_strc_pagenumbers_state_realpage
\to \everysetuprealpagenumber
\appendtoks % todo: set state: none, start, stop, reset
- \checkpagenumberstatechange\s!userpage\userpagenumberstate
+ \strc_pagenumbers_check_state_change\s!userpage\c_strc_pagenumbers_state_userpage
\to \everysetupuserpagenumber
\appendtoks % todo: set state: none, start, stop, reset
- \checkpagenumberstatechange\s!subpage\subpagenumberstate
+ \strc_pagenumbers_check_state_change\s!subpage\c_strc_pagenumbers_state_subpage
\to \everysetupsubpagenumber
\appendtoks % todo: set state: none, start, stop, reset
- \doifelse\@@nmstate\v!start
- {\overallpagenumberstate\plusone }%
- {\overallpagenumberstate\zerocount}%
+ \doifelse{\directpagenumberingparameter\c!state}\v!start
+ {\c_strc_pagenumbers_state\plusone }%
+ {\c_strc_pagenumbers_state\zerocount}%
\to \everysetuppagenumbering
% Done
@@ -415,7 +418,7 @@
\appendtoks
\edef\askeduserpagenumber{\counterparameter\s!userpage\c!number}%
\ifx\askeduserpagenumber\empty \else
- \normalexpanded{\setuppagenumber[\c!start=\counterparameter\s!userpage\c!number,\c!number=]}%
+ \normalexpanded{\setuppagenumber[\c!start=\askeduserpagenumber,\c!number=]}%
\userpageno\strc_counters_raw\s!userpage
\fi
\to \everysetupuserpagenumber % todo: set state: none, start, stop, reset
@@ -423,7 +426,7 @@
\appendtoks
\edef\askedsubpagenumber{\counterparameter\s!subpage\c!number}%
\ifx\askedsubpagenumber\empty \else
- \normalexpanded{\setupsubpagenumber[\c!start=\counterparameter\s!subpage\c!number,\c!number=]}%
+ \normalexpanded{\setupsubpagenumber[\c!start=\askedsubpagenumber,\c!number=]}%
\subpageno\strc_counters_raw\s!subpage\relax
\fi
\to \everysetupsubpagenumber % todo: set state: none, start, stop, reset
@@ -433,7 +436,7 @@
% \setupuserpagenumber[start=2]
% \starttext \dorecurse{20}{\input knuth \par} \stoptext
-\def\checkpagenumbershift
+\unexpanded\def\strc_pagenumbers_check_change_shift
{\userpageno\strc_counters_raw\s!userpage\relax
\ifnum\realpageno=\plusone
\ifodd\userpageno
@@ -444,12 +447,12 @@
\appendtoks % todo: set state: none, start, stop, reset
% this makes starting at an even page possible
- \checkpagenumbershift
+ \strc_pagenumbers_check_change_shift
\to \everysetupuserpagenumber
\appendtoks % todo: set state: none, start, stop, reset
% this makes starting at an even page possible
- \checkpagenumbershift
+ \strc_pagenumbers_check_change_shift
\to \everysetuppagenumbering
\initializepagecounters