%D \module
%D   [       file=page-run,
%D        version=2000.10.20,
%D          title=\CONTEXT\ Page Macros,
%D       subtitle=Runtime Macros,
%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 / Runtime Macros}

\unprotect

\gdef\doshowprint[#1][#2][#3]%
  {\framed
     [\c!offset=\v!overlay,
      \c!strut=\v!no]
     {\forgetall
      \dontcomplain
      \globaldefs\minusone
      \dimen\zerocount\pagegoal
      \definepapersize[X][\c!width=4em, \c!height=6em]%
      \definepapersize[Y][\c!width=12em,\c!height=14em]%
      \setuppapersize[#1,X][#2,Y]%
      \setuplayout[#3]%
      \setbox\zerocount\vbox
        {\framed
          [\c!offset=\v!overlay,\c!strut=\v!no,
           \c!width=\paperwidth,\c!height=\paperheight]
          {\ss ABC\par DEF}}%
      \doublesidedfalse
      \def\cutmarklength{.5em}%
      \addpagecutmarks \zerocount
      \replicatepagebox\zerocount
      \scalepagebox    \zerocount
      \mirrorpaperbox  \zerocount
      \orientpaperbox  \zerocount
      \centerpagebox   \zerocount
      \mirrorprintbox  \zerocount
      \orientprintbox  \zerocount
      \offsetprintbox  \zerocount
      \pagegoal\dimen\zerocount
      \box0}}

\gdef\showprint
  {\dotripleempty\doshowprint}

% \switchnaarkorps[8pt]
%
% \startcombinatie[4*4]
%   {\toonprint}                                       {\strut}
%   {\toonprint[][][plaats=midden]}                    {\type{plaats=midden}}
%   {\toonprint[][][plaats=midden,markering=aan]}      {\type{markering=aan}\break
%                                                      \type{plaats=midden}}
%   {\toonprint[][][plaats=midden,markering=aan,nx=2]} {\type{markering=aan}\break
%                                                      \type{plaats=midden}\break
%                                                      \type{nx=2}}
%   {\toonprint[][][plaats=links]}                     {\type{plaats=links}}
%   {\toonprint[][][plaats=rechts]}                    {\type{plaats=rechts}}
%   {\toonprint[][][plaats={links,onder}]}             {\type{plaats={links,onder}}}
%   {\toonprint[][][plaats={rechts,onder}]}            {\type{plaats={rechts,onder}}}
%   {\toonprint[][][nx=2,ny=1]}                        {\type{nx=2,ny=1}}
%   {\toonprint[][][nx=1,ny=2]}                        {\type{nx=1,ny=2}}
%   {\toonprint[][][nx=2,ny=2]}                        {\type{nx=2,ny=2}}
%   {\toonprint[][][nx=2,ny=2,plaats=midden]}          {\type{nx=2,ny=2}\break
%                                                       \type{plaats=midden}}
%   {\toonprint[][][rugoffset=3pt]}                    {\type{rugoffset=.5cm}}
%   {\toonprint[][][kopoffset=3pt]}                    {\type{kopoffset=.5cm}}
%   {\toonprint[][][schaal=1.5]}                       {\type{schaal=1.5}}
%   {\toonprint[][][schaal=0.8]}                       {\type{schaal=0.8}}
% \stopcombinatie
%
% \startcombinatie[3*4]
%   {\toonprint[liggend][][plaats=midden]}              {\type{liggend}}
%   {\toonprint[][liggend][plaats=midden]}              {\strut\break\type{liggend}}
%   {\toonprint[liggend][liggend][plaats=midden]}       {\type{liggend}\break\type{liggend}}
%   {\toonprint[90][][plaats=midden]}                   {\type{90}}
%   {\toonprint[][90][plaats=midden]}                   {\strut\break\type{90}}
%   {\toonprint[90][90][plaats=midden]}                 {\type{90}\break\type{90}}
%   {\toonprint[180][][plaats=midden]}                  {\type{180}}
%   {\toonprint[][180][plaats=midden]}                  {\strut\break\type{180}}
%   {\toonprint[180][180][plaats=midden]}               {\type{180}\break\type{180}}
%   {\toonprint[gespiegeld][][plaats=midden]}           {\type{gespiegeld}}
%   {\toonprint[][gespiegeld][plaats=midden]}           {\strut\break\type{gespiegeld}}
%   {\toonprint[gespiegeld][gespiegeld][plaats=midden]} {\type{gespiegeld}\break\type{gespiegeld}}
% \stopcombinatie

% maybe we will have page-run.lua

\startluacode
local function todimen(name,unit,fmt)
    return number.todimen(tex.dimen[name],unit,fmt)
end

local function showdimension(name)
    context.NC()
    context.tex(interfaces.interfacedcommand(name))
    context.NC()
    context(todimen(name,"pt","%0.4fpt"))
    context.NC()
    context(todimen(name,"cm","%0.4fcm"))
    context.NC()
    context(todimen(name,"bp","%0.4fbp"))
    context.NC()
    context(todimen(name,"dd","%0.4fdd"))
    context.NC()
    context.NR()
end

local function showmacro(name)
    context.NC()
    context.tex(interfaces.interfacedcommand(name))
    context.NC()
    context.getvalue(name)
    context.NC()
    context.NR()
end

local function reportdimension(name)
    commands.writestatus("layout",string.format("%-24s %12s %12s %12s %12s",
        interfaces.interfacedcommand(name),
        todimen(name,"pt","%0.4fpt"),
        todimen(name,"cm","%0.4fcm"),
        todimen(name,"bp","%0.4fbp"),
        todimen(name,"dd","%0.4fdd")
    ))
end

function commands.showlayoutvariables()

    if tex.count.textlevel == 0 then

        -- especially for Luigi:

        reportdimension("paperheight")
        reportdimension("paperwidth")
        reportdimension("printpaperheight")
        reportdimension("printpaperwidth")
        reportdimension("topspace")
        reportdimension("backspace")
        reportdimension("makeupheight")
        reportdimension("makeupwidth")
        reportdimension("topheight")
        reportdimension("topdistance")
        reportdimension("headerheight")
        reportdimension("headerdistance")
        reportdimension("textheight")
        reportdimension("footerdistance")
        reportdimension("footerheight")
        reportdimension("bottomdistance")
        reportdimension("bottomheight")
        reportdimension("leftedgewidth")
        reportdimension("leftedgedistance")
        reportdimension("leftmarginwidth")
        reportdimension("leftmargindistance")
        reportdimension("textwidth")
        reportdimension("rightmargindistance")
        reportdimension("rightmarginwidth")
        reportdimension("rightedgedistance")
        reportdimension("rightedgewidth")
        reportdimension("bodyfontsize")
        reportdimension("lineheight")

    else

        context.starttabulate { "|l|Tr|Tr|Tr|Tr|" }

            showdimension("paperheight")
            showdimension("paperwidth")
            showdimension("printpaperheight")
            showdimension("printpaperwidth")
            showdimension("topspace")
            showdimension("backspace")
            showdimension("makeupheight")
            showdimension("makeupwidth")
            showdimension("topheight")
            showdimension("topdistance")
            showdimension("headerheight")
            showdimension("headerdistance")
            showdimension("textheight")
            showdimension("footerdistance")
            showdimension("footerheight")
            showdimension("bottomdistance")
            showdimension("bottomheight")
            showdimension("leftedgewidth")
            showdimension("leftedgedistance")
            showdimension("leftmarginwidth")
            showdimension("leftmargindistance")
            showdimension("textwidth")
            showdimension("rightmargindistance")
            showdimension("rightmarginwidth")
            showdimension("rightedgedistance")
            showdimension("rightedgewidth")
            context.NR()
            showdimension("bodyfontsize")
            showdimension("lineheight")
            context.NR()
            showmacro("strutheightfactor")
            showmacro("strutdepthfactor")
            showmacro("topskipfactor")
            showmacro("maxdepthfactor")

        context.stoptabulate()

    end

end

function commands.showlayout()

    if tex.count.textlevel == 0 then

        commands.showlayoutvariables()

    else

        context.page()
        context.bgroup()
        context.showframe()
        context.setuplayout { marking = interfaces.variables.on }
        for i=1,4 do
            commands.showlayoutvariables()
            context.page()
        end
        context.egroup()

    end

end
\stopluacode

\gdef\doshowframe[#1][#2]%
  {\ifsecondargument
     \setupbackgrounds
       [\v!page]
       [\c!frame=\v!on,
        \c!corner=\v!rectangular,
        \c!frameoffset=\!!zeropoint,
        \c!framedepth=\!!zeropoint,
        \c!framecolor=layout:page]
     \setupbackgrounds
       [#1][#2]
       [\c!background=,
        \c!frame=\v!on,
        \c!corner=\v!rectangular,
        \c!frameoffset=\!!zeropoint,
        \c!framedepth=\!!zeropoint,
        \c!framecolor=]
   \else\iffirstargument
     \showframe
       [\v!header,\v!text,\v!footer]
       [#1]
   \else
     \showframe
       [\v!top,\v!header,
        \v!text,
        \v!footer,\v!bottom]
       [\v!leftedge,\v!leftmargin,
        \v!text,
        \v!rightmargin,\v!rightedge]
   \fi\fi
   \setupbackgrounds
     [\c!state=\v!repeat]}

\gdef\showframe
  {\dodoubleempty\doshowframe}

\gdef\showsetups
  {\ctxcommand{showlayoutvariables()}}

\gdef\showlayout % interfereert lelijk met een \typefile er na
  {\ctxcommand{showlayout()}}

\gdef\showmargins
  {\starttabulate
   \NC asynchrone   \NC \doifoddpageelse     {odd}   {even} \NC \NR
   \NC synchrone    \NC \doifrightpageelse   {right} {left} \NC \NR
   \NC right margin \NC \the\rightmarginwidth               \NC \NR
   \NC left margin  \NC \the\leftmarginwidth                \NC \NR
   \NC outer margin \NC \the\outermarginwidth               \NC \NR
   \NC inner margin \NC \the\innermarginwidth               \NC \NR
   \stoptabulate}

\protect \endinput
