diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/spac-grd.mkxl')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/spac-grd.mkxl | 377 |
1 files changed, 377 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/spac-grd.mkxl b/Master/texmf-dist/tex/context/base/mkxl/spac-grd.mkxl new file mode 100644 index 00000000000..65739cabea7 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/spac-grd.mkxl @@ -0,0 +1,377 @@ +%D \module +%D [ file=spac-grd, +%D version=2009.10.16, % 1998.03.10, was core-grd.tex +%D title=\CONTEXT\ Spacing Macros, +%D subtitle=Grid Snapping, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%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 will be merged into spac-ver.mkiv. + +\writestatus{loading}{ConTeXt Spacing Macros / Grid Snapping} + +\unprotect + +%D A rather crappy macro that we need to avoid and as such it will probably +%D disappear: + +\installcorenamespace{lastnodepusher} + +\permanent\let\poplastnode\relax + +\permanent\protected\def\pushlastnode + {\csname\??lastnodepusher + \ifcsname\??lastnodepusher\the\lastnodetype\endcsname + \the\lastnodetype + \else + \s!unknown + \fi + \endcsname} + +\defcsname\??lastnodepusher\number\kernnodecode\endcsname + {\enforced\permanent\protected\edef\poplastnode{\kern\the\lastkern\relax}% + \kern-\lastkern} + +\defcsname\??lastnodepusher\number\gluenodecode\endcsname + {\enforced\permanent\protected\edef\poplastnode{\vskip\the\lastskip\relax}% + \vskip-\lastskip} + +\defcsname\??lastnodepusher\number\penaltynodecode\endcsname + {\enforced\permanent\protected\edef\poplastnode{\penalty\the\lastpenalty\relax}% + \nobreak} + +\defcsname\??lastnodepusher\s!unknown\endcsname + {\enforced\permanent\let\poplastnode\relax} + +%D Moved from supp-box: + +%D \macros +%D {startbaselinecorrection,baselinecorrection, +%D showbaselinecorrection,offbaselinecorrection} +%D +%D Spacing around ruled boxes can get pretty messed up. The +%D next macro tries as good as possible to fix this. +%D +%D \startbuffer[1] +%D \startbaselinecorrection +%D \ruledhbox{Rule Brittanica} +%D \stopbaselinecorrection +%D \stopbuffer +%D +%D \typebuffer[1] +%D +%D The macros put some white space around the box: +%D +%D \getbuffer[1] +%D +%D A simple alternative is \type {\baselinecorrection}, which +%D only looks at the previous line. +%D +%D \startbuffer[2] +%D \baselinecorrection +%D \ruledhbox{Rule Brittanica} +%D \baselinecorrection +%D \stopbuffer +%D +%D \typebuffer[2] +%D +%D This time the last preceding line gets a correction,% +%D dependant on the depth. +%D +%D \getbuffer[2] +%D +%D One can make the correction visible by saying \type +%D {\showbaselinecorrection}. Part of the correction is +%D calculated from the dimensions of a~(. One can disble the +%D correction by calling \type {\offbaselinecorrection}. +%D +%D When visualize the first example looks like: +%D +%D {\showbaselinecorrection\getbuffer[1]} +%D +%D and the second one comes out as: +%D +%D {\showbaselinecorrection\getbuffer[2]} + +% \definecolor[GridLineColor][red] +% \definecolor[GridTextColor][blue] + +\newdimen\d_spac_lines_correction_before +\newdimen\d_spac_lines_correction_after + +\newbox \b_spac_lines_correction_before +\newbox \b_spac_lines_correction_after + +\def\spac_lines_initialize_corrections + {\setbox\b_spac_lines_correction_before\hpack{\setstrut\strut}% + \setbox\b_spac_lines_correction_after \hbox {(}% + \d_spac_lines_correction_before\dimexpr\ht\b_spac_lines_correction_before-\ht\b_spac_lines_correction_after\relax + \d_spac_lines_correction_after \dimexpr\dp\b_spac_lines_correction_before-\dp\b_spac_lines_correction_after\relax + \ifdim\d_spac_lines_correction_before<\zeropoint\d_spac_lines_correction_before\zeropoint\fi + \ifdim\d_spac_lines_correction_after <\zeropoint\d_spac_lines_correction_after \zeropoint\fi} + +% experiment, todo: proper mkiv mechanism +% +% \input ward \par +% \startframedtext test \stopframedtext +% \input ward \par +% \startlinecorrection \framed{xxx} \stoplinecorrection +% \input ward \par +% +% \setupwhitespace[big] +% +% \input ward \par +% \startframedtext test \stopframedtext +% \input ward \par +% \startlinecorrection \framed{xxx} \stoplinecorrection +% \input ward \par + +% to be redone: + +\permanent\protected\def\dotopbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_before]} +\permanent\protected\def\dobotbaselinecorrection{\expandafter\blank\expandafter[\the\d_spac_lines_correction_after ]} + +\permanent\def\showbaselinecorrection + {\enforced\permanent\protected\def\dobaselinecorrection % visualization is not watertight! + {\bgroup + \ifdim\prevdepth>\zeropoint + \kern-\prevdepth + \fi + \setbox\scratchbox\emptyhbox + \wd\scratchbox\hsize + \dp\scratchbox\strutdp + \nointerlineskip + \forgetall + \ruledvpack{\box\scratchbox}% + \egroup + \prevdepth\strutdp}% + \enforced\permanent\protected\def\dotopbaselinecorrection{\hrule\s!height\d_spac_lines_correction_before}% + \enforced\permanent\protected\def\dobotbaselinecorrection{\hrule\s!height\d_spac_lines_correction_after }} + +% \def\dobaselinecorrection % beware, this one is redefined below +% {\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi +% \kern\strutdp +% \prevdepth\strutdp} + +\permanent\protected\def\baselinecorrection + {\endgraf + \ifvmode + \ifdim\prevdepth<\maxdimen + \ifdim\prevdepth<\zeropoint \else + \ifdim\prevdepth<\strutdepth \relax + \pushlastnode + \dobaselinecorrection + \poplastnode + \fi + \fi + \fi + \fi} + +\permanent\protected\def\pagebaselinecorrection + {\ifdim\pagegoal<\maxdimen + \ifdim\pagetotal>\lineheight % or \topskip + \scratchdimen\pagetotal + \advance\scratchdimen\lineheight + \ifdim\scratchdimen<\pagegoal + \baselinecorrection + \fi + \fi + \fi} + +\permanent\protected\def\startbaselinecorrection + {\bgroup + \enforced\let\stopbaselinecorrection\egroup + \ifcase\baselinecorrectionmode + \or % normal + \baselinecorrection + \ifvmode + \setbox\scratchbox\vbox\bgroup\ignorespaces + \enforced\let\stopbaselinecorrection\donormalstopbaselinecorrection + \fi + \or % off + \or % force + \baselinecorrection + \ifvmode + \setbox\scratchbox\vbox\bgroup\ignorespaces + \enforced\let\stopbaselinecorrection\doforcedstopbaselinecorrection + \fi + \fi} + +\permanent\let\stopbaselinecorrection\relax + +\permanent\protected\def\donormalstopbaselinecorrection % I have to check columns yet. + {\egroup + \topbaselinecorrection + \box\scratchbox + \botbaselinecorrection + \egroup} + +\permanent\protected\def\doforcedstopbaselinecorrection % I have to check columns yet. + {\egroup + \forcedtopbaselinecorrection + \box\scratchbox + \forcedbotbaselinecorrection + \egroup} + +%D We do a bit more checking than needed. The pageborder check +%D is not needed, but I want to look the visualization as good +%D as possible too. + +\setnewconstant\baselinecorrectionmode\plusone + +\permanent\protected\def\onbaselinecorrection {\baselinecorrectionmode\plusone } +\permanent\protected\def\offbaselinecorrection {\baselinecorrectionmode\plustwo } +\permanent\protected\def\forcebaselinecorrection{\baselinecorrectionmode\plusthree} + +%D \macros +%D {topbaselinecorrection,botbaselinecorrection} +%D +%D The actual top and bottom corrections are implemented as: + +\permanent\protected\def\topbaselinecorrection + {\ifvmode \ifdim\pagegoal<\maxdimen + \forcedtopbaselinecorrection + \fi \fi} + +% \permanent\protected\def\forcedtopbaselinecorrection +% {\ifvmode +% \bgroup +% \spac_lines_initialize_corrections +% \whitespace % no longer ok +% \nointerlineskip +% \dotopbaselinecorrection +% \egroup +% \fi} + +\permanent\protected\def\botbaselinecorrection + {\ifvmode + \bgroup + \spac_lines_initialize_corrections + \dobotbaselinecorrection + \allowbreak % new, otherwise problems when many in a row + \prevdepth\strutdp + \egroup + \fi} + +% nointerlineskip +% +% startpacked +% \startlinecorrection \framed{test} \stoplinecorrection +% \startlinecorrection \framed{test} \stoplinecorrection +% \stoppacked + +\permanent\protected\def\forcedtopbaselinecorrection + {\ifvmode + \bgroup + \spac_lines_initialize_corrections + \vspacing[\v!white] + %\nointerlineskip % + \dotopbaselinecorrection + \egroup + \fi} + +\aliased\let\forcedbotbaselinecorrection\botbaselinecorrection + +\permanent\protected\def\dobaselinecorrection + {\ifdim\prevdepth>\zeropoint + \vspacing[\the\dimexpr-\prevdepth+\strutdp\relax]% + \else + \vspacing[\the\dimexpr\strutdp\relax]% + \fi + \prevdepth\strutdp} + +% \permanent\protected\def\dobaselinecorrection +% {\scratchdimen\dimexpr\ifdim\prevdepth>\zeropoint-\prevdepth+\fi\strutdp\relax +% \vspacing[\the\scratchdimen]% +% \prevdepth\strutdp} +% +% some day: +% +% \permanent\protected\def\dobaselinecorrection +% {\clf_checkstrutdepth\strutdp} +% +% \permanent\protected\def\baselinecorrection +% {\endgraf +% \ifvmode +% \ifdim\prevdepth<\maxdimen +% \ifdim\prevdepth<\zeropoint \else +% \ifdim\prevdepth<\strutdepth \relax +% % works in mvl: +% % \forcestrutdepth +% % doesn't work immediately (unless enforced with penalty): +% % \pushlastnode +% % \dobaselinecorrection +% % \poplastnode +% % works ok: +% \clf_checkstrutdepth\strutdp +% \fi +% \fi +% \fi +% \fi} + +%D For the moment only with placefloats (should work in mvl and boxes): + +\permanent\protected\def\checkprevdepth + {\endgraf + \ifvmode + \ifdim\prevdepth<\maxdimen + \ifdim\prevdepth<\zeropoint \else + \ifdim\prevdepth<\strutdepth \relax + \clf_checkstrutdepth\strutdp + \fi + \fi + \fi + \fi} + +\aliased\let\normalstartbaselinecorrection\startbaselinecorrection + +\pushoverloadmode + +\permanent\protected\def\startbaselinecorrection + {\ifgridsnapping + \snaptogrid[\v!normal]\vbox\bgroup + \enforced\let\stopbaselinecorrection\egroup + \else + \normalstartbaselinecorrection + \fi} + +\popoverloadmode + +% This is new (and experimental) and might replace some of the above. beware it doesn't always work +% out well, e.g. when used grouped and such (e.g. before display math doesn't work out well). + +% \permanent\protected\def\fakenextstrutline +% {\par +% \begingroup +% \reseteverypar +% \dontleavehmode\hpack to \zeropoint{\page_sides_anchor\hss\strut}% just a tracer +% \vskip-\parskip +% \vskip-\struttotal +% \endgroup} + +% \permanent\protected\def\fakenextstrutline +% {\par +% \begingroup +% \reseteverypar +% \dontleavehmode\hpack{\strut}\par +% \clf_fakenextstrutline +% \ifdim\pagetotal>\lineheight +% \pagetotal\dimexpr\pagetotal-\lineheight\relax +% \fi +% \endgroup} + +% \permanent\protected\def\fakenextstrutline +% {\par +% \begingroup +% \reseteverypar +% \forgetall +% \dontleavehmode\hpack{\strut}\par +% \clf_removelastline +% \endgroup} + +\protect \endinput |