summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkxl/node-ini.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/node-ini.lmt')
-rw-r--r--Master/texmf-dist/tex/context/base/mkxl/node-ini.lmt200
1 files changed, 200 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/node-ini.lmt b/Master/texmf-dist/tex/context/base/mkxl/node-ini.lmt
new file mode 100644
index 00000000000..4ba4b4000a1
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkxl/node-ini.lmt
@@ -0,0 +1,200 @@
+if not modules then modules = { } end modules ['node-ini'] = {
+ version = 1.001,
+ comment = "companion to node-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+--[[ldx--
+<p>Most of the code that had accumulated here is now separated in modules.</p>
+--ldx]]--
+
+local next, type, tostring = next, type, tostring
+local gsub = string.gsub
+local concat, remove = table.concat, table.remove
+local sortedhash, sortedkeys, swapped = table.sortedhash, table.sortedkeys, table.swapped
+
+--[[ldx--
+<p>Access to nodes is what gives <l n='luatex'/> its power. Here we implement a
+few helper functions. These functions are rather optimized.</p>
+--ldx]]--
+
+nodes = nodes or { }
+local nodes = nodes
+nodes.handlers = nodes.handlers or { }
+
+local mark = utilities.storage.mark
+local allocate = utilities.storage.allocate
+local formatcolumns = utilities.formatters.formatcolumns
+
+local getsubtypes = node.subtypes
+local getvalues = node.values
+
+tex.magicconstants = { -- we use tex.constants for something else
+ running = -1073741824, -- null_flag
+ maxdimen = 1073741823, -- max_dimen
+ trueinch = 4736286,
+}
+
+local listcodes = mark(getsubtypes("list"))
+local rulecodes = mark(getsubtypes("rule"))
+local dircodes = mark(getsubtypes("dir"))
+local glyphcodes = mark(getsubtypes("glyph"))
+local disccodes = mark(getsubtypes("disc"))
+local gluecodes = mark(getsubtypes("glue"))
+local boundarycodes = mark(getsubtypes("boundary"))
+local penaltycodes = mark(getsubtypes("penalty"))
+local kerncodes = mark(getsubtypes("kern"))
+local mathcodes = mark(getsubtypes("math"))
+local noadcodes = mark(getsubtypes("noad"))
+local radicalcodes = mark(getsubtypes("radical"))
+local accentcodes = mark(getsubtypes("accent"))
+local fencecodes = mark(getsubtypes("fence"))
+----- fractioncodes = mark(getsubtypes("fraction"))
+local parcodes = mark(getsubtypes("par"))
+
+local fillvalues = mark(getvalues("fill"))
+local dirvalues = mark(getvalues("dir"))
+
+local function simplified(t)
+ local r = { }
+ for k, v in next, t do
+ r[k] = gsub(v,"_","")
+ end
+ return r
+end
+
+local noadoptions = allocate {
+ set = 0x08,
+ unused_1 = 0x00 + 0x08,
+ unused_2 = 0x01 + 0x08,
+ axis = 0x02 + 0x08,
+ no_axis = 0x04 + 0x08,
+ exact = 0x10 + 0x08,
+ left = 0x11 + 0x08,
+ middle = 0x12 + 0x08,
+ right = 0x14 + 0x08,
+}
+
+local nodecodes = simplified(node.types())
+
+gluecodes = allocate(swapped(gluecodes,gluecodes))
+dircodes = allocate(swapped(dircodes,dircodes))
+boundarycodes = allocate(swapped(boundarycodes,boundarycodes))
+noadcodes = allocate(swapped(noadcodes,noadcodes))
+radicalcodes = allocate(swapped(radicalcodes,radicalcodes))
+nodecodes = allocate(swapped(nodecodes,nodecodes))
+listcodes = allocate(swapped(listcodes,listcodes))
+glyphcodes = allocate(swapped(glyphcodes,glyphcodes))
+kerncodes = allocate(swapped(kerncodes,kerncodes))
+penaltycodes = allocate(swapped(penaltycodes,penaltycodes))
+mathcodes = allocate(swapped(mathcodes,mathcodes))
+disccodes = allocate(swapped(disccodes,disccodes))
+accentcodes = allocate(swapped(accentcodes,accentcodes))
+fencecodes = allocate(swapped(fencecodes,fencecodes))
+parcodes = allocate(swapped(parcodes,parcodes))
+rulecodes = allocate(swapped(rulecodes,rulecodes))
+noadoptions = allocate(swapped(noadoptions,noadoptions))
+
+dirvalues = allocate(swapped(dirvalues,dirvalues))
+fillvalues = allocate(swapped(fillvalues,fillvalues))
+
+nodes.gluecodes = gluecodes
+nodes.dircodes = dircodes
+nodes.boundarycodes = boundarycodes
+nodes.noadcodes = noadcodes
+nodes.listcodes = listcodes
+nodes.glyphcodes = glyphcodes
+nodes.kerncodes = kerncodes
+nodes.penaltycodes = penaltycodes
+nodes.mathcodes = mathcodes
+nodes.disccodes = disccodes
+nodes.accentcodes = accentcodes
+nodes.radicalcodes = radicalcodes
+nodes.fencecodes = fencecodes
+nodes.parcodes = parcodes
+nodes.rulecodes = rulecodes
+
+nodes.noadoptions = noadoptions
+nodes.fillvalues = fillvalues
+nodes.fillcodes = fillvalues -- for now
+nodes.dirvalues = dirvalues
+
+nodes.nodecodes = nodecodes
+
+local subtypes = allocate {
+ glue = gluecodes,
+ dir = dircodes,
+ boundary = boundarycodes,
+ noad = noadcodes,
+ glyph = glyphcodes,
+ kern = kerncodes,
+ penalty = penaltycodes,
+ math = mathcodes,
+ disc = disccodes,
+ accent = accentcodes,
+ radical = radicalcodes,
+ fence = fencecodes,
+ par = parcodes,
+ rule = rulecodes,
+
+ vlist = listcodes,
+ hlist = listcodes,
+
+ -- list = listcodes,
+
+ -- parameter = parametercodes,
+ -- user = usercodes,
+}
+
+for k, v in table.sortedhash(subtypes) do
+ local i = nodecodes[k]
+ if i and not subtypes[i] then
+ subtypes[i] = v
+ end
+end
+
+nodes.subtypes = subtypes
+
+-- a few more friendly aliases:
+
+nodes.skipcodes = gluecodes
+nodes.directioncodes = dircodes
+nodes.discretionarycodes = disccodes
+
+nodes.directionvalues = dirvalues
+
+glyphcodes.glyph = glyphcodes.character
+
+gluecodes.parfillrightskip = gluecodes.parfillrightskip or gluecodes.parfillskip
+gluecodes.parfillskip = gluecodes.parfillskip or gluecodes.parfillrightskip
+
+listcodes.row = listcodes.alignment
+listcodes.column = listcodes.alignment
+
+kerncodes.kerning = kerncodes.fontkern
+kerncodes.italiccorrection = kerncodes.italiccorrection or 1 -- new
+
+nodes.noadoptions = {
+ set = 0x08,
+ unused_1 = 0x00 + 0x08,
+ unused_2 = 0x01 + 0x08,
+ axis = 0x02 + 0x08,
+ no_axis = 0x04 + 0x08,
+ exact = 0x10 + 0x08,
+ left = 0x11 + 0x08,
+ middle = 0x12 + 0x08,
+ right = 0x14 + 0x08,
+}
+
+-- We use the real node code numbers.
+
+local texsetintegervalue = tex.setintegervalue
+
+for i=0,nodecodes.glyph do
+ texsetintegervalue(nodecodes[i] .. "nodecode",i,"immutable")
+end
+for i=0,#gluecodes do
+ texsetintegervalue(gluecodes[i] .. "subtypecode",i,"immutable")
+end