diff options
Diffstat (limited to 'tex/context/base/page-txt.mkiv')
-rw-r--r-- | tex/context/base/page-txt.mkiv | 801 |
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 |