From 6f249eccedb4224c9b43cbef0cca9890a574eefb Mon Sep 17 00:00:00 2001
From: Hans Hagen <pragma@wxs.nl>
Date: Thu, 5 Jan 2012 19:27:47 +0100
Subject: beta 2011.12.19 13:06

---
 tex/context/base/cont-new.mkii                     |   2 +-
 tex/context/base/cont-new.mkiv                     |   2 +-
 tex/context/base/context-version.pdf               | Bin 4069 -> 4068 bytes
 tex/context/base/context-version.png               | Bin 104792 -> 105482 bytes
 tex/context/base/context.mkii                      |   2 +-
 tex/context/base/context.mkiv                      |   2 +-
 tex/context/base/core-mis.mkiv                     |  18 ++--
 tex/context/base/page-flt.mkiv                     |   7 +-
 tex/context/base/page-one.mkiv                     |   2 +-
 tex/context/base/page-sid.mkiv                     | 108 +++++++++++++--------
 tex/context/base/spac-ver.mkiv                     |   3 +-
 tex/context/base/status-files.pdf                  | Bin 23976 -> 23983 bytes
 tex/context/base/status-lua.pdf                    | Bin 169720 -> 169717 bytes
 tex/context/base/strc-flt.mkvi                     |   7 +-
 tex/generic/context/luatex/luatex-fonts-merged.lua |   2 +-
 15 files changed, 93 insertions(+), 62 deletions(-)

diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii
index 91f661c53..3a2639c96 100644
--- a/tex/context/base/cont-new.mkii
+++ b/tex/context/base/cont-new.mkii
@@ -11,7 +11,7 @@
 %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
 %C details.
 
-\newcontextversion{2011.12.19 00:49}
+\newcontextversion{2011.12.19 13:06}
 
 %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/cont-new.mkiv b/tex/context/base/cont-new.mkiv
index f06d41d2d..5ec1e118c 100644
--- a/tex/context/base/cont-new.mkiv
+++ b/tex/context/base/cont-new.mkiv
@@ -11,7 +11,7 @@
 %C therefore copyrighted by \PRAGMA. See mreadme.pdf for
 %C details.
 
-\newcontextversion{2011.12.19 00:49}
+\newcontextversion{2011.12.19 13:06}
 
 %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/context-version.pdf b/tex/context/base/context-version.pdf
index 7307dd017..f98f74e94 100644
Binary files a/tex/context/base/context-version.pdf and b/tex/context/base/context-version.pdf differ
diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png
index 2b2d5e9f0..b2123c564 100644
Binary files a/tex/context/base/context-version.png and b/tex/context/base/context-version.png differ
diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii
index 51adcf0a0..53c21864e 100644
--- a/tex/context/base/context.mkii
+++ b/tex/context/base/context.mkii
@@ -20,7 +20,7 @@
 %D your styles an modules.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2011.12.19 00:49}
+\edef\contextversion{2011.12.19 13:06}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv
index 35cc7f31b..ee8df8080 100644
--- a/tex/context/base/context.mkiv
+++ b/tex/context/base/context.mkiv
@@ -20,7 +20,7 @@
 %D your styles an modules.
 
 \edef\contextformat {\jobname}
-\edef\contextversion{2011.12.19 00:49}
+\edef\contextversion{2011.12.19 13:06}
 
 %D For those who want to use this:
 
