summaryrefslogtreecommitdiff
path: root/tex/context/base
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-10-15 13:10:46 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-10-15 13:10:46 +0200
commitf34b1249e3ad9bcbe34323c6daf0ad3174190649 (patch)
tree15c0312b94c448f18e7c305f5bb1508987d68103 /tex/context/base
parentd47ee9fc195ba82eef5e4be132b1d88b7f009a9c (diff)
downloadcontext-f34b1249e3ad9bcbe34323c6daf0ad3174190649.tar.gz
2017-10-15 12:34:00
Diffstat (limited to 'tex/context/base')
-rw-r--r--tex/context/base/mkii/cont-new.mkii2
-rw-r--r--tex/context/base/mkii/context.mkii2
-rw-r--r--tex/context/base/mkii/mult-cs.mkii1
-rw-r--r--tex/context/base/mkii/mult-de.mkii1
-rw-r--r--tex/context/base/mkii/mult-ro.mkii1
-rw-r--r--tex/context/base/mkiv/cont-new.mkiv2
-rw-r--r--tex/context/base/mkiv/context.mkiv3
-rw-r--r--tex/context/base/mkiv/font-ots.lua123
-rw-r--r--tex/context/base/mkiv/meta-nod.mkiv (renamed from tex/context/base/mkiv/meta-imp-nodes.mkiv)8
-rw-r--r--tex/context/base/mkiv/mult-def.lua3
-rw-r--r--tex/context/base/mkiv/mult-low.lua2
-rw-r--r--tex/context/base/mkiv/mult-prm.lua1
-rw-r--r--tex/context/base/mkiv/mult-prm.mkiv55
-rw-r--r--tex/context/base/mkiv/page-sid.mkiv196
-rw-r--r--tex/context/base/mkiv/spac-ver.mkiv18
-rw-r--r--tex/context/base/mkiv/status-files.pdfbin25730 -> 25716 bytes
-rw-r--r--tex/context/base/mkiv/status-lua.pdfbin245447 -> 245458 bytes
-rw-r--r--tex/context/base/mkiv/strc-flt.mkvi3
-rw-r--r--tex/context/base/mkiv/tabl-mis.mkiv8
19 files changed, 274 insertions, 155 deletions
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii
index 1fc148a68..49269493e 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.10 12:00}
+\newcontextversion{2017.10.15 12:29}
%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 8467e6ef8..0375b1b7a 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.10 12:00}
+\edef\contextversion{2017.10.15 12:29}
%D For those who want to use this:
diff --git a/tex/context/base/mkii/mult-cs.mkii b/tex/context/base/mkii/mult-cs.mkii
index b57c8ece5..85297dd12 100644
--- a/tex/context/base/mkii/mult-cs.mkii
+++ b/tex/context/base/mkii/mult-cs.mkii
@@ -1150,6 +1150,7 @@
\setinterfaceconstant{sidemethod}{sidemethod}
\setinterfaceconstant{sidespaceafter}{bocnimezeraza}
\setinterfaceconstant{sidespacebefore}{bocnimezerapred}
+\setinterfaceconstant{sidethreshold}{sidethreshold}
\setinterfaceconstant{sign}{znak}
\setinterfaceconstant{size}{velikost}
\setinterfaceconstant{slantedfeatures}{slantedfeatures}
diff --git a/tex/context/base/mkii/mult-de.mkii b/tex/context/base/mkii/mult-de.mkii
index de622fc76..3fd291e1e 100644
--- a/tex/context/base/mkii/mult-de.mkii
+++ b/tex/context/base/mkii/mult-de.mkii
@@ -1150,6 +1150,7 @@
\setinterfaceconstant{sidemethod}{sidemethod}
\setinterfaceconstant{sidespaceafter}{nebennachspatium}
\setinterfaceconstant{sidespacebefore}{nebenvorspatium}
+\setinterfaceconstant{sidethreshold}{sidethreshold}
\setinterfaceconstant{sign}{zeichen}
\setinterfaceconstant{size}{groesse}
\setinterfaceconstant{slantedfeatures}{slantedfeatures}
diff --git a/tex/context/base/mkii/mult-ro.mkii b/tex/context/base/mkii/mult-ro.mkii
index bceff14e4..c7fbc8a40 100644
--- a/tex/context/base/mkii/mult-ro.mkii
+++ b/tex/context/base/mkii/mult-ro.mkii
@@ -1150,6 +1150,7 @@
\setinterfaceconstant{sidemethod}{sidemethod}
\setinterfaceconstant{sidespaceafter}{spatiulateraldupa}
\setinterfaceconstant{sidespacebefore}{spatiulateralinainte}
+\setinterfaceconstant{sidethreshold}{sidethreshold}
\setinterfaceconstant{sign}{semn}
\setinterfaceconstant{size}{dimensiune}
\setinterfaceconstant{slantedfeatures}{slantedfeatures}
diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv
index f61d816f5..07bfb94c5 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.10 12:00}
+\newcontextversion{2017.10.15 12:29}
%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 8eb7bd70f..cd0da3d95 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.10 12:00}
+\edef\contextversion{2017.10.15 12:29}
\edef\contextkind {beta}
%D For those who want to use this:
@@ -454,6 +454,7 @@
\loadmarkfile{meta-pag}
\loadmarkfile{meta-grd}
\loadmarkfile{meta-fnt}
+\loadmarkfile{meta-nod}
\loadmarkfile{page-mrk} % depends on mp
diff --git a/tex/context/base/mkiv/font-ots.lua b/tex/context/base/mkiv/font-ots.lua
index 55c5354da..2e82de21a 100644
--- a/tex/context/base/mkiv/font-ots.lua
+++ b/tex/context/base/mkiv/font-ots.lua
@@ -2080,7 +2080,7 @@ local function chaindisk(head,start,dataset,sequence,rlmode,skiphash,ck)
if current then
-- go on
elseif sweepoverflow then
- -- we already are folling up on sweepnode
+ -- we already are following up on sweepnode
break
elseif sweeptype == "post" or sweeptype == "replace" then
current = getnext(sweepnode)
@@ -3069,6 +3069,9 @@ local function kernrun(disc,k_run,font,attr,...)
end
setlink(prev,disc,next)
end
+ if done and trace_testruns then
+ report_disc("done",disc)
+ end
return nextstart, done
end
@@ -3116,6 +3119,9 @@ local function comprun(disc,c_run,...) -- vararg faster than the whole list
sweepnode = nil
sweeptype = nil
if renewed then
+ if trace_testruns then
+ report_disc("done",disc)
+ end
setdisc(disc,pre,post,replace)
end
--
@@ -3135,6 +3141,7 @@ local function testrun(disc,t_run,c_run,...)
return
end
local pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
+ local renewed = false
if (post or replace) and prev then
if post then
setlink(posttail,next)
@@ -3153,12 +3160,17 @@ local function testrun(disc,t_run,c_run,...)
local head = getnext(disc) -- is: next
local tail = head
for i=1,d do
- tail = getnext(tail)
- if getid(tail) == disc_code then
- head, tail = flattendisk(head,tail)
+ local nx = getnext(tail)
+ local id = getid(nx)
+ if id == disc_code then
+ head, tail = flattendisk(head,nx)
+ elseif id == glyph_code then
+ tail = nx
+ else
+ -- we can have overrun into a glue
+ break
end
end
--- local next = getnext(tail)
next = getnext(tail)
setnext(tail)
setprev(head)
@@ -3173,7 +3185,6 @@ local function testrun(disc,t_run,c_run,...)
else
replace = new
end
--- setlink(disc,next)
else
-- we stay inside the disc
if posttail then
@@ -3186,15 +3197,16 @@ local function testrun(disc,t_run,c_run,...)
else
replace = nil
end
--- setprev(next,disc) -- setlink(dics,next)
end
-setlink(disc,next)
+ setlink(disc,next)
-- pre, post, replace, pretail, posttail, replacetail = getdisc(disc,true)
end
--
-- like comprun
--
- local renewed = false
+ if trace_testruns then
+ report_disc("more",disc)
+ end
--
if pre then
sweepnode = disc
@@ -3230,6 +3242,9 @@ setlink(disc,next)
sweeptype = nil
if renewed then
setdisc(disc,pre,post,replace)
+ if trace_testruns then
+ report_disc("done",disc)
+ end
end
-- next can have changed (copied list)
return getnext(disc), renewed
@@ -3273,7 +3288,7 @@ local function c_run_single(head,font,attr,lookupcache,step,dataset,sequence,rlm
start = head
end
while start do
- local char = ischar(start,font)
+ local char, id = ischar(start,font)
if char then
local a -- happens often so no assignment is faster
if attr then
@@ -3332,7 +3347,7 @@ local function t_run_single(start,stop,font,attr,lookupcache)
ss = nil
end
-- a bit weird: why multiple ... anyway we can't have a disc in a disc
- -- how about post ...
+ -- how about post ... we can probably merge this into the while
while getid(s) == disc_code do
ss = getnext(s)
s = getfield(s,"replace")
@@ -3344,40 +3359,48 @@ local function t_run_single(start,stop,font,attr,lookupcache)
local l = nil
local d = 0
while s do
- local lg = lookupmatch[getchar(s)]
- if lg then
- if sstop then
- d = 1
- elseif d > 0 then
- d = d + 1
- end
- l = lg
- s = getnext(s)
- sstop = s == stop
- if not s then
- s = ss
- ss = nil
- end
- while getid(s) == disc_code do
- ss = getnext(s)
- s = getfield(s,"replace")
+ local char = ischar(s,font)
+ if char then
+ local lg = lookupmatch[char]
+ if lg then
+ if sstop then
+ d = 1
+ elseif d > 0 then
+ d = d + 1
+ end
+ l = lg
+ s = getnext(s)
+ sstop = s == stop
if not s then
s = ss
ss = nil
end
+ while getid(s) == disc_code do
+ ss = getnext(s)
+ s = getfield(s,"replace")
+ if not s then
+ s = ss
+ ss = nil
+ end
+ end
+ else
+ break
end
else
break
end
end
- if l and l.ligature then
+ if l and l.ligature then -- so we test for ligature
lastd = d
end
+-- why not: if not l then break elseif l.ligature then return d end
else
+-- why not: break
-- no match (yet)
end
else
-- go on can be a mixed one
+-- why not: break
end
if lastd then
return lastd
@@ -3505,27 +3528,32 @@ local function t_run_multiple(start,stop,font,attr,steps,nofsteps)
local l = nil
local d = 0
while s do
- local lg = lookupmatch[getchar(s)]
- if lg then
- if sstop then
- d = 1
- elseif d > 0 then
- d = d + 1
- end
- l = lg
- s = getnext(s)
- sstop = s == stop
- if not s then
- s = ss
- ss = nil
- end
- while getid(s) == disc_code do
- ss = getnext(s)
- s = getfield(s,"replace")
+ local char = ischar(s)
+ if char then
+ local lg = lookupmatch[char]
+ if lg then
+ if sstop then
+ d = 1
+ elseif d > 0 then
+ d = d + 1
+ end
+ l = lg
+ s = getnext(s)
+ sstop = s == stop
if not s then
s = ss
ss = nil
end
+ while getid(s) == disc_code do
+ ss = getnext(s)
+ s = getfield(s,"replace")
+ if not s then
+ s = ss
+ ss = nil
+ end
+ end
+ else
+ break
end
else
break
@@ -3660,7 +3688,6 @@ do
local testdics = false
directives.register("otf.fastdisc",function(v) fastdisc = v end) -- normally enabled
- directives.register("otf.testdisc",function(v) testdisc = v end) -- only for myself
-- using a merged combined hash as first test saves some 30% on ebgaramond and
-- about 15% on arabtype .. then moving the a test also saves a bit (even when
@@ -3750,7 +3777,7 @@ do
local topstack = 0
local typ = sequence.type
local gpossing = typ == "gpos_single" or typ == "gpos_pair" -- store in dataset
- local forcetestrun = testdisc or typ == "gsub_ligature"
+ local forcetestrun = typ == "gsub_ligature" -- testrun is only for ligatures
local handler = handlers[typ] -- store in dataset
local steps = sequence.steps
local nofsteps = sequence.nofsteps
diff --git a/tex/context/base/mkiv/meta-imp-nodes.mkiv b/tex/context/base/mkiv/meta-nod.mkiv
index 557eac2cc..1c6f1309d 100644
--- a/tex/context/base/mkiv/meta-imp-nodes.mkiv
+++ b/tex/context/base/mkiv/meta-nod.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=meta-imp-nodes,
+%D [ file=meta-nod,
%D version=2016.11.23,
%D title=\METAPOST\ Graphics,
%D subtitle=Nodes,
@@ -32,8 +32,8 @@
[node]
[\c!foregroundstyle=\small]
-\startMPdefinitions{nodes}
- loadmodule "node" ;
-\stopMPdefinitions
+% \startMPdefinitions{nodes}
+% loadmodule "node" ;
+% \stopMPdefinitions
\protect
diff --git a/tex/context/base/mkiv/mult-def.lua b/tex/context/base/mkiv/mult-def.lua
index c12040708..05b6a0387 100644
--- a/tex/context/base/mkiv/mult-def.lua
+++ b/tex/context/base/mkiv/mult-def.lua
@@ -11036,6 +11036,9 @@ return {
["threshold"]={
["en"]="threshold",
},
+ ["sidethreshold"]={
+ ["en"]="sidethreshold",
+ },
["displaythreshold"]={
["en"]="displaythreshold",
},
diff --git a/tex/context/base/mkiv/mult-low.lua b/tex/context/base/mkiv/mult-low.lua
index 6b7bf47b3..55edc191c 100644
--- a/tex/context/base/mkiv/mult-low.lua
+++ b/tex/context/base/mkiv/mult-low.lua
@@ -340,7 +340,7 @@ return {
--
"offinterlineskip", "oninterlineskip", "nointerlineskip",
--
- "strut", "halfstrut", "quarterstrut", "depthstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "begstrut", "endstrut", "lineheight",
+ "strut", "halfstrut", "quarterstrut", "depthstrut", "halflinestrut", "noheightstrut", "setstrut", "strutbox", "strutht", "strutdp", "strutwd", "struthtdp", "begstrut", "endstrut", "lineheight",
"leftboundary", "rightboundary", "signalcharacter",
--
"ordordspacing", "ordopspacing", "ordbinspacing", "ordrelspacing",
diff --git a/tex/context/base/mkiv/mult-prm.lua b/tex/context/base/mkiv/mult-prm.lua
index cf12388a0..7482d08ec 100644
--- a/tex/context/base/mkiv/mult-prm.lua
+++ b/tex/context/base/mkiv/mult-prm.lua
@@ -1,6 +1,5 @@
return {
["aleph"]={
- "AlephVersion",
"Alephminorversion",
"Alephrevision",
"Alephversion",
diff --git a/tex/context/base/mkiv/mult-prm.mkiv b/tex/context/base/mkiv/mult-prm.mkiv
index 60ec26fe7..fb71878d8 100644
--- a/tex/context/base/mkiv/mult-prm.mkiv
+++ b/tex/context/base/mkiv/mult-prm.mkiv
@@ -31,22 +31,14 @@
context.starttext()
- function table.sorted(t)
- table.sort(t)
- return t
- end
-
local missing = {
tex = {
- "def", "catcode", "futurelet", "chardef",
- "voffset", "hoffset",
- "numexpr", "dimexpr",
- "write", "dump", "skipdef,"
},
etex = {
- "savingvdiscards",
},
- pdftex = {
+ luatex = {
+ },
+ pdftex = { -- maybe not complete
"ifpdfabsdim", "ifpdfabsnum", "ifpdfprimitive", "pdfadjustspacing",
"pdfannot", "pdfcatalog", "pdfcolorstack", "pdfcolorstackinit",
"pdfcompresslevel", "pdfcopyfont", "pdfcreationdate",
@@ -77,35 +69,32 @@
"pdfuniqueresname", "pdfvorigin", "pdfxform", "pdfxformattr",
"pdfxformmargin", "pdfxformname", "pdfxformresources", "pdfximage",
},
- luatex = {
- },
- aleph = {
- "AlephVersion", "Alephminorversion", "Alephrevision", "Alephversion",
+ aleph = { -- we don't bother
+ "Alephminorversion", "Alephrevision", "Alephversion",
},
- omega = {
+ omega = { -- we don't bother
"Omegaminorversion", "Omegarevision", "Omegaversion",
},
- xetex = {
- "XeTeXversion", -- probably some more
- },
- plain = {
- "TeX",
- "bgroup", "egroup", "endgraf", "space", "empty", "null",
- "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newhelp", "newread", "newwrite", "newfam", "newlanguage", "newinsert", "newif",
- "maxdimen", "magstephalf", "magstep",
- "frenchspacing", "nonfrenchspacing", "normalbaselines", "obeylines", "obeyspaces", "raggedright", "ttraggedright",
- "thinspace", "negthinspace", "enspace", "enskip", "quad", "qquad",
- "smallskip", "medskip", "bigskip", "removelastskip", "topglue", "vglue", "hglue",
- "break", "nobreak", "allowbreak", "filbreak", "goodbreak", "smallbreak", "medbreak", "bigbreak",
- "line", "leftline", "rightline", "centerline", "rlap", "llap", "underbar", "strutbox", "strut",
- "cases", "matrix", "pmatrix", "bordermatrix", "eqalign", "displaylines", "eqalignno", "leqalignno",
- "pageno", "folio", "tracingall", "showhyphens", "fmtname", "fmtversion",
- "hphantom", "vphantom", "phantom", "smash",
+ xetex = { -- we don't bother
+ "XeTeXversion",
},
+ -- plain = {
+ -- "TeX",
+ -- "bgroup", "egroup", "endgraf", "space", "empty", "null",
+ -- "newcount", "newdimen", "newskip", "newmuskip", "newbox", "newtoks", "newhelp", "newread", "newwrite", "newfam", "newlanguage", "newinsert", "newif",
+ -- "maxdimen", "magstephalf", "magstep",
+ -- "frenchspacing", "nonfrenchspacing", "normalbaselines", "obeylines", "obeyspaces", "raggedright", "ttraggedright",
+ -- "thinspace", "negthinspace", "enspace", "enskip", "quad", "qquad",
+ -- "smallskip", "medskip", "bigskip", "removelastskip", "topglue", "vglue", "hglue",
+ -- "break", "nobreak", "allowbreak", "filbreak", "goodbreak", "smallbreak", "medbreak", "bigbreak",
+ -- "line", "leftline", "rightline", "centerline", "rlap", "llap", "underbar", "strutbox", "strut",
+ -- "cases", "matrix", "pmatrix", "bordermatrix", "eqalign", "displaylines", "eqalignno", "leqalignno",
+ -- "pageno", "folio", "tracingall", "showhyphens", "fmtname", "fmtversion",
+ -- "hphantom", "vphantom", "phantom", "smash",
+ -- },
}
local primitives = {
- -- tex = table.sorted( table.merged( missing.tex , tex.primitives() ) ),
tex = table.sorted( table.merged( missing.tex , tex.extraprimitives("core","tex") ) ),
etex = table.sorted( table.merged( missing.etex , tex.extraprimitives("etex") ) ),
pdftex = table.sorted( table.merged( missing.pdftex, { } ) ),
diff --git a/tex/context/base/mkiv/page-sid.mkiv b/tex/context/base/mkiv/page-sid.mkiv
index 50023c2e8..477675ce6 100644
--- a/tex/context/base/mkiv/page-sid.mkiv
+++ b/tex/context/base/mkiv/page-sid.mkiv
@@ -193,19 +193,29 @@
\def\page_sides_flush_floats
{\par
- \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
+ \ifdim\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal\relax>\zeropoint % -\pagedepth
+ \page_sides_flush_floats_progress
+ \page_sides_flush_floats_after_next
+ \fi
+ \page_sides_flush_floats_reset}
+
+\def\page_sides_flush_floats_text
+ {\par
+ \ifdim\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal\relax>\zeropoint % -\pagedepth
+ \page_sides_flush_floats_progress
+ \page_sides_flush_floats_after_none
\fi
+ \page_sides_flush_floats_reset}
+
+\def\page_sides_flush_floats_reset
+ {\global\d_page_sides_vsize\d_page_sides_vsize_reset
% also here if used at all \global\holdinginserts\zerocount
- \global\d_page_sides_vsize\d_page_sides_vsize_reset
\global\setfalse\c_page_sides_short
\global\setfalse\c_page_sides_flag}
\unexpanded\def\doifelsesidefloat
{\par
- \ifdim\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint
+ \ifdim\dimexpr\d_page_sides_vsize-\pagetotal\relax>\zeropoint % -\pagedepth
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
@@ -217,70 +227,86 @@
\setvalue{\??sidefloatsteps\v!line }{\strut}
\setvalue{\??sidefloatsteps\v!big }{\strut}
-\setvalue{\??sidefloatsteps\v!medium}{\halfstrut}
-\setvalue{\??sidefloatsteps\v!small }{\quarterstrut}
-\setvalue{\??sidefloatsteps\v!depth }{\depthstrut}
+\setvalue{\??sidefloatsteps\v!medium}{\halflinestrut} % was \halfstrut
+\setvalue{\??sidefloatsteps\v!small }{\noheightstrut} % was \quarterstrut
% 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]{%
+ \llap{\smash{\vrule\s!width4\points\s!height.4\points\s!depth.4\points}}%
\ifnum\recurselevel=\plusone
- \llap{{\smallinfofont\the\scratchdimen}\hskip.5\leftmargindistance}%
+ \llap{\smash{\smallinfofont\the\scratchdimen}\hskip.5\leftmargindistance}%
\else\ifodd\recurselevel
- \llap{{\smallinfofont\recurselevel}\hskip.5\leftmargindistance}%
+ \llap{\smash{\smallinfofont\recurselevel}\hskip.5\leftmargindistance}%
\fi\fi
- \m_pages_strut
+ \page_sides_flush_floats_normal
\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
- \begingroup
+\def\page_sides_flush_floats_normal
+ {\ifdim\scratchdimen>\htdp\strutbox
+ \strut
+ \else
+ \m_pages_strut
+ \fi}
+
+% the \d_page_sides_bottomskip == \rootfloatparameter\c!sidespaceafter is embedded
+% in the progression of the float
+
+\def\page_sides_flush_floats_progress
+ {\begingroup
\let\page_sides_flush_floats\relax
\edef\m_pages_strut
{\ifcsname\??sidefloatsteps\rootfloatparameter\c!step\endcsname
\lastnamedcs
\else
- \strut
- \fi}%
+ \noheightstrut
+ \fi}%
\forgetall
+ \offinterlineskip
\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
+ {\scratchdimen\dimexpr\d_page_sides_vsize-\d_page_sides_bottomskip-\pagetotal-\pagedepth\relax
+ \ifdim\scratchdimen>\onepoint % good enough, if we change it it will become a threshold
\ifnum\recurselevel>\plushundred % safeguard, sort of deadcycles
\exitloop
- \fi
+ \else\iftracesidefloats
+ \page_sides_flush_floats_tracer\par
+ \else
+ \page_sides_flush_floats_normal\par
+ \fi\fi
\else
\exitloop
\fi}%
- \endgroup
- % we're going to add top space anyway so ....
- \ifdim\parskip>\zeropoint % why this test ?
+ \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_next
+ {\ifdim\parskip>\zeropoint % why this test ?
\ifdim\d_page_sides_bottomskip>\parskip
\page_sides_flush_floats_blank\plusone
\fi
@@ -405,15 +431,18 @@
\def\page_sides_apply_vertical_shift_traced
{\global\setbox\floatbox\hpack % why extra box
{\backgroundline[trace:r]{\ruledhpack{\vpack
- {\hsize\wd\floatbox
+ {\forgetall
+ \hsize\wd\floatbox
\vskip\privatescratchdimen
- \nointerlineskip
- \backgroundline[trace:g]{\ruledhpack{\box\floatbox}}%
+ \offinterlineskip
+ \backgroundline[trace:g]{\ruledhpack{\box\floatbox}}\par
+ \blackrule[\c!color=trace:s,\c!height=\d_page_sides_bottomskip,\c!depth=\zeropoint,\c!width=\hsize]%
+ \vskip-\d_page_sides_bottomskip
\ifnum\c_page_sides_align=\plusfive \vskip-\lineheight \fi}}}}}
\def\page_sides_apply_depth_normal
{\global\setbox\floatbox\hpack
- {\lower\strutdepth\box\floatbox}}
+ {\lower\strutdp\box\floatbox}}
\def\page_sides_apply_depth_traced
{\global\setbox\floatbox\hpack
@@ -426,7 +455,7 @@
\def\page_sides_apply_vertical_shift
{\ifnum\c_page_sides_align=\plusfour
\getnoflines{\ht\floatbox}%
- \privatescratchdimen\dimexpr\noflines\lineheight-\strutdepth\relax
+ \privatescratchdimen\dimexpr\noflines\lineheight-\strutdp\relax
\getrawnoflines\d_page_sides_topskip
\advance\privatescratchdimen\noflines\lineheight
% todo: maybe rounding problem here
@@ -453,17 +482,17 @@
% the top of the box is at the previous baseline
\ifcase\c_page_sides_align
% 0 normal
- \advance\privatescratchdimen\strutdepth % or \openstrutdepth
+ \advance\privatescratchdimen\strutdp % or \openstrutdepth
\or % 1 height
- \advance\privatescratchdimen\strutdepth % or \openstrutdepth
+ \advance\privatescratchdimen\strutdp % or \openstrutdepth
\or % 2 line
\or % 3 depth
- \advance\privatescratchdimen\lineheight % or \openlineheight
- \advance\privatescratchdimen\strutdepth % or \openstrutdepth
+ \advance\privatescratchdimen\lineheight % or \openlineheight
+ \advance\privatescratchdimen\strutdp % or \openstrutdepth
\or % 4 grid
\privatescratchdimen\zeropoint
\or
- \advance\privatescratchdimen\strutheight % or \openstrutheight
+ \advance\privatescratchdimen\strutht % or \openstrutheight
\fi
% new
\global\c_page_sides_lines_done\zerocount
@@ -555,6 +584,7 @@
\global\setfalse\c_page_sides_flag
\else
\advance\d_page_sides_progress-\pagetotal
+ \advance\d_page_sides_progress-\pagedepth % new 2017-10-10
\fi}
\def\page_sides_analyse_space
@@ -579,7 +609,7 @@
\ifcase\c_page_sides_method
% method 0 : raw
\or
- % method 1 : safe
+ % method 1 : safe (default)
\scratchdimentwo .99\pagegoal
\or
% method 2 : tight
@@ -596,6 +626,7 @@
% why was this \global\holdinginserts\plusone
\else
\global\advance\d_page_sides_vsize \d_page_sides_bottomskip
+ \global\advance\d_page_sides_vsize -\parskip % new 2017-10-10
\global\setfalse\c_page_sides_short
\fi
\global\settrue\c_page_floats_room
@@ -649,15 +680,58 @@
\unexpanded\def\page_sides_check_floats_tracer
{\begingroup
\hskip-\d_page_sides_width % kern
+ %\llap{\smallinfofont\the\d_page_sides_progression\space=>\space\the\c_page_sides_n_of_hang\hskip.5\leftmargindistance}%
\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}
+% \usemodule[art-01]
+% \starttext
+% \definemeasure[MyHeight][3cm] \definemeasure[MyWidth][3cm]
+% \startbuffer
+% \input klein \par
+% \placefigure[left]{oeps}{\framed[width=\measure{MyWidth},height=\measure{MyHeight}]{}}
+% \dorecurse{4}{test\par} \dorecurse{3}{\input klein }\par
+% \placefigure[left]{oeps}{\framed[width=\measure{MyWidth},height=\measure{MyHeight}]{}}
+% \dorecurse{3}{\input klein }\par
+% \stopbuffer
+% \enabletrackers[floats.anchoring]
+% \setupfloats[step=small]
+% \setupheadertexts[width=\measure{MyWidth},height=\measure{MyHeight}]
+% \dostepwiserecurse {100} {120} {1} {
+% \definemeasure[MyWidth][#1pt]
+% \dostepwiserecurse {50} {300} {1} {
+% \definemeasure[MyHeight][##1pt]
+% \setupwhitespace[none]%
+% \getbuffer \page
+% \setupwhitespace[big]
+% \getbuffer \page
+% }
+% }
+% \stoptext
+
+% \setupfloats
+% [\c!sidethreshold=.5\strutdp] % set to "old" to check with old method
+
+\newdimen\d_page_sides_progression
+
\unexpanded\def\page_sides_check_floats_set
- {\privatescratchdimen\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax
- \c_page_sides_n_of_hang\privatescratchdimen
- \divide\c_page_sides_n_of_hang \baselineskip\relax
+ {\edef\p_sidethreshold{\floatparameter\c!sidethreshold}%
+ \ifx\p_sidethreshold\v!old
+ \d_page_sides_progression\dimexpr\d_page_sides_progress+\strutht-\roundingeps\relax
+ \c_page_sides_n_of_hang\d_page_sides_progression
+ \divide\c_page_sides_n_of_hang \baselineskip\relax
+ \else
+ \d_page_sides_progression
+ \ifx\p_sidethreshold\empty
+ \d_page_sides_progress
+ \else
+ \dimexpr\d_page_sides_progress-\p_sidethreshold\relax
+ \fi
+ \getnoflines\d_page_sides_progression
+ \c_page_sides_n_of_hang\noflines
+ \fi
\ifnum\c_page_sides_n_of_hang>\zerocount
% new from here (needs test case, old code)
\ifcase\c_page_sides_n_of_lines
@@ -759,7 +833,7 @@
%D the callers. We use \type {\def} as they can be redefined! Some will become obsolete
\def\checksidefloat {\page_sides_check_floats}
-\def\flushsidefloats {\page_sides_flush_floats}
+\def\flushsidefloats {\page_sides_flush_floats_text}
\def\flushsidefloatsafterpar{\page_sides_flush_floats_after_par}
\def\forgetsidefloats {\page_sides_forget_floats}
%def\synchronizesidefloats {\page_sides_synchronize_floats}
diff --git a/tex/context/base/mkiv/spac-ver.mkiv b/tex/context/base/mkiv/spac-ver.mkiv
index 6647ede19..934577b17 100644
--- a/tex/context/base/mkiv/spac-ver.mkiv
+++ b/tex/context/base/mkiv/spac-ver.mkiv
@@ -1050,6 +1050,24 @@
\box\scratchbox
\endgroup}
+\unexpanded\def\halflinestrut
+ {\relax
+ \dontleavehmode
+ \begingroup
+ \setbox\scratchbox\copy\strutbox
+ \ht\scratchbox\dimexpr\strutht-.5\strutht-.5\strutdp\relax
+ \box\scratchbox
+ \endgroup}
+
+\unexpanded\def\noheightstrut
+ {\relax
+ \dontleavehmode
+ \begingroup
+ \setbox\scratchbox\copy\strutbox
+ \ht\scratchbox\zeropoint
+ \box\scratchbox
+ \endgroup}
+
%D Sometimes a capstrut comes in handy
%D
%D \starttabulate[|Tl|l|l|]
diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf
index a1089d96d..1c2878919 100644
--- a/tex/context/base/mkiv/status-files.pdf
+++ b/tex/context/base/mkiv/status-files.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf
index f34a394fe..016e39a04 100644
--- a/tex/context/base/mkiv/status-lua.pdf
+++ b/tex/context/base/mkiv/status-lua.pdf
Binary files differ
diff --git a/tex/context/base/mkiv/strc-flt.mkvi b/tex/context/base/mkiv/strc-flt.mkvi
index 359b32a53..160001114 100644
--- a/tex/context/base/mkiv/strc-flt.mkvi
+++ b/tex/context/base/mkiv/strc-flt.mkvi
@@ -154,7 +154,7 @@
\c!outermargin=\zeropoint, % idem
\c!leftmargindistance=\zeropoint,
\c!rightmargindistance=\floatparameter\c!leftmargindistance,
- \c!step=\v!big, % the flush side float step (big=line, medium=halfline, small=quarterline, depth=halfline with normaldepth)
+ \c!step=\v!small, % the flush side float step (big, medium, small : always depth)
\c!ntop=2,
\c!nbottom=0,
\c!nlines=4, % used?
@@ -165,6 +165,7 @@
%\c!bottombefore=, % e.g. \vfill
%\c!bottomafter=,
%\c!default=, % default location
+ \c!sidethreshold=.5\strutdp, % set to "old" to check with old method
\c!numbering=\v!yes]
%D Individial settings:
diff --git a/tex/context/base/mkiv/tabl-mis.mkiv b/tex/context/base/mkiv/tabl-mis.mkiv
index 8db31b31d..2d88f3495 100644
--- a/tex/context/base/mkiv/tabl-mis.mkiv
+++ b/tex/context/base/mkiv/tabl-mis.mkiv
@@ -106,10 +106,11 @@
\installcorenamespace{paragraphs}
-\installcommandhandler \??paragraphs {paragraphs} \??paragraphs
+\installframedcommandhandler \??paragraphs {paragraphs} \??paragraphs
\setupparagraphs
[\c!n=3,
+ \c!offset=\zeropoint,
\c!before=\blank,
\c!after=\blank,
\c!distance=\emwidth,
@@ -123,6 +124,7 @@
\c!rulecolor=,
\c!style=,
\c!color=,
+ \c!frame=\v!off,
\c!top=\vss,
\c!bottom=\vfill]
@@ -170,6 +172,7 @@
\else
\d_typo_paragraphs_width\p_width\relax
\fi
+ \advance\d_typo_paragraphs_width-2\dimexpr\paragraphsparameter\c!offset\relax
\c_typo_paragraphs_max\paragraphsparameter\c!n\relax
\d_typo_paragraphs_auto\d_typo_paragraphs_width\relax
\scratchcounter\zerocount
@@ -191,9 +194,10 @@
\parindent\zeropoint
\c_typo_paragraphs_n\zerocount
\let\\=\typo_paragraphs_next % downward compatible
- \dontleavehmode\hbox
+ \dontleavehmode\inheritedparagraphsframed
\bgroup % (2)
\forgetall
+ \advance\hsize-2\dimexpr\paragraphsparameter\c!offset\relax
\let\typo_paragraphs_start_cell\typo_paragraphs_start_cell_indeed
\let\typo_paragraphs_stop_cell \typo_paragraphs_stop_cell_indeed
\typo_paragraphs_start_cell_indeed}