%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