From 318b6f5f9f606d1fa45c1f23564478475fa1fc4c Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Mon, 2 Oct 2017 11:46:44 +0200
Subject: 2017-10-02 10:40:00

---
 doc/context/documents/general/manuals/details.pdf  | Bin 2333575 -> 3561923 bytes
 doc/context/documents/general/qrcs/setup-cs.pdf    | Bin 816099 -> 816107 bytes
 doc/context/documents/general/qrcs/setup-de.pdf    | Bin 816680 -> 816682 bytes
 doc/context/documents/general/qrcs/setup-en.pdf    | Bin 818485 -> 818486 bytes
 doc/context/documents/general/qrcs/setup-fr.pdf    | Bin 811825 -> 811833 bytes
 doc/context/documents/general/qrcs/setup-it.pdf    | Bin 815339 -> 815342 bytes
 doc/context/documents/general/qrcs/setup-nl.pdf    | Bin 810087 -> 810088 bytes
 doc/context/documents/general/qrcs/setup-ro.pdf    | Bin 812486 -> 812487 bytes
 .../manuals/details/details-floatingaround.tex     |  74 ++++++++
 tex/context/base/mkii/cont-new.mkii                |   2 +-
 tex/context/base/mkii/context.mkii                 |   2 +-
 tex/context/base/mkiv/colo-ini.mkiv                |  35 ++++
 tex/context/base/mkiv/cont-new.mkiv                |   2 +-
 tex/context/base/mkiv/context.mkiv                 |   2 +-
 tex/context/base/mkiv/font-pre.mkiv                |  33 ----
 tex/context/base/mkiv/page-flt.lua                 |   4 +-
 tex/context/base/mkiv/page-sid.mkiv                | 202 +++++++++++++++------
 tex/context/base/mkiv/status-files.pdf             | Bin 25753 -> 25710 bytes
 tex/context/base/mkiv/status-lua.pdf               | Bin 426092 -> 426091 bytes
 tex/context/interface/mkiv/i-context.pdf           | Bin 818485 -> 818486 bytes
 tex/context/interface/mkiv/i-readme.pdf            | Bin 60766 -> 60766 bytes
 tex/generic/context/luatex/luatex-fonts-merged.lua |   2 +-
 22 files changed, 265 insertions(+), 93 deletions(-)

diff --git a/doc/context/documents/general/manuals/details.pdf b/doc/context/documents/general/manuals/details.pdf
index d607714d1..74f9a5c51 100644
Binary files a/doc/context/documents/general/manuals/details.pdf and b/doc/context/documents/general/manuals/details.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-cs.pdf b/doc/context/documents/general/qrcs/setup-cs.pdf
index 0d3c2b3bf..f651dfc56 100644
Binary files a/doc/context/documents/general/qrcs/setup-cs.pdf and b/doc/context/documents/general/qrcs/setup-cs.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-de.pdf b/doc/context/documents/general/qrcs/setup-de.pdf
index 3cb087445..74ba7f599 100644
Binary files a/doc/context/documents/general/qrcs/setup-de.pdf and b/doc/context/documents/general/qrcs/setup-de.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-en.pdf b/doc/context/documents/general/qrcs/setup-en.pdf
index 44cfc846c..456f9e620 100644
Binary files a/doc/context/documents/general/qrcs/setup-en.pdf and b/doc/context/documents/general/qrcs/setup-en.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-fr.pdf b/doc/context/documents/general/qrcs/setup-fr.pdf
index 420850dd7..53c9c655b 100644
Binary files a/doc/context/documents/general/qrcs/setup-fr.pdf and b/doc/context/documents/general/qrcs/setup-fr.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-it.pdf b/doc/context/documents/general/qrcs/setup-it.pdf
index 162822927..cafe55d31 100644
Binary files a/doc/context/documents/general/qrcs/setup-it.pdf and b/doc/context/documents/general/qrcs/setup-it.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-nl.pdf b/doc/context/documents/general/qrcs/setup-nl.pdf
index 33e62d05f..ff9ead339 100644
Binary files a/doc/context/documents/general/qrcs/setup-nl.pdf and b/doc/context/documents/general/qrcs/setup-nl.pdf differ
diff --git a/doc/context/documents/general/qrcs/setup-ro.pdf b/doc/context/documents/general/qrcs/setup-ro.pdf
index 3ab10e34c..132ce0d41 100644
Binary files a/doc/context/documents/general/qrcs/setup-ro.pdf and b/doc/context/documents/general/qrcs/setup-ro.pdf differ
diff --git a/doc/context/sources/general/manuals/details/details-floatingaround.tex b/doc/context/sources/general/manuals/details/details-floatingaround.tex
index 719819fb6..c87ef1a8b 100644
--- a/doc/context/sources/general/manuals/details/details-floatingaround.tex
+++ b/doc/context/sources/general/manuals/details/details-floatingaround.tex
@@ -1295,6 +1295,80 @@ First we show some keyword variant, next some parameter driven versions.
 \stopcombination
 \stoplinecorrection
 
