diff options
Diffstat (limited to 'tex/context/base/page-mak.mkiv')
-rw-r--r-- | tex/context/base/page-mak.mkiv | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/tex/context/base/page-mak.mkiv b/tex/context/base/page-mak.mkiv new file mode 100644 index 000000000..45a1f1167 --- /dev/null +++ b/tex/context/base/page-mak.mkiv @@ -0,0 +1,233 @@ +%D \module +%D [ file=page-mak, % copied from main-001, +%D version=1997.03.31, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Simple MakeUp, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\writestatus{loading}{ConTeXt Page Macros / MakeUp} + +\unprotect + +%D \macros +%D {definemakeup, setupmakeup, startmakeup} +%D +%D A makeup is a separate page, like a title page or colofon. +%D There is one standard makeup page, but you can define more +%D if needed. +%D +%D \starttyping +%D \startstandardmakeup +%D My Fancy Title +%D \stopstandardmakeup +%D \stoptyping +%D +%D The associated commands are: +%D +%D \showsetup{definemakeup} +%D \showsetup{setupmakeup} +%D \showsetup{startmakeup} + +\def\definemakeup + {\dodoubleargument\dodefinemakeup} + +\def\dodefinemakeup[#1][#2]% + {\getparameters + [\??do#1]% + [\c!width=\innermakeupwidth, % example in manual / was \makeupwidth + \c!height=\textheight, % example in manual + \c!voffset=\!!zeropoint, % example in manual + \c!hoffset=\!!zeropoint, % example in manual + \c!commands=, + \c!setups=, + \c!page=\v!right, + \c!doublesided=\v!empty, + \c!before=, + \c!top=\vss, + \c!bottom=\vss, + \c!after=, + \c!bottomstate=\v!normal, + \c!topstate=\v!normal, + \c!textstate=\v!normal, + \c!headerstate=\v!stop, + \c!footerstate=\v!stop, + \c!pagestate=\v!stop, % in manual ! ! ! + \c!color=, + \c!align=, + #2]% + \setvalue{\e!start#1\e!makeup}{\startmakeup[#1]}% + \setvalue{\e!stop #1\e!makeup}{\stopmakeup}} + +\def\setupmakeup + {\dodoubleargument\dosetupmakeup} + +\def\dosetupmakeup[#1]% + {\getparameters[\??do#1]} + +%D This will save us some 375 bytes in the format file. + +\def\makeupparameter#1{\getvalue{\??do\currentmakeup#1}} + +%D The \type{\start}||\type{\stop} macros are used for both +%D the direct and indirect way. The parameterless call will +%D build a simple box. + +\newtoks\everymakeup + +\appendtoks \postponemarks \to \everymakeup + +\let\currentmakeup\empty + +\def\startmakeup + {\dodoubleempty\dostartmakeup} + +\def\dostartmakeup[#1][#2]% + {\bgroup + \edef\currentmakeup{#1}% + \the\everymakeup + \iffirstargument + \setupmakeup[\currentmakeup][#2]% + \let\stopmakeup\dodostopmakeup + \expandafter \dodostartmakeup + \else + \let\stopmakeup\donostopmakeup + \expandafter \donostartmakeup + \fi} + +%D The simple case: + +\def\donostartmakeup % textwidth ? + {\page + \setupheader[\c!state=\v!empty]% + \setupfooter[\c!state=\v!empty]% + \setsystemmode\v!makeup + \vbox to \textheight\bgroup\hsize\textwidth} + +\def\donostopmakeup + {\egroup + \flushmarks % new, here, else empty pages + \page + \egroup} + +%D The normal one: + +\newbox\makeupbox + +\def\dodostartmakeup + {\doifvaluesomething{\??do\currentmakeup\c!page} + {\ExpandFirstAfter\page[\makeupparameter\c!page]}% + \pagetype[\currentmakeup]% + \setsystemmode\v!makeup + \setupmakeuplayout + \makeupparameter\c!commands % hm, what is this one doing here ? + \startregistercolor[\makeupparameter\c!color]% + \forgetall % else indented flush + \global\setbox\makeupbox\vbox to \makeupparameter\c!height + \bgroup + \setups[\makeupparameter\c!setups]% + \hsize\makeupparameter\c!width + \doifsomething{\makeupparameter\c!align} + {\setupalign[\makeupparameter\c!align]}% + \makeupparameter\c!top} + +\def\dodostopmakeup + {\endgraf + \makeupparameter\c!bottom + \egroup + \flushmarks % new, here, else empty pages + \stopregistercolor + \doflushmakeup + \egroup + \calculatehsizes + \calculatevsizes} + +%D Selective page processing is handled here. (Why?) + +\def\doflushmakeup + {\ifprocessingpages + \ifpageselected + \doshipoutmakeup + \fi + \else + \ifpageselected \else + \doshipoutmakeup + \fi + \fi + \ifselectingpages + \global\pageselectedfalse + \fi} + +% \def\pushpagestate{\globalpushmacro\@@pnstate} +% \def\poppagestate {\globalpopmacro \@@pnstate} + +\def\doshipoutmakeup + {\pushpagestate % new + \makeupparameter\c!before + \setbox\makeupbox\vbox{\hbox{\color[\makeupparameter\c!color]{\box\makeupbox}}}% + % \ifgridsnapping + % new per 22/6/2006 + \ifdim\ht\makeupbox>\vsize + \ht\makeupbox\vsize + \fi + % \fi + \box\makeupbox + \setuppagenumber[\c!state=\makeupparameter\c!pagestate]% + \setupmakeuplayout + \page + \makeupparameter\c!after + \relax % voor fi + \ifdoublesided \ifodd\realpageno\else + \processaction + [\makeupparameter\c!doublesided] + [ \v!yes=>\null + \page, + \v!empty=>{\setupmakeuplayout + \page[\v!blank]% + \null + \page}]% + \fi \fi + \poppagestate} % new + +%D The text surrounding the main body text can be influenced +%D by setting their associated status variables. The +%D connection between them is made by the following macro + +\def\setupmakeuplayout + {\setupfooter[\c!state=\makeupparameter\c!footerstate]% + \setupheader[\c!state=\makeupparameter\c!headerstate]% + \setuptext [\c!state=\makeupparameter\c!textstate]% + \setupbottom[\c!state=\makeupparameter\c!bottomstate]% + \setuptop [\c!state=\makeupparameter\c!topstate]% + % this is needed, but no \setuplayout here; fails in texexec --fig=c + \recalculatelayout} + +%D The standard page template is defined as follows: + +\definemakeup + [\v!standard] + [\c!width=\innermakeupwidth, + \c!height=\textheight, + \c!voffset=\!!zeropoint, + \c!hoffset=\!!zeropoint, + \c!page=\v!right, + \c!doublesided=\v!empty] + +\definemakeup + [\v!text] + [\c!topstate=\v!start, + \c!headerstate=\v!start, + \c!textstate=\v!start, + \c!footerstate=\v!start, + \c!bottomstate=\v!start, + \c!doublesided=\v!no, + \c!page=\v!yes, + \c!top=\pseudostrut\ignorespaces, + \c!bottom=\obeydepth\vss] + +\protect \endinput |