diff options
Diffstat (limited to 'tex/context/base/mkxl/typo-ada.lmt')
-rw-r--r-- | tex/context/base/mkxl/typo-ada.lmt | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/tex/context/base/mkxl/typo-ada.lmt b/tex/context/base/mkxl/typo-ada.lmt new file mode 100644 index 000000000..813c3ada2 --- /dev/null +++ b/tex/context/base/mkxl/typo-ada.lmt @@ -0,0 +1,107 @@ +if not modules then modules = { } end modules ['typo-adj'] = { + version = 1.001, + optimize = true, + comment = "companion to typo-adj.mkxl", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local setdimen = tex.setdimen +local setcount = tex.setcount +local setmacro = tokens.setters.macro +local expandmacro = token.expandmacro + +local nuts = nodes.nuts +local getwhd = nuts.getwhd +local getattr = nuts.getattr +local getwidth = nuts.getwidth +local setlist = nuts.setlist +local setlink = nuts.setlink +local setstate = nuts.setstate + +local takebox = nuts.takebox + +local new_kern = nuts.pool.kern + +local traverselist = node.direct.traverselist +local traverseleader = node.direct.traverseleader + +local a_adaptive = attributes.private("adaptive") + +local registervalue = attributes.registervalue +local getvalue = attributes.getvalue +local hasvalues = attributes.hasvalues +local texsetattribute = tex.setattribute + +local adaptive = nodes.adaptive or { } +nodes.adaptive = adaptive +local enabled = false + +local enableaction = nodes.tasks.enableaction + +function adaptive.set(settings) + if not enabled then + enableaction("vboxbuilders","nodes.adaptive.handle") + enabled = true + end + texsetattribute(a_adaptive,registervalue(a_adaptive,settings)) +end + +local function setadaptive(w,h,d,l,c) + setdimen("d_adaptive_width",w) + setdimen("d_adaptive_height",h) + setdimen("d_adaptive_depth",d) + setdimen("d_adaptive_line",l) + setmacro("m_adaptive_color",c) +end + +local methods = { + -- overlay + [1] = function(settings,hlist,list) + local setups = settings.setups + if setups and setups ~= "" then + local w, h, d = getwhd(hlist) + setadaptive(w,h,d,settings.rulethickness,settings.color) + expandmacro("setup",true,setups) + local l = takebox("b_adaptive_box") + if l then + setlist(hlist, setlink(l,new_kern(-getwidth(l)),list)) + end + end + end +} + +function adaptive.handle(n) + if hasvalues(a_adaptive) then + for _, _, _, l in traverselist(n) do + for m, _, _, ll in traverseleader(l) do + local settings = getvalue(a_adaptive,getattr(m,a_adaptive)) + if settings then + setstate(m,0) + local action = methods[settings.method or 1] + if action then + action(settings,m,ll) + end + end + end + end + end + return n +end + +interfaces.implement { + name = "setadaptive", + actions = adaptive.set, + arguments = { + { + { "setups", "string" }, + { "method", "integer" }, + { "mp", "string" }, + { "color", "string" }, + { "rulethickness", "dimension" }, + } + } +} + +nodes.tasks.prependaction("vboxbuilders", "normalizers", "nodes.adaptive.handle", nil, "nut", "disabled") |