+There is some tracing built in but as this mechanism is rather complex it only
+gives an idea about what is going on. Here is an example:
+
+\startbuffer[one]
+\enabletrackers[floats.anchoring]
+
+\showframe
+
+\setupfloat
+  [sidespacebefore=big,
+   sidespaceafter=big]
+
+\starttext
+    \dorecurse{10}{
+        \placefigure[left]{#1.1}{}
+        a small sentence \par
+        \placefigure[left]{#1.2}{}
+        a small sentence \par
+        \input klein \par
+    }
+\stoptext
+\stopbuffer
+
+\typebuffer[one]
+
+In \in {figure} [fig:side:one:1] and \in {figure} [fig:side:one:2] you see the
+first two pages of the typeset result.
+
+The anchor to the text is showed in orange and an optional shift in red. The content
+is in green and a depth compensation in magenta. Dummy lines added for proper
+spacing as well as progressing beyond a previous float are in blue.
+
+\startplacefigure[title={Side float tracing example 1, page 1.},reference=fig:side:one:1]
+    \scale[width=\textwidth]{\typesetbuffer[one][page=1]}
+\stopplacefigure
+
+\startplacefigure[title={Side float tracing example 1, page 2.},reference=fig:side:one:2]
+    \scale[width=\textwidth]{\typesetbuffer[one][page=2]}
+\stopplacefigure
+
+A second example that uses different settings is shown in \in {figure}
+[fig:side:two:1] and \in {figure} [fig:side:two:2].
+
+\startbuffer[two]
+\enabletrackers[floats.anchoring]
+
+\setupfloat
+  [sidespacebefore=,
+   sidespaceafter=big,
+   step=small]
+
+\showframe
+
+\starttext
+    \dorecurse{10}{
+        \placefigure[left]{#1.1}{}
+        a small sentence \par
+        \placefigure[left]{#1.2}{}
+        a small sentence \par
+        \input klein \par
+    }
+\stoptext
+\stopbuffer
+
+\typebuffer[two]
+
+\startplacefigure[title={Side float tracing example 2, page 1.},reference=fig:side:two:1]
+    \scale[width=\textwidth]{\typesetbuffer[two][page=1]}
+\stopplacefigure
+
+\startplacefigure[title={Side float tracing example 2, page 2.},reference=fig:side:two:2]
+    \scale[width=\textwidth]{\typesetbuffer[two][page=2]}
+\stopplacefigure
+
 \stopchapter
 
 \stopcomponent
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 4ac67aef0..57b49b8a1 100644
--- a/tex/context/base/mkii/cont-new.mkii
+++ b/tex/context/base/mkii/cont-new.mkii
@@ -11,7 +11,7 @@
 %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
 %C details.
 
-\newcontextversion{2017.10.01 14:32}
+\newcontextversion{2017.10.02 10:34}
 
 %D This file is loaded at runtime, thereby providing an
 %D excellent place for hacks, patches, extensions and new
diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii
index 29f91651b..56884db5e 100644
--- a/tex/context/base/mkii/context.mkii
+++ b/tex/context/base/mkii/context.mkii
@@ -20,7 +20,7 @@
 %D your styles an modules.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2017.10.01 14:32}
+\edef\contextversion{2017.10.02 10:34}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/mkiv/colo-ini.mkiv b/tex/context/base/mkiv/colo-ini.mkiv
index 54ad1e9f9..34b43a947 100644
--- a/tex/context/base/mkiv/colo-ini.mkiv
+++ b/tex/context/base/mkiv/colo-ini.mkiv
@@ -1415,6 +1415,41 @@
 \definetransparency [color]      [15]
 \definetransparency [luminosity] [16]
 
+%D Some common ones:
+
+\definecolor[trace:0][s=.4]
+\definecolor[trace:1][r=.6]
+\definecolor[trace:2][g=.6]
+\definecolor[trace:3][b=.6]
+\definecolor[trace:4][r=.6,g=.6]
+\definecolor[trace:5][r=.6,b=.6]
+\definecolor[trace:6][g=.6,b=.6]
+\definecolor[trace:7][r=.8,g=.4]
+\definecolor[trace:8][r=.8,b=.4]
+\definecolor[trace:9][g=.4,b=.8]
+
+\definecolor[trace:w][s=1]
+\definecolor[trace:r][r=.75,t=.5,a=1]
+\definecolor[trace:g][g=.75,t=.5,a=1]
+\definecolor[trace:b][b=.75,t=.5,a=1]
+\definecolor[trace:c][c=.75,t=.5,a=1]
+\definecolor[trace:m][m=.75,t=.5,a=1]
+\definecolor[trace:y][y=.75,t=.5,a=1]
+\definecolor[trace:s][s=.75,t=.5,a=1]
+\definecolor[trace:d][s=.25,t=.5,a=1]
+\definecolor[trace:o][r=1,g=.6,b=.1,t=.5,a=1]
+
+\definecolor[trace:dw][s=1]
+\definecolor[trace:dr][r=.75,t=.75,a=1]
+\definecolor[trace:dg][g=.75,t=.75,a=1]
+\definecolor[trace:db][b=.75,t=.75,a=1]
+\definecolor[trace:dc][c=.75,t=.75,a=1]
+\definecolor[trace:dm][m=.75,t=.75,a=1]
+\definecolor[trace:dy][y=.75,t=.75,a=1]
+\definecolor[trace:ds][s=.75,t=.75,a=1]
+\definecolor[trace:dd][s=.25,t=.75,a=1]
+\definecolor[trace:do][r=1,g=.6,b=.1,t=.75,a=1]
+
 \setupcolors
   [\c!state=\v!stop, % color will be enabled later on
    \c!conversion=\v!yes,
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index 79c533955..79b80846a 100644
--- a/tex/context/base/mkiv/cont-new.mkiv
+++ b/tex/context/base/mkiv/cont-new.mkiv
@@ -11,7 +11,7 @@
 %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
 %C details.
 
-\newcontextversion{2017.10.01 14:32}
+\newcontextversion{2017.10.02 10:34}
 
 %D This file is loaded at runtime, thereby providing an excellent place for
 %D hacks, patches, extensions and new features.
diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv
index 57ae76dcd..2a8d1ab60 100644
--- a/tex/context/base/mkiv/context.mkiv
+++ b/tex/context/base/mkiv/context.mkiv
@@ -41,7 +41,7 @@
 %D up and the dependencies are more consistent.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2017.10.01 14:32}
+\edef\contextversion{2017.10.02 10:34}
 \edef\contextkind   {beta}
 
 %D For those who want to use this:
diff --git a/tex/context/base/mkiv/font-pre.mkiv b/tex/context/base/mkiv/font-pre.mkiv
index 632cbe29c..c8550d815 100644
--- a/tex/context/base/mkiv/font-pre.mkiv
+++ b/tex/context/base/mkiv/font-pre.mkiv
@@ -390,17 +390,6 @@
 %D We define some colors that are used in tracing (for instance \OPENTYPE\
 %D features). We cannot yet inherit because no colors are predefined.
 
-\definecolor[trace:0][s=.4]
-\definecolor[trace:1][r=.6]
-\definecolor[trace:2][g=.6]
-\definecolor[trace:3][b=.6]
-\definecolor[trace:4][r=.6,g=.6]
-\definecolor[trace:5][r=.6,b=.6]
-\definecolor[trace:6][g=.6,b=.6]
-\definecolor[trace:7][r=.8,g=.4]
-\definecolor[trace:8][r=.8,b=.4]
-\definecolor[trace:9][g=.4,b=.8]
-
 \definecolor[font:init][r=.75]
 \definecolor[font:medi][g=.75]
 \definecolor[font:fina][b=.75]
@@ -408,28 +397,6 @@
 \definecolor[font:mark][r=.75,b=.75] % [m=.75]
 \definecolor[font:rest][b=.75,g=.75] % [c=.75]
 
-\definecolor[trace:w][s=1]
-\definecolor[trace:r][r=.75,t=.5,a=1]
-\definecolor[trace:g][g=.75,t=.5,a=1]
-\definecolor[trace:b][b=.75,t=.5,a=1]
-\definecolor[trace:c][c=.75,t=.5,a=1]
-\definecolor[trace:m][m=.75,t=.5,a=1]
-\definecolor[trace:y][y=.75,t=.5,a=1]
-\definecolor[trace:s][s=.75,t=.5,a=1]
-\definecolor[trace:d][s=.25,t=.5,a=1]
-\definecolor[trace:o][r=1,g=.6,b=.1,t=.5,a=1]
-
-\definecolor[trace:dw][s=1]
-\definecolor[trace:dr][r=.75,t=.75,a=1]
-\definecolor[trace:dg][g=.75,t=.75,a=1]
-\definecolor[trace:db][b=.75,t=.75,a=1]
-\definecolor[trace:dc][c=.75,t=.75,a=1]
-\definecolor[trace:dm][m=.75,t=.75,a=1]
-\definecolor[trace:dy][y=.75,t=.75,a=1]
-\definecolor[trace:ds][s=.75,t=.75,a=1]
-\definecolor[trace:dd][s=.25,t=.75,a=1]
-\definecolor[trace:do][r=1,g=.6,b=.1,t=.75,a=1]
-
 \definecolor[font:0] [s=1]
 \definecolor[font:1] [r=.75]
 \definecolor[font:2] [g=.75]
diff --git a/tex/context/base/mkiv/page-flt.lua b/tex/context/base/mkiv/page-flt.lua
index 30796f91d..fdfd968d5 100644
--- a/tex/context/base/mkiv/page-flt.lua
+++ b/tex/context/base/mkiv/page-flt.lua
@@ -13,9 +13,9 @@ local tostring = tostring
 local insert, remove = table.insert, table.remove
 local find = string.find
 
-local trace_floats = false  trackers.register("graphics.floats", function(v) trace_floats = v end) -- name might change
+local trace_floats = false  trackers.register("floats.caching", function(v) trace_floats = v end) -- name might change
 
-local report_floats = logs.reporter("structure","floats")
+local report_floats = logs.reporter("floats","caching")
 
 local C, S, P, lpegmatch = lpeg.C, lpeg.S, lpeg.P, lpeg.match
 
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index 2f5acaee6..50023c2e8 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -78,6 +78,15 @@
 
 \newif\iftracesidefloats % public (might change)
 
+\def\page_sides_floats_legend
+  {\writestatus\m!floatblocks{anchor: orange, shift: red, box: green, dummy: blue, depth: magenta}%
+   \glet\page_sides_floats_legenda\relax}
+
+\installtextracker{floats.anchoring}
+  {\page_sides_floats_legend
+   \tracesidefloatstrue}
+  {\tracesidefloatsfalse}
+
 % end of public variables
 
 \def\page_sides_apply_horizontal_shift
@@ -184,8 +193,10 @@
 
 \def\page_sides_flush_floats
   {\par
-   \ifdim\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint
+   \ifdim\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal\relax>\zeropoint
      \page_sides_flush_floats_indeed
+   \else
+     % no need as the par just fits next to the previous float
    \fi
    % also here if used at all \global\holdinginserts\zerocount
    \global\d_page_sides_vsize\d_page_sides_vsize_reset
@@ -212,48 +223,69 @@
 
 % we don't officially know what kind of float we flush
 
+\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_tracer
+  {\dontleavehmode
+   \ruledhpack\bgroup\backgroundline[trace:b]{%
+     \ifnum\recurselevel=\plusone
+       \llap{{\smallinfofont\the\scratchdimen}\hskip.5\leftmargindistance}%
+     \else\ifodd\recurselevel
+       \llap{{\smallinfofont\recurselevel}\hskip.5\leftmargindistance}%
+     \fi\fi
+     \m_pages_strut
+     \kern\hsize
+   \egroup}}
+
 \def\page_sides_flush_floats_indeed
   {% the \d_page_sides_bottomskip == \rootfloatparameter\c!sidespaceafter is embedded
    % in the progression of the float
-   \global\advance\d_page_sides_vsize-\d_page_sides_bottomskip\relax
-   \ifdim\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint % new per 2017-09-28
-     \begingroup
-     \let\page_sides_flush_floats\relax
-     \edef\m_pages_strut
-       {\ifcsname\??sidefloatsteps\rootfloatparameter\c!step\endcsname
-          \lastnamedcs
-        \else
-          \strut
-       \fi}%
-     \forgetall
-     \doloop
-       {\iftracesidefloats
-          \dontleavehmode
-          \ruledhpack{\m_pages_strut\kern\d_page_sides_width}%
-        \else
-          \m_pages_strut
-        \fi
-        \par
-        \nointerlineskip
-        \ifdim\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint
-          \ifnum\recurselevel>\plushundred % safeguard, sort of deadcycles
-           %\writestatus{sidefloats}{\recurselevel\space empty lines forced, quitting}%
-            \exitloop
-          \fi
-        \else
-         %\writestatus{sidefloats}{\recurselevel\space empty lines forced}%
+   \begingroup
+   \let\page_sides_flush_floats\relax
+   \edef\m_pages_strut
+     {\ifcsname\??sidefloatsteps\rootfloatparameter\c!step\endcsname
+        \lastnamedcs
+      \else
+        \strut
+     \fi}%
+   \forgetall
+   \doloop
+     {\scratchdimen\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal\relax
+      \iftracesidefloats
+        \page_sides_flush_floats_tracer
+      \else
+        \m_pages_strut
+      \fi
+      \par
+      \nointerlineskip
+      \ifdim\scratchdimen>\zeropoint
+        \ifnum\recurselevel>\plushundred % safeguard, sort of deadcycles
           \exitloop
-        \fi}%
-     \endgroup
-   \else
-     % no need as the par just fits next to the previous float
-   \fi
+        \fi
+      \else
+        \exitloop
+      \fi}%
+   \endgroup
+   % we're going to add top space anyway so ....
    \ifdim\parskip>\zeropoint % why this test ?
      \ifdim\d_page_sides_bottomskip>\parskip
-       \blank[\v!nowhite,\rootfloatparameter\c!sidespaceafter]%
+       \page_sides_flush_floats_blank\plusone
      \fi
    \else
-      \blank[\rootfloatparameter\c!sidespaceafter]%
+     \page_sides_flush_floats_blank\zerocount
    \fi}
 
 \def\page_sides_check_floats_after_par
@@ -362,6 +394,35 @@
         \kern\d_page_sides_rightshift
       \fi\fi}}
 
+\def\page_sides_apply_vertical_shift_normal
+  {\global\setbox\floatbox\hpack % why extra box
+     {\vpack
+        {\vskip\privatescratchdimen
+         \nointerlineskip
+         \box\floatbox
+         \ifnum\c_page_sides_align=\plusfive \vskip-\lineheight \fi}}}
+
+\def\page_sides_apply_vertical_shift_traced
+  {\global\setbox\floatbox\hpack % why extra box
+     {\backgroundline[trace:r]{\ruledhpack{\vpack
+        {\hsize\wd\floatbox
+         \vskip\privatescratchdimen
+         \nointerlineskip
+         \backgroundline[trace:g]{\ruledhpack{\box\floatbox}}%
+         \ifnum\c_page_sides_align=\plusfive \vskip-\lineheight \fi}}}}}
+
+\def\page_sides_apply_depth_normal
+  {\global\setbox\floatbox\hpack
+     {\lower\strutdepth\box\floatbox}}
+
+\def\page_sides_apply_depth_traced
+  {\global\setbox\floatbox\hpack
+     {\scratchdimen\wd\floatbox
+      \lower\strutdp\box\floatbox
+      \hskip-\scratchdimen
+      \color[trace:m]
+        {\vrule\s!height\zeropoint\s!depth\strutdp\s!width\scratchdimen}}}
+
 \def\page_sides_apply_vertical_shift
   {\ifnum\c_page_sides_align=\plusfour
      \getnoflines{\ht\floatbox}%
@@ -370,7 +431,11 @@
      \advance\privatescratchdimen\noflines\lineheight
      % todo: maybe rounding problem here
      % \global\setbox\floatbox\hbox{\lower\lineheight\box\floatbox}%
-     \global\setbox\floatbox\hpack{\lower\strutdepth\box\floatbox}%
+     \iftracesidefloats
+       \page_sides_apply_depth_traced
+     \else
+       \page_sides_apply_depth_normal
+     \fi
      \ht\floatbox\privatescratchdimen
      \dp\floatbox\zeropoint
    \fi
@@ -405,12 +470,11 @@
    \ifnum\c_page_sides_n_of_lines>\zerocount
      \advance\privatescratchdimen\c_page_sides_n_of_lines\lineheight
    \fi
-   \global\setbox\floatbox\hpack % why extra box
-     {\vbox
-        {\vskip\privatescratchdimen
-         \nointerlineskip
-         \box\floatbox
-         \ifnum\c_page_sides_align=\plusfive \vskip-\lineheight \fi}}%
+   \iftracesidefloats
+     \page_sides_apply_vertical_shift_traced % uses \privatescratchdimen
+   \else
+     \page_sides_apply_vertical_shift_normal % uses \privatescratchdimen
+   \fi
    \ifnum\c_page_sides_float_type<\plusfour
      \global\d_page_sides_topskip\zeropoint
    \else\ifnum\c_page_sides_float_type>\plusfive
@@ -537,9 +601,22 @@
      \global\settrue\c_page_floats_room
    \fi}
 
+% \unexpanded\def\fakenextstrutline
+%   {\par
+%    \begingroup
+%    % overkill, done in \page_sides_inject_dummy_lines
+%    \triggerpagebuilder
+%    \reseteverypar
+%    \forgetall
+%    \dontleavehmode\hpack to \hsize{\strut\hss}\par
+%    \clf_removelastline
+%    % \pagetotal is still one line too much but pagedepth is ok
+%    % but it seems to work
+%    \endgroup}
+
 \def\page_sides_prepare_space
-  {\fakenextstrutline
-   \inhibitblank}
+  {%\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
@@ -569,6 +646,14 @@
 
 \let\page_sides_check_floats\page_sides_check_floats_indeed
 
+\unexpanded\def\page_sides_check_floats_tracer
+  {\begingroup
+   \hskip-\d_page_sides_width % kern
+   \color[trace:o]%
+     {\vrule\s!height.5\points\s!depth.5\points\s!width\d_page_sides_width
+      \llap{\showstruts\strut\kern.25\bodyfontsize}}%
+   \endgroup}
+
 \unexpanded\def\page_sides_check_floats_set
   {\privatescratchdimen\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax
    \c_page_sides_n_of_hang\privatescratchdimen
@@ -591,15 +676,18 @@
        \privatescratchcounter\c_page_sides_n_of_lines
        \privatescratchdimen\dimexpr\hsize-\d_page_sides_width\relax
        \dorecurse\c_page_sides_n_of_lines
-         {\appendtoks \zeropoint \hsize \to \privatescratchtoks}%
+        %{\appendtoks \zeropoint \hsize \to \privatescratchtoks}%
+         {\toksapp\privatescratchtoks{\zeropoint\hsize}}%
        \ifnum\c_page_sides_n_of_hang>\c_page_sides_n_of_lines
          \advance\c_page_sides_n_of_hang -\c_page_sides_n_of_lines\relax
          \advance\privatescratchcounter\c_page_sides_n_of_hang
          \dorecurse\c_page_sides_n_of_hang % weird, shouldn't that be scratchcounter
            {\ifnum\c_page_sides_float_type>\plusfour
-              \appendtoks \zeropoint         \privatescratchdimen \to \privatescratchtoks
+             %\appendtoks \zeropoint         \privatescratchdimen \to \privatescratchtoks
+              \toksapp\privatescratchtoks{\zeropoint\privatescratchdimen}%
             \else
-              \appendtoks \d_page_sides_width\privatescratchdimen \to \privatescratchtoks
+             %\appendtoks \d_page_sides_width\privatescratchdimen \to \privatescratchtoks
+              \toksapp\privatescratchtoks{\d_page_sides_width\privatescratchdimen}%
             \fi}%
        \fi
        \parshape
@@ -615,10 +703,7 @@
    \fi
    \global\advance\c_page_sides_checks_done \plusone
    \iftracesidefloats
-     \hskip-\d_page_sides_width % kern
-     \color[darkgray]%
-       {\vrule\s!height.5\points\s!depth.5\points\s!width\d_page_sides_width
-        \llap{\showstruts\strut\kern.25\bodyfontsize}}%
+     \page_sides_check_floats_tracer
    \fi}
 
 \unexpanded\def\page_sides_check_floats_reset
@@ -640,15 +725,26 @@
      \fi
    \fi}
 
-\def\page_sides_inject_dummy_lines
+\def\page_sides_inject_dummy_lines_normal
+  {\dorecurse\privatescratchcounter{\hpack to \hsize{\strut\hss}}}
+
+\def\page_sides_inject_dummy_lines_traced
+  {\dorecurse\privatescratchcounter{\ruledhpack{\backgroundline[trace:b]{\hpack to \hsize{\strut\hss}}}}}
+
+\def\page_sides_inject_dummy_lines % so always one
   {\begingroup
    \privatescratchcounter\pageshrink
    \divide\privatescratchcounter \baselineskip
    \advance\privatescratchcounter \plusone
    \parskip\zeropoint
-   \dorecurse\privatescratchcounter{\hpack to \hsize{}}%
+   \iftracesidefloats
+     \page_sides_inject_dummy_lines_traced
+   \else
+     \page_sides_inject_dummy_lines_normal
+   \fi
    \kern-\privatescratchcounter\baselineskip
    \penalty\zerocount
+   \triggerpagebuilder
    \endgroup}
 
 \def\adjustsidefloatdisplaylines % public, will change
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index de691e00e..f25ca8f25 100644
Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index b4b799b4f..8dcafa533 100644
Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ
diff --git a/tex/context/interface/mkiv/i-context.pdf b/tex/context/interface/mkiv/i-context.pdf
index 44cfc846c..456f9e620 100644
Binary files a/tex/context/interface/mkiv/i-context.pdf and b/tex/context/interface/mkiv/i-context.pdf differ
diff --git a/tex/context/interface/mkiv/i-readme.pdf b/tex/context/interface/mkiv/i-readme.pdf
index 47468dc06..2af2fc801 100644
Binary files a/tex/context/interface/mkiv/i-readme.pdf and b/tex/context/interface/mkiv/i-readme.pdf differ
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 18c00e569..7cd7b442b 100644
--- a/tex/generic/context/luatex/luatex-fonts-merged.lua
+++ b/tex/generic/context/luatex/luatex-fonts-merged.lua
@@ -1,6 +1,6 @@
 -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua
 -- parent file : c:/data/develop/context/sources/luatex-fonts.lua
--- merge date  : 10/01/17 14:32:33
+-- merge date  : 10/02/17 10:34:56
 
 do -- begin closure to overcome local limits and interference
 
-- 
cgit v1.2.3