%D \module %D [ file=meta-pag, %D version=1999.07.10, %D title=\METAPOST\ Graphics, %D subtitle=Initialization, %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. %D These definitions used to be part of the old \type %D {core-mps} file, later changed into \type {meta-ini}, but %D keeping them separate is cleaner. \writestatus{loading}{MetaPost Graphics / Page Data Management} \unprotect \appendtoks if unknown context_page: input mp-page; fi; \to \MPextensions %D The next few macros tell \METAPOST\ how the \CONTEXT\ %D pagebody looks. \appendtoks boolean PageStateAvailable,OnRightPage,InPageBody; PageStateAvailable:=true; \to \MPextensions \appendtoks OnRightPage:=true; InPageBody:=\ifinpagebody true \else false \fi; \to \MPinitializations \appendtoks def LoadPageState = OnRightPage:=\MPonrightpage; OnOddPage:=\MPonoddpage; RealPageNumber:=\the\realpageno; PageNumber:=\the\pageno; NOfPages:=\lastpage; PaperHeight:=\the\papierhoogte; PaperWidth:=\the\papierbreedte; PrintPaperHeight:=\the\printpapierhoogte; PrintPaperWidth:=\the\printpapierbreedte; TopSpace:=\the\kopwit; BottomSpace:=\the\bodemwit; BackSpace:=\the\rugwit; CutSpace:=\the\snijwit; MakeupHeight:=\the\zethoogte; MakeupWidth:=\the\zetbreedte; TopHeight:=\the\bovenhoogte; TopDistance:=\@the\bovenafstand; HeaderHeight:=\the\hoofdhoogte; HeaderDistance:=\@the\hoofdafstand; TextHeight:=\the\teksthoogte; FooterDistance:=\@the\voetafstand; FooterHeight:=\the\voethoogte; BottomDistance:=\@the\onderafstand; BottomHeight:=\the\onderhoogte; LeftEdgeWidth:=\the\linkerrandbreedte; LeftEdgeDistance:=\@the\linkerrandafstand; LeftMarginWidth:=\the\linkermargebreedte; LeftMarginDistance:=\@the\linkermargeafstand; TextWidth:=\the\tekstbreedte ; RightMarginDistance:=\@the\rechtermargeafstand; RightMarginWidth:=\the\rechtermargebreedte; RightEdgeDistance:=\@the\rechterrandafstand; RightEdgeWidth:=\the\rechterrandbreedte; InnerMarginDistance:=\@the\innermargindistance; InnerMarginWidth:=\the\innermarginwidth; OuterMarginDistance:=\@the\outermargindistance; OuterMarginWidth:=\the\outermarginwidth; InnerEdgeDistance:=\@the\inneredgedistance; InnerEdgeWidth:=\the\inneredgewidth; OuterEdgeDistance:=\@the\outeredgedistance; OuterEdgeWidth:=\the\outeredgewidth; PageOffset:=\the\pageoffset; PageDepth:=\the\pagedepth; LayoutColumns:=\the\layoutcolumns; LayoutColumnDistance:=\the\layoutcolumndistance; LayoutColumnWidth:=\the\layoutcolumnwidth; enddef; \to \MPinitializations \def\MPonrightpage{true} \def\MPonoddpage {true} \def\freezeMPpagelayout {\doifbothsides \def\MPonrightpage{true}% \orsideone \def\MPonrightpage{true}% \orsidetwo \def\MPonrightpage{false}% \od \edef\MPonoddpage{\doifoddpageelse{true}{false}}} \iffixedlayoutdimensions \let\freezeMPlayout\relax \else \def\freezeMPlayout% must be done more efficient {\freezedimenmacro\bovenafstand \freezedimenmacro\hoofdafstand \freezedimenmacro\voetafstand \freezedimenmacro\onderafstand \freezedimenmacro\linkerrandafstand \freezedimenmacro\linkermargeafstand \freezedimenmacro\rechtermargeafstand \freezedimenmacro\rechterrandafstand} \fi %D We need to freeze the pagelayout before the backgrounds %D are build, because the overlay will temporarily become %D zero (overlay). \appendtoks \freezeMPpagelayout \to \everybeforepagebody %D By freezing these value every graphic, we can use layout %D variables that change halfways a page, whatever use that %D has. \prependtoks \calculatereducedvsizes % this is really needed \freezeMPpagelayout \freezeMPlayout % to be used grouped \to \everyMPgraphic %D The next feature provides information about for instance %D column positions. This is an experimental feature, %D introduced when we needed backgrounds in columns (fill||in %D questions as implemented in a private module). %D %D See \type {mp-page.mp} for the definition of the macros: %D %D \startabulatie[|tl|l|p|] %D \NC ResetTextAreas \NC no arguments \NC %D reset areas on page \NC \NR %D \NC RegisterTextArea \NC x, y, w, h \NC %D adds area to the list \NC \NR %D \NC TextAreaX,Y,W,H,XY,WH \NC x and/or y \NC %D reports offsets and dimensions \NC \NR %D \stoptabulatie %D %D The \type {TextArea*} macros can be used to determine %D overlap. \newcounter\currentMPtextareadata \newtoks\MPsavedtextareadata \newtoks\MPtextareadata \newtoks\MPlocaltextareadata % optimaliseren voor herhaling \def\registerMPtextarea#1% {\ifpositioning \bgroup \doglobal\increment\currentMPtextareadata %\hpos{gbd:\currentMPtextareadata}{#1}% \hpos{gbd:\currentMPtextareadata}% {\iftracetextareas\boxrulewidth1.5pt\ruledhbox\fi{#1}}% \edef\!!stringa{gbd:\currentMPtextareadata}% \edef\!!stringa{RegisterTextArea(% \MPx\!!stringa,\MPy\!!stringa,% \MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}% \@EA \doglobal \@EA \appendtoks \!!stringa \to \MPtextareadata \egroup \else \hbox{#1}% \fi} \def\registerMPlocaltextarea#1% {\ifpositioning \bgroup \doglobal\increment\currentMPtextareadata %\hpos{gbd:\currentMPtextareadata}{#1}% \hpos{gbd:\currentMPtextareadata}% {\iftracetextareas\boxrulewidth3pt\ruledhbox\fi{#1}}% \edef\!!stringa{gbd:\currentMPtextareadata}% \edef\!!stringa{RegisterLocalTextArea(% \MPx\!!stringa,\MPy\!!stringa,% \MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}% \global\MPlocaltextareadata\@EA{\!!stringa}% \egroup \else \hbox{#1}% \fi} \def\resetMPlocaltextarea {\global\MPlocaltextareadata\emptytoks} \appendtoks path PlainTextArea; \to \MPextensions \appendtoks ResetTextAreas; \the\MPsavedtextareadata; SaveTextAreas; ResetTextAreas; \the\MPtextareadata; \the\MPlocaltextareadata; PlainTextArea:=boundingbox(\MPxy{text:\realfolio}--\MPxy{text:\realfolio} shifted (\MPw{text:\realfolio},\MPh{text:\realfolio})); \to \MPinitializations \appendtoks \global\MPsavedtextareadata\MPtextareadata \global\MPtextareadata \emptytoks \global\MPlocaltextareadata\emptytoks \to \everyshipout \protect \endinput