diff options
author | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-01-12 17:15:07 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2016-01-12 17:15:07 +0100 |
commit | 8d8d528d2ad52599f11250cfc567fea4f37f2a8b (patch) | |
tree | 94286bc131ef7d994f9432febaf03fe23d10eef8 /tex/context/base/pack-rul.lua | |
parent | f5aed2e51223c36c84c5f25a6cad238b2af59087 (diff) | |
download | context-8d8d528d2ad52599f11250cfc567fea4f37f2a8b.tar.gz |
2016-01-12 16:26:00
Diffstat (limited to 'tex/context/base/pack-rul.lua')
-rw-r--r-- | tex/context/base/pack-rul.lua | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/tex/context/base/pack-rul.lua b/tex/context/base/pack-rul.lua deleted file mode 100644 index 32cd9738e..000000000 --- a/tex/context/base/pack-rul.lua +++ /dev/null @@ -1,222 +0,0 @@ -if not modules then modules = { } end modules ['pack-rul'] = { - version = 1.001, - comment = "companion to pack-rul.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files" -} - ---[[ldx-- -<p>An explanation is given in the history document <t>mk</t>.</p> ---ldx]]-- - --- we need to be careful with display math as it uses shifts --- challenge: adapt glue_set --- setfield(h,"glue_set", getfield(h,"glue_set") * getfield(h,"width")/maxwidth -- interesting ... doesn't matter much - --- \framed[align={lohi,middle}]{$x$} --- \framed[align={lohi,middle}]{$ $} --- \framed[align={lohi,middle}]{\hbox{ }} --- \framed[align={lohi,middle}]{\hbox{}} --- \framed[align={lohi,middle}]{$\hskip2pt$} - -local type = type - -local hlist_code = nodes.nodecodes.hlist -local vlist_code = nodes.nodecodes.vlist -local box_code = nodes.listcodes.box -local line_code = nodes.listcodes.line - -local texsetdimen = tex.setdimen -local texsetcount = tex.setcount - -local implement = interfaces.implement - -local nuts = nodes.nuts - -local getfield = nuts.getfield -local setfield = nuts.setfield -local getnext = nuts.getnext -local getprev = nuts.getprev -local getlist = nuts.getlist -local setlist = nuts.setlist -local getid = nuts.getid -local getsubtype = nuts.getsubtype -local getbox = nuts.getbox - -local hpack = nuts.hpack -local traverse_id = nuts.traverse_id -local node_dimensions = nuts.dimensions -local free_node = nuts.free - -local function doreshapeframedbox(n) - local box = getbox(n) - local noflines = 0 - local firstheight = nil - local lastdepth = nil - local lastlinelength = 0 - local minwidth = 0 - local maxwidth = 0 - local totalwidth = 0 - local averagewidth = 0 - local boxwidth = getfield(box,"width") - if boxwidth ~= 0 then -- and h.subtype == vlist_code - local list = getlist(box) - if list then - local function check(n,repack) - if not firstheight then - firstheight = getfield(n,"height") - end - lastdepth = getfield(n,"depth") - noflines = noflines + 1 - local l = getlist(n) - if l then - if repack then - local subtype = getsubtype(n) - if subtype == box_code or subtype == line_code then - -- used to be: hpack(copy(l)).width - lastlinelength = node_dimensions(l,getfield(n,"dir")) - else - lastlinelength = getfield(n,"width") - end - else - lastlinelength = getfield(n,"width") - end - if lastlinelength > maxwidth then - maxwidth = lastlinelength - end - if lastlinelength < minwidth or minwidth == 0 then - minwidth = lastlinelength - end - totalwidth = totalwidth + lastlinelength - end - end - local hdone = false - for h in traverse_id(hlist_code,list) do -- no dir etc needed - check(h,true) - hdone = true - end - -- local vdone = false - for v in traverse_id(vlist_code,list) do -- no dir etc needed - check(v,false) - -- vdone = true - end - if not firstheight then - -- done) - elseif maxwidth ~= 0 then - if hdone then - for h in traverse_id(hlist_code,list) do - local l = getlist(h) - if l then - local subtype = getsubtype(h) - if subtype == box_code or subtype == line_code then - local p = hpack(l,maxwidth,'exactly',getfield(h,"dir")) -- multiple return value - if false then - setlist(h,p) - setfield(h,"shift",0) -- needed for display math, so no width check possible - -- setfield(p,"attr",getfield(h,"attr")) - else - setfield(h,"glue_set",getfield(p,"glue_set")) - setfield(h,"glue_order",getfield(p,"glue_order")) - setfield(h,"glue_sign",getfield(p,"glue_sign")) - setlist(p) - free_node(p) - end - end - setfield(h,"width",maxwidth) - end - end - end - -- if vdone then - -- for v in traverse_id(vlist_code,list) do - -- local width = getfield(n,"width") - -- if width > maxwidth then - -- setfield(v,"width",maxwidth) - -- end - -- end - -- end - setfield(box,"width",maxwidth) - averagewidth = noflines > 0 and totalwidth/noflines or 0 - else -- e.g. empty math {$ $} or \hbox{} or ... -setfield(box,"width",0) - end - end - end - texsetcount("global","framednoflines",noflines) - texsetdimen("global","framedfirstheight",firstheight or 0) -- also signal - texsetdimen("global","framedlastdepth",lastdepth or 0) - texsetdimen("global","framedminwidth",minwidth) - texsetdimen("global","framedmaxwidth",maxwidth) - texsetdimen("global","framedaveragewidth",averagewidth) -end - -local function doanalyzeframedbox(n) - local box = getbox(n) - local noflines = 0 - local firstheight = nil - local lastdepth = nil - if getfield(box,"width") ~= 0 then - local list = getlist(box) - if list then - local function check(n) - if not firstheight then - firstheight = getfield(n,"height") - end - lastdepth = getfield(n,"depth") - noflines = noflines + 1 - end - for h in traverse_id(hlist_code,list) do - check(h) - end - for v in traverse_id(vlist_code,list) do - check(v) - end - end - end - texsetcount("global","framednoflines",noflines) - texsetdimen("global","framedfirstheight",firstheight or 0) - texsetdimen("global","framedlastdepth",lastdepth or 0) -end - -implement { name = "doreshapeframedbox", actions = doreshapeframedbox, arguments = "integer" } -implement { name = "doanalyzeframedbox", actions = doanalyzeframedbox, arguments = "integer" } - -function nodes.maxboxwidth(box) - local boxwidth = getfield(box,"width") - if boxwidth == 0 then - return 0 - end - local list = getlist(box) - if not list then - return 0 - end - if getid(box) == hlist_code then - return boxwidth - end - local lastlinelength = 0 - local maxwidth = 0 - local function check(n,repack) - local l = getlist(n) - if l then - if repack then - local subtype = getsubtype(n) - if subtype == box_code or subtype == line_code then - lastlinelength = node_dimensions(l,getfield(n,"dir")) - else - lastlinelength = getfield(n,"width") - end - else - lastlinelength = getfield(n,"width") - end - if lastlinelength > maxwidth then - maxwidth = lastlinelength - end - end - end - for h in traverse_id(hlist_code,list) do -- no dir etc needed - check(h,true) - end - for v in traverse_id(vlist_code,list) do -- no dir etc needed - check(v,false) - end -end |