summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/page-sid.mkiv
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2018-01-12 08:12:50 +0100
committerContext Git Mirror Bot <phg42.2a@gmail.com>2018-01-12 08:12:50 +0100
commitd0edf3e90e8922d9c672f24ecdc5d44fe2716f31 (patch)
tree5b618b87aa5078a8c744c94bbf058d69cd7111b2 /tex/context/base/mkiv/page-sid.mkiv
parent409a95f63883bd3b91699d39645e39a8a761457c (diff)
downloadcontext-d0edf3e90e8922d9c672f24ecdc5d44fe2716f31.tar.gz
2018-01-08 23:11:00
Diffstat (limited to 'tex/context/base/mkiv/page-sid.mkiv')
-rw-r--r--tex/context/base/mkiv/page-sid.mkiv89
1 files changed, 59 insertions, 30 deletions
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index 75f7725c3..e8f2b03a4 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -63,6 +63,8 @@
\newdimen \d_page_sides_bottomskip
\newdimen \d_page_sides_downshift
\newdimen \d_page_sides_pagetotal
+\newdimen \d_page_sides_topoffset
+\newdimen \d_page_sides_bottomoffset
\setnewconstant \c_page_sides_method \plusone % 0=raw 1=safe (.99) 2=tight (-1pt)
\setnewconstant \c_page_sides_align \zerocount
@@ -212,7 +214,8 @@
{\global\d_page_sides_vsize\d_page_sides_vsize_reset
% also here if used at all \global\holdinginserts\zerocount
\global\setfalse\c_page_sides_short
- \global\setfalse\c_page_sides_flag}
+ \global\setfalse\c_page_sides_flag
+ \global\c_page_sides_checks_done\zerocount}
\unexpanded\def\doifelsesidefloat
{\par
@@ -282,37 +285,50 @@
\fi}%
\endgroup}
-\def\page_sides_flush_floats_after_none
- {\ifdim\parskip>\zeropoint % why this test ?
- \ifdim\d_page_sides_bottomskip>\parskip
- \blank[\v!nowhite,\rootfloatparameter\c!sidespaceafter]%
- \fi
- \else
- \blank[\rootfloatparameter\c!sidespaceafter]%
- \fi}
-
-\def\page_sides_flush_floats_blank#1% we need to deal with the distance
- {\ifdim\d_page_sides_bottomskip>\d_page_sides_topskip
- \blank[%
- \ifnum#1>\zerocount\v!nowhite,\fi
- \ifdim\d_page_sides_topskip >\zeropoint-\rootfloatparameter\c!sidespacebefore,\fi % the next one
- \ifdim\d_page_sides_bottomskip>\zeropoint \rootfloatparameter\c!sidespaceafter \fi
- ]%
- \else\ifdim\d_page_sides_bottomskip<\d_page_sides_topskip
- \blank[%
- \ifnum#1>\zerocount\v!nowhite,\fi
- \ifdim\d_page_sides_bottomskip>\zeropoint -\rootfloatparameter\c!sidespaceafter ,\fi
- \ifdim\d_page_sides_topskip >\zeropoint \rootfloatparameter\c!sidespacebefore \fi
- ]%
- \fi\fi}
+\def\page_sides_flush_floats_after_none % we force a flush
+ {\edef\tempstring{%
+ \ifdim\d_page_sides_bottomskip>\zeropoint
+ \ifdim\parskip>\zeropoint % why this test ?
+ \ifdim\d_page_sides_bottomskip>\parskip
+ \v!nowhite,\rootfloatparameter\c!sidespaceafter
+ \fi
+ \else
+ \rootfloatparameter\c!sidespaceafter
+ \fi
+ \fi}%
+ \ifx\tempstring\empty\else\ifx\tempstring\v!none\else
+ \blank[\tempstring]%
+ \fi\fi
+ \page_sides_inject_after}
+
+\def\page_sides_flush_floats_blank#1% we have two successive ones
+ {\edef\tempstring{%
+ \ifx#1\empty\else#1,\fi
+ \ifdim\d_page_sides_bottomskip>\d_page_sides_topskip
+ \ifdim\d_page_sides_topskip >\zeropoint-\rootfloatparameter\c!sidespacebefore,\fi % the next one
+ \ifdim\d_page_sides_bottomskip>\zeropoint \rootfloatparameter\c!sidespaceafter ,\fi
+ \else\ifdim\d_page_sides_bottomskip<\d_page_sides_topskip
+ \ifdim\d_page_sides_bottomskip>\zeropoint -\rootfloatparameter\c!sidespaceafter ,\fi
+ \ifdim\d_page_sides_topskip >\zeropoint \rootfloatparameter\c!sidespacebefore,\fi
+ \else % equal
+ \rootfloatparameter\c!sidespacebefore % inbetween
+ \fi\fi}%
+ \ifx\tempstring\empty\else\ifx\tempstring\v!none\else
+ \blank[\tempstring]%
+ \fi\fi
+ \page_sides_inject_after}
-\def\page_sides_flush_floats_after_next
+\def\page_sides_flush_floats_after_next % we have two successive ones
{\ifdim\parskip>\zeropoint % why this test ?
\ifdim\d_page_sides_bottomskip>\parskip
- \page_sides_flush_floats_blank\plusone
- \fi
+ \page_sides_flush_floats_blank\v!nowhite
+ \else\ifdim\d_page_sides_topskip>\parskip
+ \page_sides_flush_floats_blank\v!nowhite
+ \else
+ % use parskip
+ \fi\fi
\else
- \page_sides_flush_floats_blank\zerocount
+ \page_sides_flush_floats_blank\empty
\fi}
\def\page_sides_check_floats_after_par
@@ -647,12 +663,25 @@
% % but it seems to work
% \endgroup}
+\def\page_sides_inject_before
+ {\edef\tempstring{\rootfloatparameter\c!spacebeforeside}%
+ \ifx\tempstring\empty\else\ifx\tempstring\v!none\else
+ \blank[\tempstring]%
+ \fi\fi}
+
+\def\page_sides_inject_after
+ {\edef\tempstring{\rootfloatparameter\c!spaceafterside}%
+ \ifx\tempstring\empty\else\ifx\tempstring\v!none\else
+ \blank[\tempstring]%
+ \fi\fi}
+
\def\page_sides_prepare_space
{%\fakenextstrutline % does more bad than good at page crossing
\inhibitblank} % hm, why here .. gets obscured anyway
\def\page_sides_handle_float#1% grid (4) is rather experimental
- {\page_sides_prepare_space
+ {\page_sides_inject_before
+ \page_sides_prepare_space
\page_sides_apply_horizontal_shift
\page_sides_check_previous_float
\page_sides_inject_dummy_lines
@@ -820,7 +849,7 @@
\fi
\kern-\privatescratchcounter\baselineskip
\penalty\zerocount
- \triggerpagebuilder
+ \triggerpagebuilder % the penalty already does that
\endgroup}
\def\adjustsidefloatdisplaylines % public, will change