diff --git a/tex/context/base/core-mis.mkiv b/tex/context/base/core-mis.mkiv
index d0f418991..0a7bd93fa 100644
--- a/tex/context/base/core-mis.mkiv
+++ b/tex/context/base/core-mis.mkiv
@@ -783,8 +783,8 @@
             \c!before,\c!after,\c!left,\c!right]}}%
    \doifsomething{#1}
      {\setuvalue{#1}{\delimitedtext[#1]}%
-      \setvalue{\e!start#1}{\startdelimitedtext[#1]}%
-      \setvalue{\e!stop #1}{\stopdelimitedtext}}}
+      \setuvalue{\e!start#1}{\startdelimitedtext[#1]}% u added
+      \setuvalue{\e!stop #1}{\stopdelimitedtext}}}   % u added
 
 \unexpanded\def\setupdelimitedtext
   {\dotripleargument\dosetupdelimitedtext}
@@ -806,12 +806,11 @@
 \let\dohandlerepeatdelimitedtext\relax
 
 \unexpanded\def\startdelimitedtext[#1]%
-  {\bgroup
+  {\begingroup
    \pushdelimitedtext{#1}%
    \dostarttagged\t!delimitedblock\currentdelimitedtext
    \doifelse{\delimitedtextparameter\c!method}\s!font
-     {\def\dostopdelimitedtext
-        {\removeunwantedspaces\ignoredelimitedtext\c!right}%
+     {\let\dostopdelimitedtext\dostopdelimitedtext_font
       \ignoredelimitedtext\c!left\ignorespaces}
      {\doifelse{\delimitedtextparameter\c!repeat}\v!yes
         {\let\dohandlerepeatdelimitedtext\dorepeatdelimitedtext}%
@@ -819,6 +818,9 @@
       \doifinsetelse{\delimitedtextparameter\c!location}{\v!paragraph,\v!margin}%
         {\dosingleempty\dostartdelimitedtextpar}\dostartdelimitedtexttxt}}
 
+\def\dostopdelimitedtext_font
+  {\removeunwantedspaces\ignoredelimitedtext\c!right}
+
 \def\dostartdelimitedtextpar[#1]%
    {\let\dostopdelimitedtext\dostopdelimitedtextpar
     \doifsomething{\delimitedtextparameter\c!spacebefore}
@@ -849,7 +851,7 @@
    {\removeunwantedspaces
     \removelastskip
     \rightdelimitedtextmark
-    \begingroup
+    \endgroup
     \popmacro\checkindentation
     \dodostopdelimitedtextpar
     \delimitedtextparameter\c!after
@@ -875,7 +877,7 @@
   {\dostopdelimitedtext
    \dostoptagged
    \popdelimitedtext
-   \egroup}
+   \endgroup}
 
 \def\pushdelimitedtext#1%
   {\globalpushmacro\currentdelimitedtext
@@ -898,7 +900,7 @@
 
 \unexpanded\def\startdelimited{\startdelimitedtext}
 \unexpanded\def\stopdelimited {\stopdelimitedtext}  % no let, dynamically assigned
-\def\delimited     {\delimitedtext}
+           \def\delimited     {\delimitedtext}
 
 \def\leftdelimitedtextmark
   {\doifsomething{\delimitedtextparameter\c!left}
diff --git a/tex/context/base/page-flt.mkiv b/tex/context/base/page-flt.mkiv
index f2b183f2d..4eef6f25c 100644
--- a/tex/context/base/page-flt.mkiv
+++ b/tex/context/base/page-flt.mkiv
@@ -246,7 +246,7 @@
       \doflushsomepagefloat\checkedpagefloat
    \fi\fi}
 
-\def\uncenteredfloatbox
+\def\uncenteredfloatbox % hm, where is this one used (was in save/restore, see old implementation)
   {\ifcenterfloatbox
      \ifhbox\floatbox\relax % remove centering
        \ifdim\wd\floatbox=\hsize
@@ -269,8 +269,8 @@
      \box\floatbox
    \fi}
 
-\ifdefined\doflushfloats\else \let\doflushfloats\relax \fi
-\ifdefined\flushfloatbox\else \let\flushfloatbox\relax \fi
+% \ifdefined\doflushfloats\else \let\doflushfloats\relax \fi
+% \ifdefined\flushfloatbox\else \let\flushfloatbox\relax \fi
 
 % temp hack, needed to prevent floatbox being forgotten during
 % output, this will change to using another box for flushing
@@ -284,6 +284,7 @@
 \appendtoks
     \global\setbox\savedfloatbox\box\floatbox
 \to \everybeforeoutput
+
 \appendtoks
     \global\setbox\floatbox\box\savedfloatbox
 \to \everyafteroutput
diff --git a/tex/context/base/page-one.mkiv b/tex/context/base/page-one.mkiv
index cc65a7267..c44ff830b 100644
--- a/tex/context/base/page-one.mkiv
+++ b/tex/context/base/page-one.mkiv
@@ -437,7 +437,7 @@
      \someelsefloat[\v!here]%
    \else
     %\checkwaitingfloats{#1}%
-     \setbox\floatbox\vbox{\box\floatbox}%
+     \setbox\floatbox\vbox{\box\floatbox}% ? can go
      \wd\floatbox\floatwidth
      \processfirstactioninset
        [#1]
diff --git a/tex/context/base/page-sid.mkiv b/tex/context/base/page-sid.mkiv
index 38ae1cfcc..ee1962310 100644
--- a/tex/context/base/page-sid.mkiv
+++ b/tex/context/base/page-sid.mkiv
@@ -41,12 +41,14 @@
 \newdimen       \d_page_sides_progress
 \newdimen       \d_page_sides_page_total
 \newdimen       \d_page_sides_saved_depth
+\newdimen       \d_page_sides_grid_shift
 
 \newbox         \b_page_sides_bottom
 
 \newcount       \c_page_sides_lines_done
 \newcount       \c_page_sides_checks_done
 \newcount       \c_page_sides_n_of_lines
+\newcount       \c_page_sides_n_of_hang
 \newconstant    \c_page_sides_float_type
 
 \newconditional \c_page_sides_short
@@ -457,16 +459,54 @@
    \fi\fi
    \global\sidefloatdownshift\zeropoint}
 
-\def\page_sides_place_float % nilling everypar saves time and redudant pos's
-  {% removed here dec 2001
-   % {\everypar\emptytoks\forgetall\verticalstrut\vskip-\struttotal}%
-   \ifnum\c_page_sides_float_type=\plusfour \kern\sidefloattopskip \fi
+\def\page_sides_place_float
+  {\ifnum\c_page_sides_float_type=\plusfour \kern\sidefloattopskip \fi
    \ifnum\c_page_sides_float_type=\plusfive \kern\sidefloattopskip \fi
    \d_page_sides_saved_depth\prevdepth
    \nointerlineskip
-   \bgroup
-   \everypar\emptytoks
-   \parskip\zeropoint
+   \ifgridsnapping
+     \page_sides_place_float_grid
+   \else
+     \page_sides_place_float_normal
+   \fi
+   \par
+   \kern-\d_page_sides_height
+   \penalty10001 % oeps, this will change
+   \normalbaselines
+   \prevdepth\d_page_sides_saved_depth}
+
+\def\page_sides_place_float_normal
+  {\d_page_sides_grid_shift\zeropoint % be nice
+   \page_sides_push_float_inline\firstofoneargument}
+
+% The following needs some more work .. consider this a quick hack. We
+% probably need an mkiv hanging grid option.
+
+\def\page_sides_place_snap_to_grid#1%
+  {\snaptogrid[\v!line,\v!offset:\the\d_page_sides_grid_shift]\hbox{#1}}
+
+% this will be a grid option in float placement:
+
+\newconstant\c_page_sides_place_grid_shift \c_page_sides_place_grid_shift\plustwo
+
+\def\page_sides_place_float_grid
+  {\getrawnoflines\d_page_sides_height % raw ?
+   \d_page_sides_height\plustwo\lineheight
+   \d_page_sides_grid_shift\the\dimexpr  \noflines\lineheight
+     \ifcase\c_page_sides_place_grid_shift
+       -3\lineheight    % high
+     \or
+       -2.5\lineheight  % half
+     \else
+       -2\lineheight    % low
+     \fi
+   \relax
+   \page_sides_push_float_inline\page_sides_place_snap_to_grid}
+
+\def\page_sides_push_float_inline#1%
+  {\begingroup
+   \everypar\emptytoks % needed !
+   \parskip\zeropoint  % needed !
    \page_sides_set_skips
    \page_sides_insert_info
    \relax
@@ -474,35 +514,23 @@
    \ifcase\c_page_sides_float_type
      % invalid
    \or % backspace
-     \noindent\llap{\rlap{\box\floatbox}\hskip\sidefloatleftskip}\hfill
+     \noindent#1{\llap{\rlap{\box\floatbox}\hskip\sidefloatleftskip}}\hfill
    \or % leftedge
-     \noindent\llap{\box\floatbox\hskip\sidefloatleftskip}\hfill
+     \noindent#1{\llap{\box\floatbox\hskip\sidefloatleftskip}}\hfill
    \or % leftmargin
-     \noindent\llap{\box\floatbox\hskip\sidefloatleftskip}\hfill
+     \noindent#1{\llap{\box\floatbox\hskip\sidefloatleftskip}}\hfill
    \or % leftside
-     \noindent\box\floatbox\hfill
+     \noindent#1{\box\floatbox}\hfill
    \or % rightside
-     \hfill\box\floatbox
+     \hfill#1{\box\floatbox}%
    \or % rightmargin
-     \hfill\rlap{\hskip\sidefloatrightskip\box\floatbox}%
+     \hfill#1{\rlap{\hskip\sidefloatrightskip\box\floatbox}}%
    \or % rightedge
-     \hfill\rlap{\hskip\sidefloatrightskip\box\floatbox}%
+     \hfill#1{\rlap{\hskip\sidefloatrightskip\box\floatbox}}%
    \or % cutspace
-     \hfill\rlap{\hskip\sidefloatrightskip\llap{\box\floatbox}}%
+     \hfill#1{\rlap{\hskip\sidefloatrightskip\llap{\box\floatbox}}}%
    \fi
-   \egroup
-   \par
-   \ifgridsnapping
-     \getrawnoflines\d_page_sides_height
-     \d_page_sides_height=\noflines\lineheight
-   \fi
-   \kern-\d_page_sides_height
-   \penalty10001 % oeps, this will change
-   \normalbaselines
-   \prevdepth\d_page_sides_saved_depth
-   % \noindent
-   \page_sides_check_floats_reset
-   \ignorespaces} % not really needed
+   \endgroup}
 
 \def\page_sides_analyse_progress
   {\d_page_sides_progress\d_page_sides_vsize
@@ -580,7 +608,9 @@
      \page_sides_analyse_space
      \page_sides_inject_dummy_lines
    \fi
-   \page_sides_place_float}
+   \page_sides_place_float
+   \page_sides_check_floats_reset
+   \ignorespaces} % not really needed
 
 \def\page_sides_check_floats_indeed
   {\page_sides_analyse_progress
@@ -598,17 +628,17 @@
 
 \def\page_sides_check_floats_set
   {\scratchdimen\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax
-   \!!counta\scratchdimen
-   \divide\!!counta \baselineskip\relax
-   \ifnum\!!counta>\zerocount
+   \c_page_sides_n_of_hang\scratchdimen
+   \divide\c_page_sides_n_of_hang \baselineskip\relax
+   \ifnum\c_page_sides_n_of_hang>\zerocount
      % new from here (needs test case, old code)
      \ifcase\c_page_sides_n_of_lines
      \else
        \ifcase\c_page_sides_lines_done
-         \global\c_page_sides_lines_done\!!counta
+         \global\c_page_sides_lines_done\c_page_sides_n_of_hang
        \else
          \scratchcounter\c_page_sides_lines_done
-         \advance\scratchcounter-\!!counta
+         \advance\scratchcounter-\c_page_sides_n_of_hang
          \global\advance\c_page_sides_n_of_lines-\scratchcounter
        \fi
      \fi
@@ -619,10 +649,10 @@
        \scratchdimen\dimexpr\hsize-\d_page_sides_width\relax
        \dorecurse\c_page_sides_n_of_lines
          {\appendtoks \zeropoint \hsize \to \scratchtoks}%
-       \ifnum\!!counta>\c_page_sides_n_of_lines
-         \advance\!!counta -\c_page_sides_n_of_lines\relax
-         \advance\scratchcounter\!!counta
-         \dorecurse\!!counta % weird, shouldn't that be scratchcounter
+       \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\scratchcounter\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         \scratchdimen \to \scratchtoks
             \else
@@ -637,7 +667,7 @@
      \else
        % new till here
        \hangindent \ifnum\c_page_sides_float_type>\plusfour -\fi\d_page_sides_width
-       \hangafter-\!!counta
+       \hangafter-\c_page_sides_n_of_hang
      \fi
    \fi
    \global\advance\c_page_sides_checks_done \plusone
diff --git a/tex/context/base/spac-ver.mkiv b/tex/context/base/spac-ver.mkiv
index 2d137d360..fe83414c7 100644
--- a/tex/context/base/spac-ver.mkiv
+++ b/tex/context/base/spac-ver.mkiv
@@ -1241,7 +1241,7 @@
 % minheight        round height down
 % maxheight        round height up
 % local            use local interline space
-% offset:-3tp       vertical shift within box
+% offset:-3tp      vertical shift within box
 % bottom:lines
 % top:lines
 
@@ -1274,7 +1274,6 @@
 
 \definegridsnapping[\v!middle]   [\v!maxheight,\v!maxdepth] % used in placement
 
-
 \newtoks\everysetupgridsnapping % this only happens at the setuplayout level
 
 \def\dosetupgridsnapping{\the\everysetupgridsnapping} % not used !
diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf
index ccf9141f5..ea308c0b2 100644
Binary files a/tex/context/base/status-files.pdf and b/tex/context/base/status-files.pdf differ
diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf
index 385b4ccb3..0ce87fb5b 100644
Binary files a/tex/context/base/status-lua.pdf and b/tex/context/base/status-lua.pdf differ
diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi
index b38642eee..5e9dd5ec5 100644
--- a/tex/context/base/strc-flt.mkvi
+++ b/tex/context/base/strc-flt.mkvi
@@ -813,7 +813,7 @@
   {\global\sidefloatdownshift \zeropoint
    \global\sidefloatextrashift\zeropoint
    \doifassignmentelse{#settings}%
-     {\bgroup
+     {\begingroup
       \getparameters[\??fl\??fl][\c!x=\zeropoint,\c!y=\zeropoint,#settings]%
       \ifgridsnapping
         \getnoflines\@@fly
@@ -822,7 +822,7 @@
         \global\sidefloatdownshift\@@fl@@fly
       \fi
       \global\sidefloatextrashift\@@fl@@flx
-      \egroup}
+      \endgroup}
      {\movedownsidefloat[#settings]}}
 
 \def\float_move_down#setting%
@@ -1157,8 +1157,6 @@
 
 % minwidth=fit,width=max : no overshoot, as wide as graphic
 
-\ifdefined\moveboxontogrid\else \let\movecaptionontogrid\gobblethreearguments \fi
-
 \def\float_align_content_indeed
   {\alignstrutmode\zerocount
    \doifnotcommon{\floatcaptionparameter\c!location}{\v!outermargin,\v!innermargin,\v!leftmargin,\v!rightmargin}
@@ -1470,6 +1468,7 @@
 
 \def\doflushfloatleftcaptionhang
   {\hsmash{\llap{\box\float_caption_box\dotfskip{\floatcaptionparameter\c!distance}}}}
+
 \def\doflushfloatrightcaptionhang
   {\hsmash{\rlap{\dotfskip{\floatcaptionparameter\c!distance}\box\float_caption_box}}}
 
diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua
index 4917f63f4..748d476de 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 : luatex-fonts-merged.lua
 -- parent file : luatex-fonts.lua
--- merge date  : 12/19/11 00:49:41
+-- merge date  : 12/19/11 13:06:43
 
 do -- begin closure to overcome local limits and interference
 
-- 
cgit v1.2.3