diff options
author | Hans Hagen <pragma@wxs.nl> | 2021-07-22 19:30:29 +0200 |
---|---|---|
committer | Context Git Mirror Bot <phg@phi-gamma.net> | 2021-07-22 19:30:29 +0200 |
commit | ed85eb918354b77672bbe347c2afcfe2e0b6b7fb (patch) | |
tree | 9f3f5330a1c08b7aaccdf1c99963cd461310982f /tex/context/base/mkxl/meta-imp-txt.lmt | |
parent | 215aeff4092b7483f4ac024d19984a37c381ba52 (diff) | |
download | context-ed85eb918354b77672bbe347c2afcfe2e0b6b7fb.tar.gz |
2021-07-22 19:14:00
Diffstat (limited to 'tex/context/base/mkxl/meta-imp-txt.lmt')
-rw-r--r-- | tex/context/base/mkxl/meta-imp-txt.lmt | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/tex/context/base/mkxl/meta-imp-txt.lmt b/tex/context/base/mkxl/meta-imp-txt.lmt new file mode 100644 index 000000000..e4b88bd36 --- /dev/null +++ b/tex/context/base/mkxl/meta-imp-txt.lmt @@ -0,0 +1,116 @@ +if not modules then modules = { } end modules ['meta-imp-txt'] = { + version = 1.001, + comment = "companion to meta-imp-txt.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files", +} + +local setmetatableindex = table.setmetatableindex + +local texset = tex.set + +local scan = mp.scan +local scannumeric = scan.numeric +local scaninteger = scan.integer +local scanboolean = scan.boolean +local scanstring = scan.string + +local expandmacro = token.expandmacro -- todo + +local bpfactor = number.dimenfactors.bp + +local metapost = metapost +metapost.parshapes = { } + +local parshapes = { } +local properties = { } + +-- initialize shapes to 0 hsize + +function metapost.parshapes.reset() + parshapes = { } + properties = { } +end + +function metapost.parshapes.next() + properties = { } + parshapes[#parshapes+1] = properties +end + +function metapost.parshapes.inspect() + inspect(parshapes) +end + +function metapost.parshapes.getshape(n) + return (parshapes and parshapes[n]) or parshapes or nil +end + +function metapost.parshapes.get(index,name) + local v = parshapes[index][name] + if type(v) == "boolean" then + context(v and 1 or 0) + else + context(v) + end +end + +function metapost.parshapes.wholeshape() -- maybe just collect them earlier + local t, n = { }, 0 + for i=1,#parshapes do + local s = parshapes[i].shape + if s then + for i=1,#s do + n = n + 1 + t[n] = s[i] + end + end + end + if n > 0 then + texset("parshape",t) + end +end + +metapost.registerscript("setparshapeproperty", function() + local k = scanstring() + if k == "line" then + local entry = properties.shape[scannumeric()] + local indent = scannumeric() / bpfactor + local width = scannumeric() / bpfactor + entry[1] = indent + entry[2] = width + elseif k == "lines" then + properties.lines = scaninteger() + properties.shape = setmetatableindex(function(t,k) + local v = { 0, properties.width or 0 } + t[k] = v + return v + end) + elseif k == "first" then + properties[k] = scanboolean() + elseif k == "inspect" then + inspect(properties) + else + properties[k] = scannumeric() / bpfactor + end +end) + +interfaces.implement { + name = "setparagraphmetashape", + public = true, + protected = true, + arguments = "optional", + actions = function(list) + if list and list ~= "" then + list = utilities.parsers.settings_to_array(list) + if #list > 0 then + metapost.parshapes.reset() + for i=1,#list do + metapost.parshapes.next() + expandmacro("spac_shapes_calculate","{"..list[i].."}") + end + metapost.parshapes.wholeshape() + end + end + end +} |