summaryrefslogtreecommitdiff
path: root/tex/context/base/core-box.tex
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/core-box.tex')
-rw-r--r--tex/context/base/core-box.tex518
1 files changed, 518 insertions, 0 deletions
diff --git a/tex/context/base/core-box.tex b/tex/context/base/core-box.tex
new file mode 100644
index 000000000..fe52203ab
--- /dev/null
+++ b/tex/context/base/core-box.tex
@@ -0,0 +1,518 @@
+%D \module
+%D [ file=core-box,
+%D version=2002.04.12,
+%D title=\CONTEXT\ Box Macros,
+%D subtitle=New 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.
+
+%D This module contains all kind of macros for moving content
+%D around. Many macros here come from other modules, but
+%D depencies made it more clear to isolate them.
+
+% \placeornament
+
+\unprotect
+
+\definelayer[\v!tekst-2][\c!positie=\v!ja]
+\definelayer[\v!tekst-1][\c!positie=\v!ja]
+\definelayer[\v!tekst+1][\c!positie=\v!ja]
+\definelayer[\v!tekst+2][\c!positie=\v!ja]
+
+\def\internaltextoverlay#1% will become more generic and installable
+ {\startoverlay % i.e. probably an overlay by itself
+ {\positionoverlay{\v!tekst#1}} % see later
+ {\composedlayer {\v!tekst#1}}
+ \stopoverlay}
+
+%\def\internaltextoverlay#1%
+% {\hbox to \zeropoint{\positionoverlay{\v!tekst#1}\hss}%
+% \composedlayer{\v!tekst#1}}
+
+\defineoverlay[\v!tekst-2][\internaltextoverlay{-2}]
+\defineoverlay[\v!tekst-1][\internaltextoverlay{-1}]
+\defineoverlay[\v!tekst+1][\internaltextoverlay{+1}]
+\defineoverlay[\v!tekst+2][\internaltextoverlay{+2}]
+
+% to be documented
+
+\definelayer[anchor]
+
+\def\anchor
+ {\dosingleargument\doanchor}
+
+\def\doanchor[#1]%
+ {\ifundefined{\??an#1}\@EA\dodoanchor\else\@EA\nonoanchor\fi[#1]}
+
+\def\nonoanchor[#1]%
+ {\getvalue{\??an#1}}
+
+\def\dodoanchor[#1]%
+ {\dotripleempty\dododoanchor[#1]}
+
+\def\dododoanchor
+ {\ifthirdargument
+ \expandafter\dodoanchorT
+ \else
+ \expandafter\dodoanchorS
+ \fi}
+
+\def\dodoanchorS[#1][#2][#3]%
+ {\dodoanchorT[#1][#2][#2]}
+
+\def\dodoanchorT[#1][#2][#3]%
+ {\dowithnextbox
+ {\bgroup
+ \checktextbackgrounds
+ \setbox\scratchbox\null
+ \wd\scratchbox\wd\nextbox
+ \ht\scratchbox\ht\nextbox
+ \dp\scratchbox\dp\nextbox
+ \setlayer
+ [anchor]
+ [\c!breedte=\wd\scratchbox,
+ \c!hoogte=\ht\scratchbox,
+ \c!offset=\!!zeropoint,
+ #2,#3]
+ {\setlayer[#1]{\box\nextbox}}%
+ \framed
+ [#2,
+ \c!achtergrond=anchor,
+ \c!offset=\v!overlay,
+ \c!kader=\v!uit,
+ #3]
+ {\box\scratchbox}%
+ \egroup}%
+ \vbox}
+
+\def\defineanchor
+ {\doquadrupleempty\dodefineanchor}
+
+\def\dodefineanchor[#1][#2][#3][#4]%
+ {\setvalue{\??an#1}{\dodefinedanchor[#2][#3][#4]}}
+
+\def\dodefinedanchor[#1][#2][#3]%
+ {\def\docommando[##1][##2]%
+ {\ifsecondargument
+ \def\next{\dodoanchorT[#1][#2,##1][#3,##2]}%
+ \else\iffirstargument
+ \def\next{\dodoanchorT[#1][#2,##1][#2,##1]}%
+ \else
+ \def\next{\dodoanchorT[#1][#2][#3]}%
+ \fi\fi
+ \next}%
+ \dodoubleempty\docommando}
+
+\def\@@collectorbox{@@collectorbox}
+
+\def\definecollector
+ {\dodoubleargument\dodefinecollector}
+
+\def\dodefinecollector[#1][#2]%
+ {\ifundefined{\@@collectorbox#1}%
+ \expandafter\newbox\csname\@@collectorbox#1\endcsname
+ \fi
+ \resetcollector[#1]%
+ \setupcollector
+ [#1]
+ [\c!status=\v!start,
+ \c!x=\!!zeropoint,\c!y=\!!zeropoint,
+ \c!offset=\!!zeropoint,\c!rotatie=, % geen 0 !
+ \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint,
+ \c!plaats=rb,\c!hoek=,#2]}
+
+\def\setupcollector
+ {\dodoubleargument\dosetupcollector}
+
+\def\dosetupcollector[#1][#2]%
+ {\def\docommando##1{\getparameters[\??cb##1][#2]}%
+ \processcommalist[#1]\docommando}
+
+\def\setcollector
+ {\dodoubleargument\dosetcollector}
+
+\def\dosetcollector[#1][#2]%
+ {\bgroup
+ \forgetall
+ \dontcomplain
+ \dowithnextbox
+ {\ifundefined{\@@collectorbox#1}%
+ \writestatus{collector}{unknown layer #1}%
+ \else
+ \dodosetcollector[#1][#2]%
+ \fi
+ \egroup}
+ \hbox}
+
+\def\dodosetcollector[#1][#2]% todo: keep reference point
+ {\getparameters[\??cb#1][#2]%
+ \@@layerxsiz\wd\csname\@@collectorbox#1\endcsname
+ \@@layerysiz\ht\csname\@@collectorbox#1\endcsname
+ \doifvaluesomething{\??cb#1\c!rotatie}
+ {\setbox\nextbox\hbox
+ {\rotate
+ [\c!plaats=\v!hoog,
+ \c!rotatie=\getvalue{\??cb#1\c!rotatie}]
+ {\box\nextbox}}}%
+ \advance\@@layerysiz\dp\csname\@@collectorbox#1\endcsname
+ \@@layerxpos\getvalue{\??cb#1\c!x}%
+ \advance\@@layerxpos\getvalue{\??cb#1\c!hoffset}%
+ \@@layerypos\getvalue{\??cb#1\c!y}%
+ \advance\@@layerypos\getvalue{\??cb#1\c!voffset}%
+ \ExpandBothAfter\doifinset{\v!onder}{\getvalue{\??cb#1\c!hoek}}
+ {\ifdim\@@layerysiz>\zeropoint
+ \advance\@@layerypos-\@@layerysiz
+ \@@layerypos-\@@layerypos
+ \fi}%
+ \ExpandBothAfter\doifinset{\v!rechts}{\getvalue{\??cb#1\c!hoek}}
+ {\ifdim\@@layerxsiz>\zeropoint
+ \advance\@@layerxpos-\@@layerxsiz
+ \@@layerxpos-\@@layerxpos
+ \fi}%
+ \setbox\nextbox\hbox
+ {\alignedbox[\getvalue{\??cb#1\c!plaats}]\vbox{\box\nextbox}}%
+ \boxmaxdepth\zeropoint % really needed, nice example
+ \global\advance\boxhdisplacement\@@layerxpos
+ \ifdim\boxhdisplacement<\zeropoint
+ \global\setbox\csname\@@collectorbox#1\endcsname\hbox
+ {\hskip-\boxhdisplacement
+ \box\csname\@@collectorbox#1\endcsname}%
+ \fi
+ \global\advance\boxvdisplacement\@@layerypos
+ \ifdim\boxvdisplacement<\zeropoint
+ \global\setbox\csname\@@collectorbox#1\endcsname=\hbox
+ {\lower-\boxvdisplacement
+ \box\csname\@@collectorbox#1\endcsname}%
+ \fi
+ \@@layerxsiz\wd\csname\@@collectorbox#1\endcsname
+ \@@layerysiz\ht\csname\@@collectorbox#1\endcsname
+ \advance\@@layerysiz\dp\csname\@@collectorbox#1\endcsname
+ \global\setbox\csname\@@collectorbox#1\endcsname=\hbox
+ {\box\csname\@@collectorbox#1\endcsname
+ \hskip-\@@layerxsiz
+ \hskip\@@layerxpos\relax
+ \ifdim\boxhdisplacement<\zeropoint
+ \hskip-\boxhdisplacement
+ \fi
+ \lower\@@layerypos\hbox
+ {\ifdim\boxvdisplacement<\zeropoint
+ \lower-\boxvdisplacement\box\nextbox
+ \else
+ \box\nextbox
+ \fi}}%
+ \ifdim\wd\csname\@@collectorbox#1\endcsname<\@@layerxsiz
+ \global\wd\csname\@@collectorbox#1\endcsname\@@layerxsiz
+ \fi}
+
+\def\flushcollector[#1]%
+ {\ifundefined{\@@collectorbox#1}%
+ \writestatus{collector}{unknown collector #1}%
+ \else
+ \doifnotvalue{\??cb#1\c!status}\v!stop
+ {\vbox
+ {\hbox
+ {\doifelsevalue{\??cb#1\c!status}\v!herhaal
+ {\let\next\copy}{\let\next\box}%
+ \raise\dp\csname\@@collectorbox#1\endcsname
+ \next\csname\@@collectorbox#1\endcsname}}}%
+ \fi}
+
+\def\composedcollector#1{\flushcollector[#1]}
+
+\def\resetcollector[#1]%
+ {\ifundefined{\@@collectorbox#1}\else
+ \global\setbox\csname\@@collectorbox#1\endcsname\emptybox
+ \fi}
+
+%\definecollector[test]
+%\setcollector[test]
+% [location=rb]
+% {\externalfigure[koe][frame=on,width=3cm]}
+%\setcollector[test]
+% [corner={right,bottom},location={left,top}]
+% {\framed{gans}}
+%\composedcollector{test}
+
+\definecollector
+ [caption]
+
+\def\collectedtext
+ {\dodoubleempty\docollectedtext}
+
+\def\docollectedtext[#1][#2]#3%
+ {\bgroup
+ \dowithnextbox
+ {\setcollector
+ [caption]
+ {\box\nextbox}%
+ \setcollector
+ [caption][#1]
+ {\getparameters[\??du][#2]%
+ \dosetfontattribute\??du\c!letter\stelinterliniein
+ \framed % watch the special setting of kader/overlay
+ [\c!kader=\v!overlay,#2]
+ {\doattributes\??du\c!letter\c!kleur{#3}}}%
+ \composedcollector{caption}%
+ \egroup}%
+ \hbox}
+
+% \collectedtext
+% [corner={right,bottom},location={left,top}]
+% [background=color,backgroundcolor=white,offset=0pt]
+% {gans}
+% {\externalfigure[koe][width=3cm]}
+%
+% \collectedtext
+% [rotation=90,corner={right,bottom},location={right,top}]
+% [frame=on,offset=0pt]
+% {gans}
+% {\externalfigure[koe][width=3cm]}
+%
+% \collectedtext
+% [rotation=90,corner={left,bottom},location={left,top}]
+% [frame=on,offset=0pt]
+% {gans}
+% {\externalfigure[koe][width=3cm]}
+
+\definelayer
+ [caption]
+
+\def\layeredtext
+ {\dodoubleempty\dolayeredtext}
+
+\def\dolayeredtext[#1][#2]#3%
+ {\bgroup
+ \dowithnextbox
+ {\!!widtha\nextboxwd
+ \!!heighta\nextboxht
+ \bgroup % preserve \nextbox
+ \setlayer
+ [caption]
+ [\c!breedte=\!!widtha,\c!hoogte=\!!heighta,#1]
+ {\getparameters[\??du][#2]%
+ \dosetfontattribute\??du\c!letter\stelinterliniein
+ \framed
+ [\c!kader=\v!overlay,,#2]
+ {\doattributes\??du\c!letter\c!kleur{#3}}}%
+ \egroup
+ \framed
+ [\c!offset=\v!overlay,
+ \c!kader=\v!uit,
+ \c!achtergrond={\v!voorgrond,caption},
+ \c!breedte=\!!widtha,
+ \c!hoogte=\!!heighta]
+ {\box\nextbox}%
+ \egroup}%
+ \hbox}
+
+% \layeredtext
+% [corner={right,bottom},location={left,top}]
+% [background=color,backgroundcolor=white,offset=0pt]
+% {gans}
+% {\externalfigure[koe][width=3cm]}
+%
+% \layeredtext
+% [rotation=90,corner={right,bottom},location={right,top}]
+% [frame=on,offset=0pt]
+% {gans}
+% {\externalfigure[koe][width=3cm]}
+%
+% \layeredtext
+% [rotation=90,corner={left,bottom},location={left,top}]
+% [frame=on,offset=0pt]
+% {gans}
+% {\externalfigure[koe][width=3cm]}
+
+\def\ornamenttext
+ {\dodoubleempty\doornamenttext}
+
+\def\doornamenttext[#1][#2]%
+ {\bgroup
+ \doifassignmentelse{#1}
+ {\getparameters[\s!dummy][\c!variant=\v!a,#2]%
+ \doifelse\dummyvariant\v!a
+ {\egroup\collectedtext}%
+ {\egroup\layeredtext }%
+ [#1][#2]}%
+ {\egroup\getvalue{#1}}}
+
+\def\defineornament
+ {\dotripleempty\dodefineornament}
+
+\def\dodefineornament[#1][#2][#3]%
+ {\setvalue{#1}{\doornamenttext[#2][#3]}}
+
+% \defineornament
+% [affiliation]
+% [rotation=90,corner={right,bottom},location={right,top},
+% hoffset=-.25ex]
+% [frame=on,background=color,backgroundcolor=red,offset=0pt]
+%
+% \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}}
+%
+% \defineornament
+% [affiliation]
+% [rotation=90,corner={right,bottom},location={right,top},
+% hoffset=-.25ex,alternative=b]
+% [frame=on,background=color,backgroundcolor=red,offset=0pt]
+%
+% \ruledhbox{\affiliation{gans}{\externalfigure[koe][width=3cm]}}
+%
+% \defineornament
+% [affiliation]
+% [rotation=90,corner={right,bottom},location={left,top},
+% hoffset=.25ex,voffset=.25ex,alternative=a]
+% [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt]
+%
+% \affiliation{photo}{\externalfigure[molen][width=3cm]}
+%
+% \defineornament
+% [affiliation]
+% [rotation=90,corner={right,bottom},location={left,top},
+% hoffset=.25ex,voffset=.25ex,alternative=b]
+% [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt]
+%
+% \affiliation{drawing}{\externalfigure[hakker][width=3cm]}
+
+% pas op: aanpassen aan nieuwe layer hoek ankers
+
+\newcounter\nofbleeds % per pag
+
+\def\setupbleeding
+ {\dodoubleempty\getparameters[\??bg]}
+
+\setupbleeding
+ [\c!plaats=l,
+ \c!rek=\v!ja,
+ \c!breedte=3cm,
+ \c!hoogte=3cm,
+ \c!offset=2mm,
+ \c!voffset=\@@bgoffset,
+ \c!hoffset=\@@bgoffset]
+
+\def\bleed
+ {\dosingleempty\dobleed}
+
+\def\dobleed[#1]#2%
+ {\hbox\bgroup
+ \def\bleedwidth {\hsize}%
+ \def\bleedheight{\vsize}%
+ \doglobal\increment\nofbleeds
+ \getparameters[\??bg][#1]%
+ \!!doneafalse % left
+ \!!donebfalse % right
+ \!!donecfalse % top
+ \!!donedfalse % bottom
+% replace this part !
+ \processaction
+ [\@@bgplaats]
+ [ t=>\!!donectrue\let\@@bghoffset\!!zeropoint,
+ b=>\!!donedtrue\let\@@bghoffset\!!zeropoint,
+ l=>\!!doneatrue\let\@@bgvoffset\!!zeropoint,
+ r=>\!!donebtrue\let\@@bgvoffset\!!zeropoint,
+ bl=>\!!doneatrue\!!donedtrue,
+ lb=>\!!doneatrue\!!donedtrue,
+ br=>\!!donebtrue\!!donedtrue,
+ rb=>\!!donebtrue\!!donedtrue,
+ tl=>\!!doneatrue\!!donectrue,
+ lt=>\!!doneatrue\!!donectrue,
+ tr=>\!!donebtrue\!!donectrue,
+ rt=>\!!donebtrue\!!donectrue]%
+ \doifelse\@@bgrek\v!ja\donetrue\donefalse
+ \scratchdimen\@@bgbreedte
+ \ifdone
+ \if!!donea
+ \advance\scratchdimen\MPx{\??bg:\nofbleeds}%
+ \else\if!!doneb
+ \scratchdimen\papierbreedte
+ \advance\scratchdimen-\MPx{\??bg:\nofbleeds}%
+ \fi\fi
+ \fi
+ \advance\scratchdimen\@@bghoffset
+ \edef\bleedwidth{\the\scratchdimen}%
+ \scratchdimen\@@bghoogte
+ \ifdone
+ \if!!donec
+ \scratchdimen\papierhoogte
+ \advance\scratchdimen-\MPy{\??bg:\nofbleeds}%
+ \else\if!!doned
+ \advance\scratchdimen\MPy{\??bg:\nofbleeds}%
+ \fi\fi
+ \fi
+ \advance\scratchdimen\@@bgvoffset
+ \edef\bleedheight{\the\scratchdimen}%
+ \hsize\bleedwidth
+ \vsize\bleedheight
+ \setbox\scratchbox\hbox{#2}%
+ \setbox\scratchbox\hbox to \@@bgbreedte
+ {\if!!donea\hss\fi\box\scratchbox\if!!doneb\hss\fi}%
+ \if!!doned
+ \setbox\scratchbox\hbox
+ {\lower\bleedheight\hbox{\raise\@@bghoogte\box\scratchbox}}%
+ \fi
+ \wd\scratchbox\@@bgbreedte
+ \ht\scratchbox\@@bghoogte
+ \dp\scratchbox\zeropoint
+ \ifdone
+ \hpos{\??bg:\nofbleeds}{\box\scratchbox}%
+ \else
+ \box\scratchbox
+ \fi
+ \egroup}
+
+\setupbleeding[\c!rek=\v!ja]
+
+\defineexternalfigure[bleed][\c!breedte=\bleedwidth,\c!hoogte=\bleedheight]
+
+% \placefloat[left]{none}
+% {\bleed[width=5cm,height=3cm,location=lt]{\externalfigure[koe][bleed]}}
+%
+% \input tufte
+%
+% \placefloat[left]{none}
+% {\bleed[width=5cm,height=3cm,location=l]{\externalfigure[koe][bleed]}}
+%
+% \input tufte
+%
+% \placesomefloat[right]{none}
+% {\bleed[width=5cm,height=3cm,location=r]{\externalfigure[koe][bleed]}}
+%
+% \input tufte
+%
+% \placesomefloat[right]{none}
+% {\bleed[width=5cm,height=3cm,location=rb]{\externalfigure[koe][bleed]}}
+%
+% \input tufte
+
+% \setlayerframed[layer id][layer settings][framed setting]{data}
+% \setlayerframed[layer id][combined settings]{data}
+
+\def\setlayerframed
+ {\dotripleempty\dosetlayerframed}
+
+\def\dosetlayerframed
+ {\ifthirdargument
+ \expandafter\dosetlayerframedT
+ \else
+ \expandafter\dosetlayerframedS
+ \fi}
+
+\def\dosetlayerframedT[#1][#2][#3]%
+ {\dowithnextbox{\setlayer[#1][#2]{\box\nextbox}}%
+ \hbox\framed[#3]}
+
+\def\dosetlayerframedS[#1][#2][#3]%
+ {\dowithnextbox
+ {\setlayer
+ [#1]
+ [\c!breedte=\wd\nextbox,\c!hoogte=\ht\nextbox,
+ \c!offset=\!!zeropoint,#2]
+ {\box\nextbox}}%
+ \hbox\framed[\c!plaats=\v!normaal,#2]}
+
+\protect \endinput