summaryrefslogtreecommitdiff
path: root/tex/context/base/page-txt.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/page-txt.mkiv')
-rw-r--r--tex/context/base/page-txt.mkiv801
1 files changed, 0 insertions, 801 deletions
diff --git a/tex/context/base/page-txt.mkiv b/tex/context/base/page-txt.mkiv
deleted file mode 100644
index 57f391f7c..000000000
--- a/tex/context/base/page-txt.mkiv
+++ /dev/null
@@ -1,801 +0,0 @@
-%D \module
-%D [ file=page-txt, % copied from main-001,
-%D version=1997.03.31,
-%D title=\CONTEXT\ Page Macros,
-%D subtitle=Texts,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-% where we can do some mkiv cleanup
-
-% \setuplayouttext in manual
-
-\writestatus{loading}{ConTeXt Page Macros / Texts}
-
-\unprotect
-
-%D Interfacing between this and other modules is handled by
-%D the following macros. The current state of a text line
-%D (header, footer, etc.) is checked by:
-%D
-%D \starttyping
-%D \resetlayouttextlines
-%D \stoptyping
-%D
-%D The main text box is finished by the following macro:
-%D
-%D \starttyping
-%D \getmainbox <box> <\vbox|\unvbox>
-%D \stoptyping
-%D
-%D The text lines are collected with:
-%D
-%D \starttyping
-%D \gettextboxes
-%D \stoptyping
-%D
-%D It is possible to extens the default content of the text
-%D areas by appending content to the following token list
-%D registers:
-
-\newtoks\toptextcontent \newtoks\leftedgetextcontent
-\newtoks\headertextcontent \newtoks\leftmargintextcontent
-\newtoks\footertextcontent \newtoks\rightmargintextcontent
-\newtoks\bottomtextcontent \newtoks\rightedgetextcontent
-
-\newtoks\texttextcontent
-
-%D \macros
-%D {setuptop, setupheader, setuptext,
-%D setupfooter, setupbottom}
-%D
-%D The macros in this module sometimes look a bit more complicated
-%D than needed, which is a direct result of the fact that their
-%D ancestors are quite old and upward compatibility is a must.
-%D
-%D \showsetup{setuptop}
-%D \showsetup{setupheader}
-%D \showsetup{setuptext}
-%D \showsetup{setupfooter}
-%D \showsetup{setupbottom}
-
-\unexpanded\def\setuplayouttext
- {\dotripleempty\dosetuplayouttext}
-
-\def\dosetuplayouttext[#1][#2][#3]% beware, non global
- {\ifthirdargument
- \getparameters[\??tk#1#2][#3]%
- \else
- %\getparameters[\??tk#1\v!text][#2]%
- \edef\previoustextstate{\csname\??tk#1\c!state\endcsname}%
- \getparameters[\??tk#1][#2]%
- \edef\currenttextstate{\csname\??tk#1\c!state\endcsname}%
- \ifx\currenttextstate\previoustextstate
- % no change in state
- \else
- %\checkcurrentlayout % no
- % speed optimization (calculating backgrounds takes time)
- \doifcommon{\previoustextstate,\currenttextstate}{\v!high,\v!none}
- {\calculatevsizes
- \recalculatebackgrounds}%
- \fi
- \fi}
-
-\unexpanded\def\setuptop {\dotripleempty\dosetuplayouttext[\v!top]}
-\unexpanded\def\setupheader {\dotripleempty\dosetuplayouttext[\v!header]}
-\unexpanded\def\setuptext {\dotripleempty\dosetuplayouttext[\v!text]}
-\unexpanded\def\setupfooter {\dotripleempty\dosetuplayouttext[\v!footer]}
-\unexpanded\def\setupbottom {\dotripleempty\dosetuplayouttext[\v!bottom]}
-
-%D \macros
-%D {noheaderandfooterlines,notopandbottomlines}
-%D
-%D Although not really needed, the following shortcuts
-%D sometimes come in handy.
-%D
-%D \showsetup{noheaderandfooterlines}
-%D \showsetup{notopandbottomlines}
-
-\def\noheaderandfooterlines
- {\setupheader[\c!state=\v!empty]%
- \setupfooter[\c!state=\v!empty]}
-
-\def\notopandbottomlines
- {\setuptop [\c!state=\v!empty]%
- \setupbottom[\c!state=\v!empty]}
-
-%D \macros
-%D {setuptoptexts, setupheadertexts, setuptexttexts,
-%D setupfootertexts, setupbottomtexts}
-%D
-%D The next macros take one or more arguments. The exact setup
-%D depends on the number of arguments. Although not that
-%D intuitive, the current scheme evolved out of the original.
-%D When margin and edge texts as well as middle texts showed
-%D up, the current odd|/|even scheme surfaced.
-%D
-%D \showsetup{setuptoptexts}
-%D \showsetup{setupheadertexts}
-%D \showsetup{setuptexttexts}
-%D \showsetup{setupfootertexts}
-%D \showsetup{setupbottomtexts}
-
-\unexpanded\def\setuptoptexts {\dosixtupleempty\dosetuptexts[\v!top ]}
-\unexpanded\def\setupheadertexts {\dosixtupleempty\dosetuptexts[\v!header ]}
-\unexpanded\def\setuptexttexts {\dosixtupleempty\dosetuptexts[\v!text ]}
-\unexpanded\def\setupfootertexts {\dosixtupleempty\dosetuptexts[\v!footer ]}
-\unexpanded\def\setupbottomtexts {\dosixtupleempty\dosetuptexts[\v!bottom ]}
-
-%D The left, right and center variables can also be set
-%D directly using the previously discussed macros.
-
-\def\dosetuptexts[#1][#2][#3][#4][#5][#6]%
- {\ifsixthargument
- \setvalue{\??tk#1#2\c!lefttext}%
- {\dodoubletexts{#1}{#2}%
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#3}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#6}}%
- \setvalue{\??tk#1#2\c!righttext}%
- {\dodoubletexts{#1}{#2}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}%
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#5}}%
- \else\iffifthargument
- \setvalue{\??tk#1\v!text\c!lefttext}%
- {\dodoubletexts{#1}\v!text
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#2}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#5}}%
- \setvalue{\??tk#1\v!text\c!righttext}%
- {\dodoubletexts{#1}\v!text
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}%
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#4}}%
- \else\iffourthargument
- \setvalue{\??tk#1#2\c!lefttext}%
- {\dodoubletexts{#1}{#2}
- {\c!leftstyle\c!leftcolor\c!leftwidth}{#3}%
- {\c!leftstyle\c!leftcolor\c!leftwidth}{#3}}%
- \setvalue{\??tk#1#2\c!righttext}%
- {\dodoubletexts{#1}{#2}
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}}%
- \else\ifthirdargument
- \setvalue{\??tk#1\v!text\c!lefttext}%
- {\dodoubletexts{#1}\v!text
- {\c!leftstyle\c!leftcolor\c!leftwidth}{#2}%
- {\c!leftstyle\c!leftcolor\c!leftwidth}{#2}}%
- \setvalue{\??tk#1\v!text\c!righttext}%
- {\dodoubletexts{#1}\v!text
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}}%
- \else\ifsecondargument % new
- \letvalueempty{\??tk#1\v!text\c!lefttext}%
- \letvalueempty{\??tk#1\v!text\c!righttext}%
- \setvalue{\??tk#1\v!text\c!middletext}{\dosingletexts{#1}\v!text\c!style\c!color\c!width{#2}}%
- \else
- \dosixtupleempty\dosetuptexts[#1][\v!text ][][][][]%
- \dosixtupleempty\dosetuptexts[#1][\v!margin][][][][]%
- \dosixtupleempty\dosetuptexts[#1][\v!edge ][][][][]%
- \fi\fi\fi\fi\fi}
-
-%D Left and right texts are swapped on odd and even pages, but
-%D only when double sided typesetting is enabled.
-
-\def\dodoubletexts{\doifoddpageelse\dodoubletextsodd\dodoubletextseven}
-
-\def\dodoubletextsodd #1#2#3#4#5#6{\dosingletexts{#1}{#2}#3{#4}} % #3 => provides three arguments
-\def\dodoubletextseven#1#2#3#4#5#6{\dosingletexts{#1}{#2}#5{#6}} % #5 => provides three arguments
-
-%D The next macro will be cleaned up and made less messy and
-%D dependent.
-
-\unexpanded\def\placetextlinestrut#1%
- {\doifvalue{#1\c!strut}\v!yes{\setstrut\strut}}
-
-\def\dosingletexts#1#2#3#4#5#6%
- {\bgroup
- \defconvertedargument\ascii{#6}% no longer \defconvertedargument, this also does not permit \v!pagenumber (i.e. v!)
- \ifx\ascii\empty\else
- \dostartattributes{\??tk#1#2}#3#4\empty
- \placetextlinestrut{\??tk#1}% here !
- \doifelsemarking\ascii
- {\dolimitatetexts{\??tk#1#2#5}{\getmarking[\ascii][\v!first]}}%
- {\ifcsname\??tk->\ascii\endcsname
- \csname\??tk->\ascii\endcsname
- \else
- % #6{}{}{} -> {} needed for macros that look
- % ahead, like \uniqueMPgraphic
- \ignorecrlf\dolimitatetexts{\??tk#1#2#5}{#6{}{}{}}%
- \fi}%
- \dostopattributes
- \fi
- \egroup}
-
-\setvalue{\??tk->\v!pagenumber}{\placelocationpagenumber}
-\setvalue{\??tk->\v!date }{\currentdate}
-
-%D When specified, the texts are automatically limited in
-%D length.
-
-\def\dolimitatetexts#1#2%
- {\doifelsevaluenothing{#1}{#2}{\limitatetext{#2}{\csname#1\endcsname}{\unknown}}}
-
-%D The placement of text is hooked into the token lists
-%D associated to the area at hand.
-
-\appendtoks \placelayouttextline\v!top \topheight \to \toptextcontent
-\appendtoks \placelayouttextline\v!header\headerheight \to \headertextcontent
-\appendtoks \placelayouttextline\v!text \textheight \to \texttextcontent
-\appendtoks \placelayouttextline\v!footer\footerheight \to \footertextcontent
-\appendtoks \placelayouttextline\v!bottom\bottomheight \to \bottomtextcontent
-
-%D Texts can be disabled, moved up and ignored, depending in
-%D the \type {status} variable. This is handled by the next
-%D couple of macros.
-
-% \def\settextlinestatus#1%
-% {\edef\textlinestatus{\csname\??tk#1\c!state\endcsname}}
-
-\def\settextlinestatus#1%
- {\ifcase0\csname\??tk#1\c!n\endcsname\relax
- \edef\textlinestatus{\csname\??tk#1\c!state\endcsname}%
- \else
- \setxvalue{\??tk#1\c!n}{\the\numexpr\csname\??tk#1\c!n\endcsname-1}%
- \let\textlinestatus\v!stop
- \fi}
-
-\appendtoks
- \doifinset\v!header\floatspecification{\setxvalue{\??tk\v!header\c!n}{1}}%
- \doifinset\v!footer\floatspecification{\setxvalue{\??tk\v!footer\c!n}{1}}%
-\to \everybeforeflushedpagefloat
-
-\def\resettextlinestatus#1% postpone
- {\expandafter\gdef\csname\??tk#1\s!reset\endcsname{\global\expandafter\let\csname\??tk#1\c!state\endcsname\v!normal}}
-
-\unexpanded\def\placelayouttextline#1% #2
- {\settextlinestatus#1%
- \csname\??tk::\ifcsname\??tk::\textlinestatus\endcsname\textlinestatus\else\s!unknown\fi\endcsname#1} % {#2}
-
-\def\doifelselayouttextline#1% shown or not
- {\edef\!!stringa{\csname\??tk#1\c!state\endcsname}%
- \ifx\!!stringa\v!normal
- \@EA\firstoftwoarguments
- \else\ifx\!!stringa\v!start
- \@EAEAEA\firstoftwoarguments
- \else
- \@EAEAEA\secondoftwoarguments
- \fi\fi}
-
-\def\doifelselayoutsomeline#1% present or not
- {\edef\!!stringa{\csname\??tk#1\c!state\endcsname}%
- \ifx\!!stringa\v!none
- \@EA\secondoftwoarguments
- \else\ifx\!!stringa\v!high
- \@EAEAEA\secondoftwoarguments
- \else
- \@EAEAEA\firstoftwoarguments
- \fi\fi}
-
-% \doplacelayouttextline does the actual placement (when a non-zero height)
-
-\newconditional\resyncaftertextline
-
-% there is no need for {#1} etc since we use symbolic names
-
-\setvalue{\??tk::\v!normal}{\doplacelayouttextline}
-\setvalue{\??tk::\empty }{\doplacelayouttextline}
-
-\setvalue{\??tk::\v!none }#1#2{}
-\setvalue{\??tk::\v!stop }#1#2{}
-
-\setvalue{\??tk::\v!high}#1#2%
- {\global\settrue\resyncaftertextline
- \resettextlinestatus#1}
-
-\setvalue{\??tk::\v!empty}#1#2%
- {\resettextlinestatus#1}
-
-\setvalue{\??tk::\v!start}#1#2%
- {\resettextlinestatus#1%
- \doplacelayouttextline#1#2}
-
-\setvalue{\??tk::\v!nomarking}#1#2%
- {\bgroup
- \resettextlinestatus#1%
- \settrue\inhibitgetmarking
- \let\dogetmarking\nogetmarking % obsolete in new marking mechanism
- \doplacelayouttextline#1#2%
- \egroup}
-
-\setvalue{\??tk::\s!unknown}#1#2%
- {\global\settrue\resyncaftertextline
- \bgroup % new
- \resettextlinestatus#1%
- \csname\??tk#1\textlinestatus\endcsname
- \csname\??tk#1\v!text \textlinestatus\endcsname
- \csname\??tk#1\v!margin\textlinestatus\endcsname
- \csname\??tk#1\v!edge \textlinestatus\endcsname
- \doplacelayouttextline#1#2%
- \egroup}
-
-%D The following macro has to be called after a page
-%D is flushed.
-
-\def\resetlayouttextline#1%
- {\csname\??tk#1\s!reset\endcsname
- \global\expandafter\let\csname\??tk#1\s!reset\endcsname\relax}
-
-\def\resetlayouttextlines
- {\resetlayouttextline\v!top
- \resetlayouttextline\v!header
- \resetlayouttextline\v!text
- \resetlayouttextline\v!footer
- \resetlayouttextline\v!bottom
- \ifconditional\resyncaftertextline
- \calculateglobalvsizes
- \recalculatebackgrounds
- \global\setfalse\resyncaftertextline
- \fi}
-
-% \settext[header][text][middle][xxx][yyy]
-
-\def\settextcontent
- {\doquintupleempty\dosettextcontent}
-
-\def\dosettextcontent[#1][#2][#3][#4][#5]% header text middle text/text
- {\iffifthargument
- \setvalue{\??tk#1#2\executeifdefined{:\c!text:#3:}\c!middletext}%
- {\dodoubletexts{\??tk#1}{#2}%
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#4}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#5}}%
- \else\iffourthargument
- \setvalue{\??tk#1#2\executeifdefined{:\c!text:#3:}\c!middletext}%
- {\dodoubletexts{\??tk#1}{#2}%
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#4}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#4}}%
- \else\ifthirdargument
- \setvalue{\??tk#1#2\c!middletext}%
- {\dodoubletexts{\??tk#1}{#2}%
- {\c!leftstyle \c!leftcolor \c!leftwidth }{#3}%
- {\c!rightstyle\c!rightcolor\c!rightwidth}{#3}}%
- \fi\fi\fi}
-
-\def\resettextcontent
- {\dotripleempty\doresettextcontent}
-
-\def\doresettextcontent[#1][#2][#3]% header text middle
- {\ifthirdargument
- \letvalueempty{\??tk#1#2\executeifdefined{:\c!text:#3:}\c!middletext}%
- \else\ifsecondargument
- \letvalueempty{\??tk#1#2\c!lefttext}%
- \letvalueempty{\??tk#1#2\c!middletext}%
- \letvalueempty{\??tk#1#2\c!righttext}%
- \fi\fi}
-
-\let\settext \settextcontent % downward compatibility
-\let\resettext\resettextcontent % downward compatibility
-
-\letvalue{:\c!middle:\c!text:}\c!middletext
-\letvalue{:\c!left :\c!text:}\c!lefttext
-\letvalue{:\c!right :\c!text:}\c!righttext
-
-%D The next series of macros is not that easy to read,
-%D because they hook into the main page building macros. By
-%D using token list registers for the text content, we can
-%D easily hook in other code, like menu generators.
-%D
-%D Beware: the token lists are always expanded, also when the
-%D height of an area is zero. This is because reset actions can
-%D be part of them.
-
-\newbox\scratchpagebox
-
-% \newbox\collectedprepagecontent % only for delayed stuff
-
-% \def\flushcollectedpagecontent
-% {\ifvoid\collectedprepagecontent \else
-% \smashbox\collectedprepagecontent
-% \box\collectedprepagecontent
-% \fi}
-
-% \def\delaytillpageisflushhed#1%
-% {\global\setbox\collectedprepagecontent\hbox
-% {\ifvoid\collectedprepagecontent \else
-% \unhbox\collectedprepagecontent
-% \fi % ignore and remove not really needed
-% \ignorespaces#1\removeunwantedspaces}}
-
-\def\gettextboxes
- {\ifcase\pageornamentstate
- \dogettextboxes
- \fi}
-
-\def\dogettextboxes
- {\setbox\scratchpagebox\vbox
- {\dontcomplain
- \calculatereducedvsizes
- \swapmargins
- \offinterlineskip
-% \flushcollectedpagecontent
- \vskip\dimexpr-\topheight-\topdistance\relax
- \the\toptextcontent
- \vskip\dimexpr\topheight+\topdistance\relax
- \the\headertextcontent
- \vskip\dimexpr\headerheight+\headerdistance\relax
- \placepositionanchors
- \vskip-\textheight
- \the\texttextcontent
- \vskip\textheight
- \the\everyendoftextbody
- \vskip\footerdistance
- \the\footertextcontent
- \vskip\dimexpr\footerheight+\bottomdistance\relax
- \the\bottomtextcontent
- \vskip\bottomheight
- \vfilll}%
- \smashbox\scratchpagebox
- \box\scratchpagebox}
-
-\def\getmainbox#1#2%
- {\setbox\scratchpagebox\vbox
- {\offinterlineskip % na \paginaletter !
- \calculatereducedvsizes
- \calculatehsizes
- \swapmargins
- \vskip\dimexpr\headerheight+\headerdistance+\layoutparameter\c!textdistance\relax
- \dontleavehmode
- % \dosetanchor{text}% failed experiment
- \hbox to \makeupwidth
- {\bgroup
- \swapmargins
- \goleftonpage
- \ifdim\leftedgewidth>\zeropoint
- \the\leftedgetextcontent
- \hskip\leftedgewidth
- \fi
- \hskip\leftedgedistance
- \ifdim\leftmarginwidth>\zeropoint
- \the\leftmargintextcontent
- \hskip\leftmarginwidth
- \fi
- \hskip\leftmargindistance
- \egroup
- \mkprocesspagecontents{#2}%
- \settextpagecontent\scratchpagebox{#1}{#2}%
- \addtextbackground\scratchpagebox
- \addtextgridlayer\scratchpagebox
- \box\scratchpagebox
- \bgroup
- \hskip\rightmargindistance
- \ifdim\rightmarginwidth>\zeropoint
- \the\rightmargintextcontent
- \hskip\rightmarginwidth
- \fi
- \hskip\rightedgedistance
- \ifdim\rightedgewidth>\zeropoint
- \the\rightedgetextcontent
- \hskip\rightedgewidth
- \fi
- \egroup
- \hss}}%
- \smashbox\scratchpagebox
- \box\scratchpagebox}
-
-%D The main text area has to be combined with some additional
-%D (tracing) information.
-
-% will be stored as normal and overloaded in page-lyr and later in
-% page-spr we overload the the stored version .. evenatually i will
-% clear up the experimental mess
-
-\def\settextpagecontent#1#2#3% #2 and #3 will disappear
- {\setbox#1\hbox to \makeupwidth
- {\hss % so don't change this
- \setlayoutcomponentattribute\v!page\v!text
- \vbox \layoutcomponentboxattribute to \textheight
- {\offinterlineskip
- \freezetextwidth
- \hsize\textwidth % local variant of \sethsize
- \boxmaxdepth\maxdepth
- \noindent % content can be < \hsize
- \dopagecontents#2#3}%
- \hss}%
- \dp#1\zeropoint}
-
-%D The placement of a whole line is handled by the next two
-%D macros. These are hooked into the general purpose token
-%D list registers mentioned before.
-
-\def\ignoredlinebreak{\unskip\space\ignorespaces}
-
-\def\doplacelayouttextline#1#2%
- {\let\currentlayouttextline#1%
- \ifdim#2>\zeropoint\relax % prevents pagenumbers when zero height
- \doplacelayouttextlineindeed{#2}%
- \fi}
-
-\def\doplacelayouttextlineindeed#1%
- {\goleftonpage
- \hbox
- {\setbox\scratchpagebox\vbox to #1
- {\vsize#1\relax
- \normalbaselines
- \let\\\ignoredlinebreak
- \let\crlf\ignoredlinebreak
- \csname\??tk\currentlayouttextline\c!before\endcsname
- \doifbothsidesoverruled\dodoplacelayouttextlineright\dodoplacelayouttextlineright\dodoplacelayouttextlineleft
- \csname\??tk\currentlayouttextline\c!after\endcsname
- \kern\zeropoint}% keep the \dp, beware of \vtops, never change this!
- \dp\scratchpagebox\zeropoint
- \box\scratchpagebox}%
- \vskip-#1\relax}
-
-\def\dodoplacelayouttextlineright{\dodoplacelayouttextline\c!lefttext \c!middletext\c!righttext\zerocount\plusone}
-\def\dodoplacelayouttextlineleft {\dodoplacelayouttextline\c!righttext\c!middletext\c!lefttext \plusone\zerocount}
-
-\def\dodoplacelayouttextline#1#2#3#4#5% \hsize toegevoegd, \hss's niet meer wijzigen
- {\hbox
- {\ifdim\leftedgewidth>\zeropoint
- \dododoplacelayouttextline\leftedgewidth\currentlayouttextline\v!edge{\thelayoutleftedgeline#1}%
- \hskip\leftedgedistance
- \fi
- \ifdim\leftmarginwidth>\zeropoint
- \dododoplacelayouttextline\leftmarginwidth\currentlayouttextline\v!margin{\thelayoutleftmarginline#1#4}%
- \hskip\leftmargindistance
- \fi
- \ifdim\makeupwidth>\zeropoint
- \dododoplacelayouttextline\makeupwidth\currentlayouttextline\v!text{\thelayouttextline#1#2#3#4#5}%
- \fi
- \ifdim\rightmarginwidth>\zeropoint
- \hskip\rightmargindistance
- \dododoplacelayouttextline\rightmarginwidth\currentlayouttextline\v!margin{\thelayoutrightmarginline#3#5}%
- \fi
- \ifdim\rightedgewidth>\zeropoint
- \hskip\rightedgedistance
- \dododoplacelayouttextline\rightedgewidth\currentlayouttextline\v!edge{\thelayoutrightedgeline#3}%
- \fi}}
-
-\def\thelayoutleftedgeline#1%
- {\hss\csname\??tk\currentlayouttextline\v!edge#1\endcsname}%
-
-\def\thelayoutrightedgeline#1%
- {\csname\??tk\currentlayouttextline\v!edge#1\endcsname\hss}
-
-\def\thelayoutleftmarginline#1#2%
- {\hbox to \leftmarginwidth{\hss\csname\??tk\currentlayouttextline\v!margin#1\endcsname}%
- \hskip-\leftmarginwidth
- \hbox to \leftmarginwidth{\hss\ifcase#2\or\csname\??tk\currentlayouttextline\v!margin\c!margintext\endcsname\fi}}
-
-\def\thelayoutrightmarginline#1#2%
- {\hbox to \rightmarginwidth{\csname\??tk\currentlayouttextline\v!margin#1\endcsname\hss}%
- \hskip-\rightmarginwidth
- \hbox to \rightmarginwidth{\ifcase#2\or\csname\??tk\currentlayouttextline\v!margin\c!margintext\endcsname\fi\hss}}
-
-\def\thelayoutedgetextline{\csname\??tk\currentlayouttextline\v!text\c!marginedgetext\endcsname}
-
-\def\thelayouttextline#1#2#3#4#5%
- {\hbox to \makeupwidth{\ifcase#4\or\@@nmpre\thelayoutedgetextline\fi\csname\??tk\currentlayouttextline\v!text#1\endcsname\hss}%
- \hskip-\makeupwidth
- \hbox to \makeupwidth{\hss\csname\??tk\currentlayouttextline\v!text#2\endcsname\hss}%
- \hskip-\makeupwidth
- \hbox to \makeupwidth{\hss\csname\??tk\currentlayouttextline\v!text#3\endcsname\ifcase#5\or\@@nmpos\thelayoutedgetextline\fi}}
-
-\def\dododoplacelayouttextline#1#2#3#4%
- {\vbox % to \vsize
- {\hsize#1\relax
- \csname\??tk#2#3\c!before\endcsname
- \setlayoutcomponentattribute#2#3%
- \hbox \layoutcomponentboxattribute to #1{#4}%
- \csname\??tk#2#3\c!after\endcsname}}
-
-%D Although it is far better to use backgrounds for this
-%D purpose, one can add a rule in the following way. This
-%D method makes the rules disappear in case of an empty text
-%D line. Consider this a feature.
-%D
-%D \starttyping
-%D \setupheadertexts[left][right]
-%D
-%D \setupheader[text][after=\hrule,style=bold]
-%D
-%D \starttext
-%D \input tufte \page
-%D \setupheader[state=empty]
-%D \input tufte \page
-%D \stoptext
-%D \stoptyping
-
-%D The next twosome will be done differently (using an
-%D existing auxiliary macro).
-
-% \def\@@nmpre#1{\setbox0\hbox{#1}\ifdim\wd0=\zeropoint\else\unhbox0\tfskip\fi}
-% \def\@@nmpos#1{\setbox0\hbox{#1}\ifdim\wd0=\zeropoint\else\tfskip\unhbox0\fi}
-
-% cleaner
-%
-% \def\@@nmpre#1{\doiftext{#1}{{#1}\tfskip}}
-% \def\@@nmpos#1{\doiftext{#1}{\tfskip{#1}}}
-%
-% newer
-%
-% \def\@@nmprepos#1#2#3#4#5%
-% {\doifelsenothing\@@nmwidth
-% {\doiftext{#5}{#1{#5}#2}}
-% {\doiftext{#5}{\hbox to \@@nmwidth{#3{#5}#4}}}}
-%
-% \def\@@nmpre{\@@nmprepos\empty\tfskip\relax\hss}
-% \def\@@nmpos{\@@nmprepos\tfskip\empty\hss\relax}
-%
-% faster
-
-\def\@@nmpre#1%
- {\begingroup
- \setbox\scratchbox\normalhbox{\settrialtypesetting\ignorespaces#1\removeunwantedspaces}%
- \ifzeropt\wd\scratchbox\else
- \doifelsenothing\@@nmwidth
- {\box\scratchbox\tfskip}
- {\hbox to \@@nmwidth{\box\scratchbox\hss}}%
- \fi
- \endgroup}
-
-\def\@@nmpos#1%
- {\begingroup
- \setbox\scratchbox\normalhbox{\settrialtypesetting\ignorespaces#1\removeunwantedspaces}%
- \ifzeropt\wd\scratchbox\else
- \doifelsenothing\@@nmwidth
- {\tfskip\box\scratchbox}
- {\hbox to \@@nmwidth{\hss\box\scratchbox}}%
- \fi
- \endgroup}
-
-%D This code will move to \type {page-flt.tex}.
-
-\appendtoks \placerightmarginblock \hskip-\rightmarginwidth \to \rightmargintextcontent
-\appendtoks \placeleftmarginblock \hskip-\leftmarginwidth \to \leftmargintextcontent
-
-%D The next hook will later be used for keeping track of
-%D positions, i.e.\ it will provide a proper (page
-%D dependent) reference point.
-
-\ifx\undefined\placepositionanchors
- \unexpanded\def\placepositionanchors{\vskip\textheight}
-\fi
-
-%D \macros
-%D {definetext}
-%D
-%D Some macros ago, we implemented the \type {status} option
-%D \type {unknown}. This one is used to take care of
-%D symbolic texts handlers.
-%D
-%D \showsetup{definetext}
-%D
-%D The next example demonstrates how we can use this
-%D mechanism to provide page (event) dependent text lines.
-%D
-%D \starttyping
-%D \definetext[chapter][footer][pagenumber]
-%D \setuphead[chapter][header=high,footer=chapter]
-%D \setupheadertexts[pagenumber]
-%D \setupfootertexts[left][right]
-%D \chapter{eerste} \dorecurse{20}{\input tufte \relax}
-%D \chapter{tweede} \dorecurse{20}{\input tufte \relax}
-%D \stoptyping
-
-\unexpanded\def\definetext
- {\doseventupleempty\dodefinetext}
-
-\def\dodefinetext[#1][#2][#3][#4][#5][#6][#7]%
- {\ifseventhargument
- \setvalue{\??tk#2#3#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4][#5][#6][#7]}%
- \else\ifsixthargument
- \setvalue{\??tk #2#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4][#5][#6]}%
- \else\iffifthargument
- \setvalue{\??tk#2#3#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4][#5]}%
- \else\iffourthargument
- \setvalue{\??tk #2#1}{\dosixtupleempty\dosetuptexts[#2][#3][#4]}%
- \else
- \setvalue{\??tk #2#1}{\dosixtupleempty\dosetuptexts[#2][#3]}%
- \fi\fi\fi\fi}
-
-%D The rest of this file is dedicated to setting up the
-%D texts. This code is not that impressive.
-
-\setupheadertexts [\v!text] [] []
-\setupheadertexts [\v!margin] [] []
-\setupheadertexts [\v!edge] [] []
-
-\setupfootertexts [\v!text] [] []
-\setupfootertexts [\v!margin] [] []
-\setupfootertexts [\v!edge] [] []
-
-\setuptexttexts [\v!text] [] []
-\setuptexttexts [\v!margin] [] []
-\setuptexttexts [\v!edge] [] []
-
-\setupbottomtexts [\v!text] [] []
-\setupbottomtexts [\v!margin] [] []
-\setupbottomtexts [\v!edge] [] []
-
-\setuptoptexts [\v!text] [] []
-\setuptoptexts [\v!margin] [] []
-\setuptoptexts [\v!edge] [] []
-
-% alternative
-%
-% \def\resetlayouttekst%
-% {\dodoubleempty\doresetlayouttekst}
-%
-% \def\doresetlayouttekst[#1][#2]%
-% {\ifsecondargument
-% \dodoresetlayouttekst[#1][#2]%
-% \else
-% \dodoresetlayouttekst[#1][\v!tekst]%
-% \fi}
-%
-% \def\dodoresetlayouttekst[#1][#2]%
-% {...}
-%
-% \def\docommand#1%
-% {\resetlayouttekst[#1][\v!tekst]%
-% \resetlayouttekst[#1][\v!marge]%
-% \resetlayouttekst[#1][\v!rand]}
-
-%D We combine a lot of similar settings in a macro that
-%D we will later dispose.
-
-\def\dodocommand[#1][#2]%
- {\getparameters
- [\??tk#1#2]
- [%\c!state=\v!normal, % moved
- \c!before=,% both global and local are used
- \c!after=,% both global and local are used
- \c!strut=,% the local one, not (yet) used
- \c!style=\csname\??tk#1\c!style\endcsname,% hm, got lost
- \c!color=\csname\??tk#1\c!color\endcsname,% hm, got lost
- \c!lefttext=,
- \c!middletext=,
- \c!righttext=,
- \c!marginedgetext=,
- \c!margintext=,
- \c!width=]%
- \inheritparameter[\??tk#1#2][\c!leftstyle ][\c!style ]%
- \inheritparameter[\??tk#1#2][\c!rightstyle][\c!style ]%
- \inheritparameter[\??tk#1#2][\c!leftcolor ][\c!color ]%
- \inheritparameter[\??tk#1#2][\c!rightcolor][\c!color ]%
- \inheritparameter[\??tk#1#2][\c!leftwidth ][\c!width]%
- \inheritparameter[\??tk#1#2][\c!rightwidth][\c!width]}
-
-\def\docommand#1%
- {\dodocommand[#1][\v!text]%
- \dodocommand[#1][\v!margin]%
- \dodocommand[#1][\v!edge]}
-
-\docommand\v!top
-\docommand\v!header
-\docommand\v!footer
-\docommand\v!text
-\docommand\v!bottom
-
-\let\docommand \relax
-\let\dodocommand\relax
-
-%D While the header and footer lines are moved away from the
-%D main text, the top and bottom lines are centered.
-
-\setuptop [\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
-\setupheader[\c!state=\v!normal,\c!n=0,\c!before=, \c!after=\vss,\c!strut=\v!yes]
-\setuptext [\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
-\setupfooter[\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=, \c!strut=\v!yes]
-\setupbottom[\c!state=\v!normal,\c!n=0,\c!before=\vss,\c!after=\vss,\c!strut=]
-
-\setuptop [\c!style=,\c!color=]
-\setupheader[\c!style=,\c!color=]
-\setuptext [\c!style=,\c!color=]
-\setupfooter[\c!style=,\c!color=]
-\setupbottom[\c!style=,\c!color=]
-
-\protect \endinput