summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/page-txt.mklx
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2020-10-31 00:09:22 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2020-10-31 00:09:22 +0100
commit7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896 (patch)
tree92ffcd258fb29e37b4a136eb071fbfd0717be29e /tex/context/base/mkiv/page-txt.mklx
parenta0270f13065d116355a953c6f246cbba26289fc2 (diff)
downloadcontext-7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896.tar.gz
2020-10-30 22:27:00
Diffstat (limited to 'tex/context/base/mkiv/page-txt.mklx')
-rw-r--r--tex/context/base/mkiv/page-txt.mklx201
1 files changed, 91 insertions, 110 deletions
diff --git a/tex/context/base/mkiv/page-txt.mklx b/tex/context/base/mkiv/page-txt.mklx
index ff582e561..6d9af76b0 100644
--- a/tex/context/base/mkiv/page-txt.mklx
+++ b/tex/context/base/mkiv/page-txt.mklx
@@ -77,11 +77,8 @@
\definelayoutelement[\v!footer:\v!edge] [\v!footer][\c!lefttext=,\c!middletext=,\c!righttext=]
\definelayoutelement[\v!bottom:\v!edge] [\v!bottom][\c!lefttext=,\c!middletext=,\c!righttext=]
-\unexpanded\def\setuplayouttext
- {\dotripleempty\page_layouts_setup_text}
-
-\def\page_layouts_setup_text[#vertical][#horizontal][#settings]%
- {\ifthirdargument
+\permanent\tolerant\protected\def\setuplayouttext[#vertical]#spacer[#horizontal]#spacer[#settings]%
+ {\ifnum\lastarguments>\plustwo
\setuplayoutelement[#vertical:#horizontal][#settings]%
\else
\setuplayoutelement[#vertical][#horizontal]%
@@ -116,11 +113,11 @@
\ifx\previoustextstate\v!none \calculatevsizes\page_backgrounds_recalculate \fi
\letgvalue{\??layouttextssynchronize#vertical}\currenttextstate}
-\unexpanded\def\setuptop {\dotripleempty\page_layouts_setup_text[\v!top ]}
-\unexpanded\def\setupheader{\dotripleempty\page_layouts_setup_text[\v!header]}
-\unexpanded\def\setuptext {\dotripleempty\page_layouts_setup_text[\v!text ]}
-\unexpanded\def\setupfooter{\dotripleempty\page_layouts_setup_text[\v!footer]}
-\unexpanded\def\setupbottom{\dotripleempty\page_layouts_setup_text[\v!bottom]}
+\permanent\protected\def\setuptop {\setuplayouttext[\v!top ]}
+\permanent\protected\def\setupheader{\setuplayouttext[\v!header]}
+\permanent\protected\def\setuptext {\setuplayouttext[\v!text ]}
+\permanent\protected\def\setupfooter{\setuplayouttext[\v!footer]}
+\permanent\protected\def\setupbottom{\setuplayouttext[\v!bottom]}
%D We inherit some settings:
@@ -143,11 +140,11 @@
%D \showsetup{noheaderandfooterlines}
%D \showsetup{notopandbottomlines}
-\unexpanded\def\noheaderandfooterlines
+\permanent\protected\def\noheaderandfooterlines
{\setuplayoutelement[\v!header][\c!state=\v!empty]%
\setuplayoutelement[\v!footer][\c!state=\v!empty]}
-\unexpanded\def\notopandbottomlines
+\permanent\protected\def\notopandbottomlines
{\setuplayoutelement[\v!top ][\c!state=\v!empty]%
\setuplayoutelement[\v!bottom][\c!state=\v!empty]}
@@ -169,59 +166,50 @@
%D someone uses the key|/|value interface these things have to be set explicitly as
%D part of the text.
-\unexpanded\def\setuptoptexts {\dosixtupleempty\page_layouts_setup_texts[\v!top ]}
-\unexpanded\def\setupheadertexts{\dosixtupleempty\page_layouts_setup_texts[\v!header]}
-\unexpanded\def\setuptexttexts {\dosixtupleempty\page_layouts_setup_texts[\v!text ]}
-\unexpanded\def\setupfootertexts{\dosixtupleempty\page_layouts_setup_texts[\v!footer]}
-\unexpanded\def\setupbottomtexts{\dosixtupleempty\page_layouts_setup_texts[\v!bottom]}
-
-\unexpanded\def\page_layouts_setup_text_six[#vertical][#horizontal][#a][#b][#c][#d]%
- {\edef\currentlayoutelement{#vertical:#horizontal}%
- \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#a}{#d}}%
- \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#b}{#c}}}
-
-\unexpanded\def\page_layouts_setup_text_five[#vertical][#horizontal][#a][#b][#c][#d]%
- {\edef\currentlayoutelement{#vertical:\v!text}%
- \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#horizontal}{#c}}%
- \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#a}{#b}}}
-
-\unexpanded\def\page_layouts_setup_text_four[#vertical][#horizontal][#a][#b][#c][#d]%
- {\edef\currentlayoutelement{#vertical:#horizontal}%
- \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#a}}%
- \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#b}}}
-
-\unexpanded\def\page_layouts_setup_text_three[#vertical][#horizontal][#a][#b][#c][#d]%
- {\edef\currentlayoutelement{#vertical:\v!text}%
- \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#horizontal}}%
- \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#a}}}
-
-\unexpanded\def\page_layouts_setup_text_two[#vertical][#horizontal][#a][#b][#c][#d]%
- {\edef\currentlayoutelement{#vertical:\v!text}%
- \resetlayoutelementparameter\c!lefttext
- \resetlayoutelementparameter\c!righttext
- \setlayoutelementparameter \c!middletext{\page_layouts_process_element_single{#horizontal}}}
-
-\unexpanded\def\page_layouts_setup_text_one[#vertical][#horizontal][#a][#b][#c][#d]%
- {\edef\currentlayoutelement{#vertical:\v!text}%
- \resetlayoutelementparameter\c!lefttext
- \resetlayoutelementparameter\c!righttext
- \resetlayoutelementparameter\c!middletext
- \edef\currentlayoutelement{#vertical:\v!margin}%
- \resetlayoutelementparameter\c!lefttext
- \resetlayoutelementparameter\c!righttext
- \resetlayoutelementparameter\c!middletext
- \edef\currentlayoutelement{#vertical:\v!edge}%
- \resetlayoutelementparameter\c!lefttext
- \resetlayoutelementparameter\c!righttext
- \resetlayoutelementparameter\c!middletext}
-
-\unexpanded\def\page_layouts_setup_texts
- {\ifsixthargument \expandafter\page_layouts_setup_text_six \orelse
- \iffifthargument \expandafter\page_layouts_setup_text_five \orelse
- \iffourthargument\expandafter\page_layouts_setup_text_four \orelse
- \ifthirdargument \expandafter\page_layouts_setup_text_three\orelse
- \ifsecondargument\expandafter\page_layouts_setup_text_two \else
- \expandafter\page_layouts_setup_text_one \fi}
+\permanent\protected\def\setuptoptexts {\setuptexts[\v!top ]}
+\permanent\protected\def\setupheadertexts{\setuptexts[\v!header]}
+\permanent\protected\def\setuptexttexts {\setuptexts[\v!text ]}
+\permanent\protected\def\setupfootertexts{\setuptexts[\v!footer]}
+\permanent\protected\def\setupbottomtexts{\setuptexts[\v!bottom]}
+
+\permanent\tolerant\protected\def\setuptexts[#vertical]#spacer[#horizontal]#spacer[#a]#spacer[#b]#spacer[#c]#spacer[#d]%
+ {\ifarguments
+ % there is always one
+ \or
+ \edef\currentlayoutelement{#vertical:\v!text}%
+ \resetlayoutelementparameter\c!lefttext
+ \resetlayoutelementparameter\c!righttext
+ \resetlayoutelementparameter\c!middletext
+ \edef\currentlayoutelement{#vertical:\v!margin}%
+ \resetlayoutelementparameter\c!lefttext
+ \resetlayoutelementparameter\c!righttext
+ \resetlayoutelementparameter\c!middletext
+ \edef\currentlayoutelement{#vertical:\v!edge}%
+ \resetlayoutelementparameter\c!lefttext
+ \resetlayoutelementparameter\c!righttext
+ \resetlayoutelementparameter\c!middletext
+ \or
+ \edef\currentlayoutelement{#vertical:\v!text}%
+ \resetlayoutelementparameter\c!lefttext
+ \resetlayoutelementparameter\c!righttext
+ \setlayoutelementparameter \c!middletext{\page_layouts_process_element_single{#horizontal}}%
+ \or
+ \edef\currentlayoutelement{#vertical:\v!text}%
+ \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#horizontal}}%
+ \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#a}}%
+ \or
+ \edef\currentlayoutelement{#vertical:#horizontal}%
+ \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_single{#a}}%
+ \setlayoutelementparameter\c!righttext{\page_layouts_process_element_single{#b}}%
+ \or
+ \edef\currentlayoutelement{#vertical:\v!text}%
+ \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#horizontal}{#c}}%
+ \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#a}{#b}}%
+ \or
+ \edef\currentlayoutelement{#vertical:#horizontal}%
+ \setlayoutelementparameter\c!lefttext {\page_layouts_process_element_double{#a}{#d}}%
+ \setlayoutelementparameter\c!righttext{\page_layouts_process_element_double{#b}{#c}}%
+ \fi}
%D Left and right texts are swapped on odd and even pages, but only when double
%D sided typesetting is enabled.
@@ -230,7 +218,7 @@
\let\m_page_layouts_element_content\empty
-\unexpanded\def\page_layouts_process_element_single#content%
+\protected\def\page_layouts_process_element_single#content%
{\edef\m_page_layouts_element_content{\detokenize{#content}}% so no \v!xxx
\ifcsname\??layouttextspecial\m_page_layouts_element_content\endcsname
\lastnamedcs
@@ -240,12 +228,12 @@
{#content}%
\fi}
-\unexpanded\def\page_layouts_process_element_double#first#second%
+\protected\def\page_layouts_process_element_double#first#second%
{\doifelseoddpage
{\page_layouts_process_element_single{#first}}
{\page_layouts_process_element_single{#second}}}
-\unexpanded\def\page_layouts_process_element_indeed#style#color#width%
+\protected\def\page_layouts_process_element_indeed#style#color#width%
{\begingroup
\uselayoutelementstyleandcolor#style#color%
\begincsname\??layouttextstrut\layoutelementparameter\c!strut\endcsname
@@ -257,7 +245,6 @@
\endgroup}
\def\page_layouts_process_element_limited#content% are the {}{}{} still needed?
-% {\limitatetext{#content{}{}{}}\currentlayoutelementwidth\unknown}
{\limitated
left \currentlayoutelementwidth
text {#content}
@@ -294,7 +281,7 @@
\doifinset\v!footer\floatspecification{\setxvalue{\namedlayoutelementhash\v!footer\c!n}{1}}%
\to \everybeforeflushedpagefloat
-\unexpanded\def\page_layouts_place_text_line#vertical%
+\protected\def\page_layouts_place_text_line#vertical%
{\page_layouts_set_element_status#vertical\relax
\ifcsname\??layouttextsline\textlinestatus\endcsname
\expandafter\lastnamedcs
@@ -302,7 +289,7 @@
\expandafter\page_layouts_place_text_line_unknown
\fi#vertical}
-\unexpanded\def\doifelselayouttextline#vertical% shown or not
+\permanent\protected\def\doifelselayouttextline#vertical% shown or not
{\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}%
\ifx\currentlayoutelementstate\v!normal
\expandafter\firstoftwoarguments
@@ -312,7 +299,7 @@
\expandafter\secondoftwoarguments
\fi}
-\unexpanded\def\doifelselayoutsomeline#vertical% present or not
+\permanent\protected\def\doifelselayoutsomeline#vertical% present or not
{\edef\currentlayoutelementstate{\namedlayoutelementparameter{#vertical}\c!state}%
\ifx\currentlayoutelementstate\v!none
\expandafter\secondoftwoarguments
@@ -377,7 +364,7 @@
%D The following macro has to be called after a page is flushed.
-\unexpanded\def\resetlayouttextlines % public
+\permanent\protected\def\resetlayouttextlines % public
{\begincsname\??layouttextsreset\v!top \endcsname
\begincsname\??layouttextsreset\v!header\endcsname
\begincsname\??layouttextsreset\v!text \endcsname
@@ -389,39 +376,36 @@
\global\setfalse\resyncaftertextline
\fi}
-\def\getspecificlayouttext#vertical#horizontal#what%
+\permanent\def\getspecificlayouttext#vertical#horizontal#what%
{\begincsname\namedlayoutelementhash{#vertical:#horizontal}#what\endcsname}
% \settext[header][text][middle][xxx][yyy]
-\unexpanded\def\settextcontent
- {\doquintupleempty\page_layouts_set_text_content}
-
-\def\page_layouts_set_text_content[#vertical][#horizontal][#one][#two][#three]% header text middle text/text
- {\iffifthargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}%
- {\page_layouts_process_element_double{#two}{#three}}%
- \orelse\iffourthargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}%
- {\page_layouts_process_element_double{#two}{#two}}%
- \orelse\ifthirdargument
+\permanent\tolerant\protected\def\settextcontent[#vertical]#spacer[#horizontal]#spacer[#one]#spacer[#two]#spacer[#three]% header text middle text/text
+ {\ifarguments\or\or\or % 3
\setvalue{\namedlayoutelementhash{#vertical:#horizontal}\c!middletext}%
{\page_layouts_process_element_double{#one}{#one}}%
+ \or % 4
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}%
+ {\page_layouts_process_element_double{#two}{#two}}%
+ \or % 5
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}\begincsname\??layouttextcontent\v!text:#one\endcsname\c!middletext}%
+ {\page_layouts_process_element_double{#two}{#three}}%
\fi}
\let\currentlayoutelement\relax
-\unexpanded\def\resettextcontent
- {\dotripleempty\page_layouts_reset_text_content}
+%D This will be redefined, so no \type {\frozen} here!
-\def\page_layouts_reset_text_content[#vertical][#horizontal][#tag]% header text middle
- {\edef\currentlayoutelement{#vertical:#horizontal}%
- \ifthirdargument
- \letvalueempty{\layoutelementhash\begincsname\??layouttextcontent\v!text:#tag\endcsname\c!middletext}%
- \orelse\ifsecondargument
+\permanent\tolerant\protected\def\resettextcontent[#vertical]#spacer[#horizontal]#spacer[#tag]% header text middle
+ {\ifarguments\or\or % 2
+ \edef\currentlayoutelement{#vertical:#horizontal}%
\resetlayoutelementparameter\c!lefttext
\resetlayoutelementparameter\c!middletext
\resetlayoutelementparameter\c!righttext
+ \or % 3
+ \edef\currentlayoutelement{#vertical:#horizontal}%
+ \letvalueempty{\layoutelementhash\begincsname\??layouttextcontent\v!text:#tag\endcsname\c!middletext}%
\fi}
\letvalue{\??layouttextcontent\v!text:\c!middle}\c!middletext
@@ -718,20 +702,17 @@
%D \chapter{tweede} \dorecurse{20}{\input tufte \relax}
%D \stoptyping
-\unexpanded\def\definetext
- {\doseventupleempty\page_layouts_define_text}
-
-\def\page_layouts_define_text[#tag][#vertical][#horizontal][#a][#b][#c][#d]%
- {\ifseventhargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\page_layouts_setup_text_six [#vertical][#horizontal][#a][#b][#c][#d]}%
- \orelse\ifsixthargument
- \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_five [#vertical][#horizontal][#a][#b][#c][]}%
- \orelse\iffifthargument
- \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\page_layouts_setup_text_four [#vertical][#horizontal][#a][#b][][]}%
- \orelse\iffourthargument
- \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_three[#vertical][#horizontal][#a][][][]}%
- \else
- \setvalue{\namedlayoutelementhash {#vertical}#tag}{\page_layouts_setup_text_two [#vertical][#horizontal][][][][]}%
+\permanent\tolerant\protected\def\definetext[#tag]#spacer[#vertical]#spacer[#horizontal]#spacer[#a]#spacer[#b]#spacer[#c]#spacer[#d]%
+ {\ifnum\lastarguments<\plusfour
+ \setvalue{\namedlayoutelementhash {#vertical}#tag}{\setuptexts[#vertical][#horizontal]\relax}% 1, 2, 3
+ \orelse\ifarguments\or\or\or\or
+ \setvalue{\namedlayoutelementhash {#vertical}#tag}{\setuptexts[#vertical][#horizontal][#a]\relax}% 4
+ \or
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\setuptexts[#vertical][#horizontal][#a][#b]\relax}% 5
+ \or
+ \setvalue{\namedlayoutelementhash {#vertical}#tag}{\setuptexts[#vertical][#horizontal][#a][#b][#c]\relax}% 6
+ \or
+ \setvalue{\namedlayoutelementhash{#vertical:#horizontal}#tag}{\setuptexts[#vertical][#horizontal][#a][#b][#c][#d]\relax}% 7
\fi}
%D A few more page breakers:
@@ -769,7 +750,7 @@
\let\m_page_layouts_page_number_location_h\relax
\let\m_page_layouts_page_number_location_x\relax
-\def\page_layouts_place_page_number % also elsewhere .. beware, not \unexpanded else
+\def\page_layouts_place_page_number % also elsewhere .. beware, not \protected else
{\strc_pagenumbers_place_location} % test below fails
\def\page_layouts_reset_page_number_location
@@ -817,7 +798,7 @@
\v!marginedge=>\let\m_page_layouts_page_number_location_h\v!text
\let\m_page_layouts_page_number_location_x\c!marginedgetext]}
-\unexpanded\def\strc_pagenumbers_set_location
+\protected\def\strc_pagenumbers_set_location
{\edef\p_strc_pagenumbers_location{\directpagenumberingparameter\c!location}%
\ifx\p_strc_pagenumbers_location\m_page_layouts_page_number_location
% unchanged
@@ -949,10 +930,10 @@
%D The main text area has to be combined with some additional (tracing) information.
%D
%D This will be stored as normal and overloaded in page-lyr and later in page-spr we
-%D overload the the stored version .. evenatually i will clear up the experimental
+%D overload the the stored version .. eventually i will clear up the experimental
%D mess.
-\def\settextpagecontent#1#2#3% #2 and #3 will disappear / is overloaded
+\protected\def\settextpagecontent#1#2#3% #2 and #3 will disappear / is overloaded
{\setbox#1\hpack to \makeupwidth
{\hss % so don't change this
\setlayoutcomponentattribute{\v!page:\v!text}%