summaryrefslogtreecommitdiff
path: root/tex/context/base/spac-grd.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/spac-grd.mkiv')
-rw-r--r--tex/context/base/spac-grd.mkiv866
1 files changed, 15 insertions, 851 deletions
diff --git a/tex/context/base/spac-grd.mkiv b/tex/context/base/spac-grd.mkiv
index 3fa47de57..e55c7db48 100644
--- a/tex/context/base/spac-grd.mkiv
+++ b/tex/context/base/spac-grd.mkiv
@@ -11,11 +11,22 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+%D This module will be merged intio spac-ver.mkiv.
+
\writestatus{loading}{ConTeXt Spacing Macros / Grid Snapping}
-\unprotect
+% buff-ver.mkiv: halfline spacing
+% strc-mat.mkiv: configure math grid (new code needed)
+% page-one.mkiv: to be checked
+% page-mul.mkiv: to be checked and redone
+% page-sid.mkiv: to be checked
+% page-set.mkiv: to be checked
+% strc-not.mkiv: to be checked
+% strc-ren.mkiv: to be checked
+% strc-flt.mkiv: to be checked (captions, probably top/bottom)
+% core-mis.mkiv: to be checked (placement, probbaly harmless)
-\newif \iffuzzyvskip
+\unprotect
%D Helpers:
@@ -94,13 +105,6 @@
\let\thenegtopbaselinecorrection\!!zeropoint
\let\thenegbotbaselinecorrection\!!zeropoint
-\definepalet
- [grid]
- [ one=red,
- two=green,
- three=blue,
- four=gray]
-
\def\setbaselinecorrections
{\setbox0\hbox{\setstrut\strut}%
\setbox2\hbox{(}%
@@ -140,18 +144,6 @@
\kern\strutdp
\prevdepth\strutdp}
-% \def\baselinecorrection
-% {\endgraf
-% \ifvmode
-% \ifdim\prevdepth<\maxdimen
-% \ifdim\prevdepth<\zeropoint \else
-% \ifdim\prevdepth<\strutdp
-% \dobaselinecorrection
-% \fi
-% \fi
-% \fi
-% \fi}
-
\def\baselinecorrection
{\endgraf
\ifvmode
@@ -177,31 +169,6 @@
\fi
\fi}
-% Beware, keep this one as it is, see for instance module
-% m-steps.tex, where we apply a \localhsize to the \vbox, in
-% order to follow narrower and side floats !
-
-% \def\startbaselinecorrection
-% {\baselinecorrection
-% \ifvmode
-% \bgroup
-% \setbox\scratchbox\vbox\bgroup
-% \ignorespaces
-% \let\stopbaselinecorrection\dostopbaselinecorrection
-% \else
-% \let\stopbaselinecorrection\relax
-% \fi}
-
-% \def\dostopbaselinecorrection % I have to check columns yet.
-% {\endgraf
-% \egroup
-% \topbaselinecorrection
-% \box\scratchbox
-% \botbaselinecorrection
-% \egroup}
-
-% \let\stopbaselinecorrection=\relax
-
\def\startbaselinecorrection
{\bgroup
\let\stopbaselinecorrection\egroup
@@ -241,9 +208,6 @@
%D is not needed, but I want to look the visualization as good
%D as possible too.
-% \def\offbaselinecorrection % Can be used inside correction.
-% {\def\startbaselinecorrection{\bgroup\let\stopbaselinecorrection\egroup}}
-
\chardef\baselinecorrectionmode\plusone
\def\onbaselinecorrection {\chardef\baselinecorrectionmode\plusone }
@@ -255,17 +219,6 @@
%D
%D The actual top and bottom corrections are implemented as:
-% \def\topbaselinecorrection
-% {\ifvmode \ifdim\pagegoal<\maxdimen
-% \bgroup
-% \setbaselinecorrections
-% \whitespace
-% \nointerlineskip
-% \dotopbaselinecorrection
-% \egroup
-% \fi \fi}
-
-
\def\topbaselinecorrection
{\ifvmode \ifdim\pagegoal<\maxdimen
\forcedtopbaselinecorrection
@@ -292,804 +245,15 @@
\fi}
\let\forcedbotbaselinecorrection\botbaselinecorrection
-
-%D Still very experimental and therefore undocumented.
-
-\newif\ifgridsnapping % UNDER DEVELOPMENT, USE WITH CARE
-\newif\ifforcepresnap \forcepresnaptrue % false in mixed single/double
-\newif\ifstrutsnapping \strutsnappingtrue % sometimes handy to be false
-
-\def\positiveextrasnap {\gdef\extrasnapsign{+}}
-\def\negativeextrasnap {\gdef\extrasnapsign{-}}
-
-\def\extrasnapreset {\global\chardef\@@extrasnap0
- \positiveextrasnap}
-\def\extrasnapbefore {\global\chardef\@@extrasnap1 }
-\def\extrasnaparound {\global\chardef\@@extrasnap2 }
-\def\extrasnapafter {\global\chardef\@@extrasnap3 }
-
-\def\enablepresnapcorrection {\global\chardef\@@presnap\zerocount}
-\def\disablepresnapcorrection {\global\chardef\@@presnap\plusone}
-
-\extrasnapreset \enablepresnapcorrection
-
-\newif\iftracegridsnapping
-\newif\ifshowgridboxes
-\newif\ifshowfuzzyskips
-
-\let\showgridboxes\showgridboxestrue
-
-\def\showgridsnapping
- {\tracegridsnappingtrue
- \showgridboxestrue}
-
-\chardef\@@alignsnap =0
-\chardef\@@alignsnapbox =0
-\chardef\@@alignsnapmethod=0
-
-\let\presnapskip \!!zeropoint \def\presnap {-}
-\let\postsnapskip\!!zeropoint \let\postsnap\presnap
-
-\newcount\currentgridsnap
-
-\def\tracedsnapping
- {\iftracegridsnapping
- \llap
- {\setlayoutcomponentattribute\v!grid\v!test
- \hbox \layoutcomponentboxattribute
- {\infofont
- \global\advance\currentgridsnap\plusone
- \color[grid:three]
- {\vl\presnapskip
- \vl\presnap
- \vl\postsnap
- \ifcase\@@alignsnapbox\relax\vl\ifcase\@@extrasnap00\or\extrasnapsign0\or\extrasnapsign\extrasnapsign\or0\extrasnapsign\fi\fi
- \vl\the\currentgridsnap\vl}}}%
- \fi}
-
-\def\snaptogrid% [#1]#2 -> #2 == \hbox|\vbox
- {\dosingleempty\dosnaptogrid}
-
-% \def\dosnaptogrid[#1]%
-% {\ifgridsnapping
-% \iffirstargument\doifsomething{#1}{\verplaatsopgrid[#1]}\fi
-% \expandafter\dodosnaptogrid
-% \fi}
-
-% \def\dosnaptogrid[#1]%
-% {\resetlastlinewidth % maybe in more places, otherwise spacing gets messed up
-% \ifgridsnapping
-% \iffirstargument\doifsomething{#1}{\moveongrid[#1]}\fi
-% \expandafter\dodosnaptogrid
-% \fi}
-
-\def\dosnaptogrid[#1]%
- {\resetlastlinewidth % maybe in more places, otherwise spacing gets messed up
- \doifinsetelse\v!force{#1}%
- {\moveongrid[#1]%
- \dodosnaptogrid}
- {\ifgridsnapping
- \doifsomething{#1}{\moveongrid[#1]}%
- \expandafter\dodosnaptogrid
- \fi}}
-
-% \def\forcedpresnapcorrection % test this on 'details'
-% {\ifforcepresnap
-% \ifvmode \else \par \fi % new
-% % we don't want top of page space when 'top' option
-% %\verticalstrut\nobreak\vskip-\struttotal
-% %\verticalstrut\vskip-\struttotal
-% % nobreak really needed
-% \allowbreak\verticalstrut\nobreak\vskip-\struttotal
-% %\ifdim\pagetotal>\topskip \else
-% % eigenlijk signal
-% %\writestatus{grid}{removing dummy at top of page}%
-% %\bgroup
-% %\output{\setbox\scratchbox\box255}%
-% %\penalty\outputpenalty
-% %\egroup
-% %\fi
-% \fi}
-
-\def\forcedpresnapcorrection % test this on 'details'
- {\ifforcepresnap
- \ifvmode \else \par \fi % new
- % we don't want top of page space when 'top' option
- % \verticalstrut\nobreak\vskip-\struttotal
- % \verticalstrut\vskip-\struttotal
- % \nobreak really needed
- % \dosomebreak\allowbreak % no: spoils heads, so only under know situation, not in snapper
- \verticalstrut
- \nobreak
- \vskip-\struttotal
- %\ifdim\pagetotal>\topskip \else
- % eigenlijk signal
- %\writestatus{grid}{removing dummy at top of page}%
- %\bgroup
- %\output{\setbox\scratchbox\box255}%
- %\penalty\outputpenalty
- %\egroup
- %\fi
- \fi}
-
-\def\setgridtracebox#1[#2]% % maybe reverse the order
- {\setbox\nextbox#1%
- {\hbox
- {\hbox to \zeropoint
- {\setlayoutcomponentattribute\v!grid\v!test
- \color[grid:#2]{\ruledhbox \layoutcomponentboxattribute {\fakebox\nextbox}}%
- \hss}%
- \flushnextbox}}}
-\newif\ifboxedsnapping \boxedsnappingtrue
-
-\chardef\depthsnapmethod \plusone % downward compatible, minus one line
-\chardef\heightsnapmethod\plusone % downward compatible, minus one line
-
-\def\dodosnaptogrid
- {\dowithnextbox
- {\bgroup
- \ifcase\@@alignsnapmethod \or
- % we're dealing with text with a possible big depth/height
- \chardef\depthsnapmethod \plustwo
- \chardef\heightsnapmethod\plustwo
- \fi
- \ifdim\nextboxht<\textheight % handle special case (like page fig)
- \ifcase\@@alignsnapbox\relax
- \ifcase\@@alignsnap\else % 1=top 2=high 3=middle 4=low
- \ifshowgridboxes
- \setgridtracebox\hbox[two]%
- \fi
- %\getnoflines{\nextboxht}%
- \getnoflines\nextboxht
- \setbox\nextbox\vbox to \noflines\lineheight
- {\ifnum\@@alignsnap=1 \kern\lineheight\kern-\topskip\fi
- \ifnum\@@alignsnap>2 \vfill\fi
- \flushnextbox
- \ifnum\@@alignsnap<4 \vfill\fi}%
- \fi
- \ifshowgridboxes
- \setgridtracebox\hbox[three]%
- \fi
- \forgetall
- \par
- \ifvbox\nextbox
- \setbox\nextbox\hbox{\flushnextbox}% don't ask
- \fi
- \scratchskip\lastskip
- \edef\presnapskip{\the\lastskip}%
- % mixing single/double columns sometimes goes wrong,
- % check 'som' document
- \ifinsidecolumns
- \forcepresnaptrue
- \fi
- \forcedpresnapcorrection
- \ifdim\nextboxht>\strutht
- \scratchdimen\nextboxht
- \ifcase\@@presnap\relax
- \ifdim\scratchskip>\zeropoint\relax
- \scratchcounter\scratchskip
- \advance\scratchcounter -\openlineheight
- \ifnum\scratchcounter<0
- \scratchcounter-\scratchcounter
- \fi
- \ifnum\scratchcounter<10 % \lastkip is about \openlineheight
- \advance\scratchdimen -\openstrutdepth
- \edef\presnapskip{*\presnapskip}%
- \else\ifdim\scratchskip>\openlineheight
- %<\openlineheight \else
- \advance\scratchdimen -\openstrutdepth
- \edef\presnapskip{*\presnapskip}%
- \fi\fi
- \fi
- \fi
- % \getnoflines\scratchdimen % maybe raw ?
- % \advance\noflines -1
- \ifcase\heightsnapmethod
- % raw
- \or
- \advance\scratchdimen-\lineheight % tight (default)
- \or
- \advance\scratchdimen-\strutheight % fit (text)
- \or
- \advance\scratchdimen-\strutheight % tolerant
- \advance\scratchdimen-\roundingeps
- \fi
- \getnoflines\scratchdimen
- \ifnum\noflines>0
- \scratchdimen\noflines\lineheight
- \else
- \scratchdimen\zeropoint
- \fi
- \else
- \scratchdimen\zeropoint
- \fi
- \ifnum\@@extrasnap=1 \advance\scratchdimen \extrasnapsign \lineheight \fi
- \ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
- \edef\presnap{\the\scratchdimen}%
- \ifstrutsnapping
- \ifboxedsnapping
- \getrawnoflines\scratchdimen
- \advance\scratchdimen-\noflines\lineheight
- \vskip\scratchdimen % disappears at top of page
- \dorecurse\noflines{\verticalstrut\nobreak}%
- \else \ifdim\scratchdimen=\zeropoint
- % nothing to skip
- \else % disappears at top of page
- \vskip\scratchdimen
- \fi \fi
- \fi
- \ifdim\nextboxdp>\strutdp
- % \getnoflines\nextboxdp
- % \advance\noflines \minusone
- \scratchdimen\nextboxdp\relax
- \ifcase\depthsnapmethod
- % raw
- \or
- \advance\scratchdimen-\lineheight % tight (default)
- \or
- \advance\scratchdimen-\strutdepth % fit (text)
- \or
- \advance\scratchdimen-\strutdepth % tolerant
- \advance\scratchdimen-\roundingeps
- \fi
- \getnoflines\scratchdimen
- \ifnum\noflines>0
- \scratchdimen\noflines\lineheight
- \else
- \scratchdimen\zeropoint
- \fi
- \else
- \scratchdimen\zeropoint
- \fi
- \ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
- \ifnum\@@extrasnap=3 \advance\scratchdimen \extrasnapsign \lineheight \fi
- \edef\postsnap{\the\scratchdimen}%
- \ifstrutsnapping
- \nextboxht\strutht
- \nextboxdp\strutdp
- \else
- \scratchdimen\presnap
- \advance\scratchdimen \strutht
- \nextboxht\scratchdimen
- \scratchdimen\postsnap
- \advance\scratchdimen \strutdp
- \nextboxdp\scratchdimen
- \fi
- \hbox{\tracedsnapping\flushnextbox}%
- \ifstrutsnapping
- \ifdim\scratchdimen=\zeropoint\else\vskip\scratchdimen\fi
- \fi
- \else
- \scratchdimen\nextboxht\relax
- \ifcase\@@alignsnapbox
- % can't happen here
- \or
- \getrawnoflines\scratchdimen
- \else
- \getnoflines \scratchdimen
- \fi
- \scratchdimen\noflines\lineheight\relax
- \advance\scratchdimen-\strutdepth
- % spoils the whole game (fit/broad/line)
- % \ifnum\pagetotal>\zeropoint \else % disable this as option
- % \advance\scratchdimen-\strutheight
- % \advance\scratchdimen+\topskip
- % \fi
- \dimen0=\scratchdimen
- \dimen2=\strutdepth
- \ifshowgridboxes
- \setgridtracebox\hbox[two]%
- \fi
- \nextboxdp\strutdp
- \dimen4=\nextboxht
- \dimen6=\nextboxdp
- \iftracegridsnapping
- \setbox\scratchbox\hbox
- {\scratchdimen\@@alignsnapamount\relax
- \ifdim\scratchdimen<\zeropoint
- \tracedgridamount\zeropoint{-\scratchdimen}%
- \else
- \tracedgridamount\scratchdimen\zeropoint
- \fi}%
- \smashbox\scratchbox
- \setbox\nextbox\hbox{\box\scratchbox\flushnextbox}%
- \fi
- \setbox\nextbox\hbox
- {\scratchdimen\@@alignsnapamount\relax
- \ifcase\@@alignsnapdepth\or
- % don't change this ever !
- \ifdim\dimen0<\lineheight
- % otherwise it is ok, but ending up inside
- % the next paragraph is seldom what we want,
- % so we move one line up
- \advance\scratchdimen-\lineheight
- \advance\scratchdimen\strutheight
- \else
- % otherwise we can move down to the
- % baseline
- \advance\scratchdimen\dimen6 % == \strutdepth
- \fi
- \fi
- \lower\scratchdimen\flushnextbox}%
- \nextboxht\dimen4
- \nextboxdp\dimen6
- \ifnum\@@alignsnap<4 % 4 = regel
- \setbox\nextbox\vbox to \scratchdimen
- {\forgetall
- \ifnum\@@alignsnap>2 \vfill\fi % 3 4
- \flushnextbox
- \nointerlineskip % \offinterlineskip
- \ifnum\@@alignsnap<4 \vfill\fi % 2 3
- \kern\zeropoint}%
- \fi
- \ifshowgridboxes
- \setgridtracebox\vbox[three]%
- \fi
- \scratchdimen\@@alignsnapamount
- \edef\presnapskip{\the\scratchdimen}%
- \ifnum\@@alignsnap>2 \def\presnap {+}\fi
- \ifnum\@@alignsnap<4 \def\postsnap{+}\fi
- \setbox\nextbox\hbox{\tracedsnapping\flushnextbox}%
- \par
- \nextboxht\dimen0
- \nextboxdp\dimen2
- \forcedpresnapcorrection
- \nointerlineskip
- \flushnextbox
- \fi
- \else
- \setbox\nextbox\vbox to \textheight
- {\ifdim\nextboxdp=\zeropoint
- \hbox{\lower\strutdepth\flushnextbox}
- \else % this branch is yet untested
- \vss
- \hbox{\lower\nextboxdp\flushnextbox}
- \vskip-\strutdepth
- \fi}%
- \nextboxdp\strutdepth
- \flushnextbox
- \fi
- \extrasnapreset
- \enablepresnapcorrection
- \global\chardef\@@alignsnap\zerocount
- \global\chardef\@@alignsnapbox\zerocount
- \egroup}}
-
-\def\tracedgridamount#1#2%
- {\startcolor[grid:four]%
- \setlayoutcomponentattribute\v!grid\v!test
- \hbox \layoutcomponentboxattribute{\vrule\!!width\nextboxwd\!!height#1\!!depth#2}%
- \stopcolor}
-
-\def\snaptomathgrid % probably not working ok, also kind of obsolete
- {\ifgridsnapping
- \dowithnextbox
- {\blank[\v!line]\snaptogrid\vbox{\flushnextbox}\blank[\v!line]}
- \vbox\bgroup
- \forgetdisplayskips
- \@EA\let\@EA\next
- \fi}
-
-\def\topsnaptogrid
- {\ifgridsnapping
- \dowithnextbox
- {\scratchdimen\nextboxht
- \advance\scratchdimen -\strutht
- \advance\scratchdimen \topskip
- \nextboxht\scratchdimen
- \nextboxdp\zeropoint
- \flushnextbox
- \kern\lineheight
- \kern-\topskip
- \nointerlineskip}
- \hbox
- \fi}
-
-% \def\centertogrid % meant for special situations
-% {\ifgridsnapping
-% \dowithnextboxcontent
-% {\ignorespaces}
-% {\bgroup
-% \par
-% \scratchdimen\nextboxht
-% \advance\scratchdimen \nextboxdp
-% \getnoflines\scratchdimen
-% \setbox\nextbox\vbox to \noflines\lineheight
-% {\forgetall
-% \vskip\zeropoint \!!plus \nextboxht
-% \copy\nextbox
-% \kern.5\strutdp % VOORLOPIGE WAARDE
-% \vskip\zeropoint \!!plus \nextboxdp}%
-% \noindent\snaptogrid\vbox{\flushnextbox}%
-% \egroup}
-% \vbox % was \hbox
-% \fi}
-
-% The next implementation is sub-optimal
-%
-% \def\centertogrid % usage: see ie pascal / stepcharts
-% {\snaptogrid[\v!midden,.5\strutdp]\vbox}
-
-\def\centertogrid % meant for special situations
- {\ifgridsnapping
- \dowithnextboxcontent
- {\ignorespaces}
- {\bgroup
- \par
- \scratchdimen\nextboxht
- \advance\scratchdimen \nextboxdp
- \getnoflines\scratchdimen
- \setbox\nextbox\vbox to \noflines\lineheight
- {\forgetall
- \vss
- \topbaselinecorrection
- \copy\nextbox
- \botbaselinecorrection
- \vss}%
- \setbox\nextbox\hbox{\lower\strutdp\flushnextbox}%
- \forgeteverypar % new per 3/4/2008, prevents duplicate pos nodes resulting in extra whitespace
- \noindent\snaptogrid\vbox{\flushnextbox}%
- \egroup}
- \vbox % was \hbox
- \fi}
-
-% testbed for \centertogrid
-%
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination[2*2]
-% {\framed{test}} {} {\framed{test}} {}
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination[2*2]
-% {\framed{test}} {} {\framed{test}} {}
-% {\framed{test}} {} {\framed{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection
-% \startcombination[2*2]
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-% \strut Bruggetje
-% \startlinecorrection[blank]
-% \startcombination[2*2]
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% {\framed[lines=1]{test}} {} {\framed[lines=1]{test}} {}
-% \stopcombination
-% \stoplinecorrection
-
-\ifx\startbaselinecorrection\undefined \wait \fi % change order
-
-\let\normalstartbaselinecorrection=\startbaselinecorrection
+\let\normalstartbaselinecorrection\startbaselinecorrection
\def\startbaselinecorrection
{\ifgridsnapping
- \centertogrid\bgroup
+ \snaptogrid[v!normal]\vbox\bgroup
\let\stopbaselinecorrection\egroup
\else
\normalstartbaselinecorrection
\fi}
-\chardef\gridboxlinenomode\plusone
-\chardef\gridboxlinemode \plusone % 0:nothing 1:all 2:lines 3:frame
-
-\def\gridboxvbox {\ifcase\gridboxlinemode\vbox\or\ruledvbox\or\vbox\or\ruledvbox\else\ruledvbox\fi}
-\def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\testrulewidth}
-
-\def\setgridbox#1#2#3%
- {\setbox#1\gridboxvbox to #3 % given size
- {\forgetall
- \resetteststrut
- \offinterlineskip
- \hsize#2%
- \baselinerulefalse
- \gridboxvbox % calculated size
- {\getrawnoflines{#3}% \getnoflines{#3}%
- \vskip\topskip
- \vskip-\strutht
- \scratchdimen#2\advance\scratchdimen \lineheight
- \dorecurse\noflines
- {\strut
- \hskip-.5\lineheight
- \ifcase\gridboxlinenomode\or
- \rlap
- {\hskip.2\bodyfontsize\hskip\scratchdimen
- \infofont\hbox to 1em{\hss\recurselevel}}%
- \or
- \llap
- {\infofont\hbox to 1em{\hss\recurselevel}%
- \hskip.2\bodyfontsize}%
- \fi
- \vrule
- \!!height \gridboxwidth
- \!!depth \gridboxwidth
- \!!width \scratchdimen
- \par}}
- \vfill}}
-
-%D Some intervention macros:
-
-\def\gridwarning#1{\message{[beware of #1 extra snap]}}
-
-\global\let\@@alignsnapamount\!!zeropoint
-\global\chardef\@@alignsnapdepth0
-
-\def\@@unknowngriddisplacement
- {\global\chardef\@@alignsnapbox\plusthree
- \global\let\@@alignsnapamount\commalistelement}
-
-\def\domoveongrid[#1]%
- {\ifgridsnapping\doifsomething{#1}{\dodomoveongrid[#1]}\fi}
-
-\def\dodomoveongrid[#1]% some day : speed up
- {\global\chardef\@@alignsnap\zerocount
- \global\chardef\@@alignsnapbox\zerocount
- \global\chardef\@@alignsnapdepth\zerocount
- \global\chardef\@@alignsnapmethod\zerocount
- \global\let\@@alignsnapamount\!!zeropoint
- \donefalse
- \expanded{\processallactionsinset[#1]}
- [\v!standard=>,
- \v!normal=>, % to be sure
- \v!yes=>, % to be sure
- \v!top=>\gridwarning+\positiveextrasnap\extrasnapbefore,
- \v!bottom=>\gridwarning+\positiveextrasnap\extrasnapafter,
- \v!both=>\positiveextrasnap\extrasnaparound,
- -\v!top=>\gridwarning-\negativeextrasnap\extrasnapbefore,
- -\v!bottom=>\gridwarning-\negativeextrasnap\extrasnapafter,
- -\v!both=>\negativeextrasnap\extrasnaparound,
- \v!text=>\global\chardef\@@alignsnapmethod\plusone, % accurate calculations
- \v!page=>\global\chardef\@@alignsnap\plusone, % topskip
- \v!high=>\global\chardef\@@alignsnap\plustwo,
- \v!middle=>\global\chardef\@@alignsnap\plusthree,
- \v!low=>\global\chardef\@@alignsnap\plusfour,
- \v!fit=>\global\chardef\@@alignsnapbox\plusone, % new
- \v!broad=>\global\chardef\@@alignsnapbox\plustwo, % new
- \v!depth=>\global\chardef\@@alignsnapdepth\plusone, % new
- \v!line=>\global\chardef\@@alignsnapbox\plusthree
-% \global\chardef\@@alignsnapdepth\plusone
- \global\chardef\@@alignsnap\plusfour,
- \v!reset=>\positiveextrasnap\extrasnapreset,
- \v!none=>\global\chardef\@@alignsnap\zerocount
- \global\chardef\@@alignsnapbox\zerocount,
- \v!force=>, % turns on grid snapping even when not on
- \s!default=>,
- \s!unknown=>\@@unknowngriddisplacement]}
-
-\def\moveongrid
- {\dosingleempty\domoveongrid}
-
-\def\doplaceongrid[#1]%
- {\domoveongrid[#1]\snaptogrid\vbox}
-
-\def\placeongrid
- {\dosingleempty\doplaceongrid}
-
-%D Snapping is rather robust as long as we use whole lines.
-%D Half lines of white space can however be handled when they
-%D come in pairs. The corrections needed when crossing page
-%D boundaries in the middle of such a pair, are handled by
-%D macros that are (named) sort of fuzzy. This fuzzy mechanism
-%D was written as an extension to the grid typesetting needed
-%D for typesetting (part of) the \MAPS.
-%D
-%D \starttyping
-%D \setuptyping
-%D [before={\blank[halfline]},
-%D after={\blank[halfline]}]
-%D \stoptyping
-
-\newif \iffuzzyvskip
-\newif \iffuzzysnapdone
-\newif \iffuzzysnapping
-\newif \iffuzzysnapped
-\chardef \fuzzysnappedleft=0 % ==1 when fuzzybegin still open
-\newpersistentmark\fuzzymark % (!)
-\newcount \fuzzymarker
-\newbox \fuzzysnapbox
-\newbox \fuzzysnapsplit
-
-\def\dosyncfuzzyvskip
- {\ifvmode\ifdim\lastskip<\lineheight\ifdim\lastskip>\zeropoint
- \bgroup % - added 28/2/2003: check this, there was no -
- \endgraf\forgetall\verticalstrut\nobreak\vskip-\struttotal
- \egroup
- \fi\fi\fi}
-
-\def\fuzzyvskip#1%
- {\iffuzzysnapdone
- \dosyncfuzzyvskip % NEWER
- \endfuzzysnapping
- \vskip#1\relax
- \global\fuzzysnapdonefalse
- \else
- \vskip#1\relax
- \beginfuzzysnapping
- \global\fuzzysnapdonetrue
- \fi}
-
-\def\setfuzzymark#1#2#3% #1/#2 => error recovery
- {\ifgridsnapping
- \global\fuzzysnappingtrue
- \global\advance\fuzzymarker \ifodd\fuzzymarker#1\else#2\fi
- \nobreak
- \ifshowfuzzyskips
- \hbox{\color[grid:three]
- {\llap{\infofont#3\vl\the\fuzzymarker}\nobreak
- \vrule\!!width\hsize\!!height.1\lineheight}}
- \nobreak
- \fi
- %[\the\fuzzymarker]
- %\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
- \expandafter\rawsetmark\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
- \nobreak
- \fi}
-
-\def\beginfuzzysnapping{\setfuzzymark21\v!start} % odd
-\def\endfuzzysnapping {\setfuzzymark12\v!stop } % even
-
-\def\removelastfuzzyvskip
- {\ifgridsnapping
- \iffuzzysnapping
- \ifdim\lastskip<\openlineheight
- \else
- \removelastskip
- \fi
- \else
- \removelastskip
- \fi
- \else
- \removelastskip
- \fi}
-
-\def\docheckfuzzysnap#1%
- {\bgroup
- \dontcomplain
- \setbox\fuzzysnapbox\copy#1\relax
- \setbox\fuzzysnapsplit\vsplit\fuzzysnapbox to 1\lineheight
- \let\topfuzzymark\empty % indeed here ... no real mark
- \getsplitmarks\fuzzymark
-% \ifcase0\topfuzzymark
- \ifcase0\rawgetsplittopmark\fuzzymark
- \global\chardef\fuzzysnappedleft\zerocount
- \global\fuzzysnappedfalse
-% \else\ifodd\topfuzzymark
- \else\ifodd\rawgetsplittopmark\fuzzymark
- \global\chardef\fuzzysnappedleft\plusone
- \global\fuzzysnappedtrue
- \else
- \global\chardef\fuzzysnappedleft=2
- \global\fuzzysnappedtrue
- \fi\fi
- \iffuzzysnapped \else
- \doloop
- {\ifvoid\fuzzysnapbox
- \exitloop
- \else
- \setbox\fuzzysnapsplit=\vsplit\fuzzysnapbox to \lineheight
- %\let\topfuzzymark=\empty % ... but not here
- \getsplitmarks\fuzzymark
-% \ifcase0\topfuzzymark
- \ifcase0\rawgetsplittopmark\fuzzymark
- % continue
-% \else\ifodd\topfuzzymark
- \else\ifodd\rawgetsplittopmark\fuzzymark
- \exitloop
- \else
- \global\chardef\fuzzysnappedleft\plusone
- \global\fuzzysnappedtrue
- \exitloop
- \fi\fi
- \fi}%
- \fi
- \egroup}
-
-\def\getfuzzysnapcorrection#1%
- {\global\let\presnapcorrection \relax
- \global\let\postsnapcorrection\relax
- \ifgridsnapping\iffuzzysnapping
- \docheckfuzzysnap{#1}%
- \iffuzzysnapped
- \iftracegridsnapping
- \gdef\presnapcorrection
- {\color[grid:four]{\hrule\!!height.5\openlineheight\!!width\hsize}}%
- \else
- \gdef\presnapcorrection{\kern.5\openlineheight}%
- \fi
- \gdef\postsnapcorrection{\kern-.5\openlineheight}% get the height ok
- \fi
- \fi\fi}
-
-\def\fuzzysnappedbox#1#2% \box<n> \unvbox<n>
- {\getfuzzysnapcorrection{#2}%
- \presnapcorrection
- #1#2%
- \postsnapcorrection}
-
-\def\adaptfuzzypagegoal
- {\ifgridsnapping\iffuzzysnapping\ifcase\fuzzysnappedleft\or % see dopagecontents
- \scratchdimen\pagegoal
- \advance\scratchdimen -.5\openlineheight
- \global\pagegoal\scratchdimen
- \global\advance\vsize -.5\openlineheight
- \global\chardef\fuzzysnappedleft0
- \fi\fi\fi}
-
-%D New, experimental, used in caption snapping:
-%D
-%D \starttyping
-%D \startcolumnset
-%D
-%D \setupcaption[figure][style=\tfx\setupinterlinespace,inbetween=,grid=top]
-%D
-%D \placefigure [lrtb] {\dorecurse{5}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D \placefigure [lrtb] {\dorecurse{15}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D
-%D \setupcaption[figure][style=\tfx\setupinterlinespace,inbetween=,grid=bottom]
-%D
-%D \placefigure [rltb] {\dorecurse{5}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D \placefigure [rltb] {\dorecurse{15}{green gras}}
-%D {\externalfigure[dummy][width=\textwidth,height=3cm,grid=height]}
-%D
-%D \input thuan
-%D
-%D \stopcolumnset
-%D \stoptyping
-
-\def\moveboxontogrid#1#2#3% box method firstlineht % experimental ! ! !
- {\doifsomething{#2}
- {\getnoflines{\ht#1}% no depth taken into account, depth preserved
- \scratchdimen\noflines\lineheight
- \advance\scratchdimen-\strutdp
- \bgroup
- \advance\scratchdimen-\onepoint % be a bit tolerant
- \ifdim\scratchdimen>\ht#1\relax
- \egroup
- \doif{#2}\v!top {\setbox#1\vbox to \scratchdimen{\vskip-#3\vskip\strutht\box#1\vfill}}%
- \doif{#2}\v!bottom{\setbox#1\vbox to \scratchdimen{\vfill\box#1\removedepth}}%
- \dp#1\strutdp
- \else
- \egroup
- \ht#1\scratchdimen
- \dp#1\strutdp
- \fi}}
-
-%D New:
-
-\let\checkgridsnapping\relax
-
\protect \endinput