diff options
| author | Elie Roux <elie.roux@telecom-bretagne.eu> | 2013-04-23 02:26:27 -0700 | 
|---|---|---|
| committer | Elie Roux <elie.roux@telecom-bretagne.eu> | 2013-04-23 02:26:27 -0700 | 
| commit | f3776cb0941e417f8aa2efe46773cc7330506387 (patch) | |
| tree | 7c3dc50f78edba439b5b02db321e0e9855b6199e /luaotfload-basics-nod.lua | |
| parent | f4fa20a933db69aad3b0823e1b53115078f095e0 (diff) | |
| parent | bd1c0d02304969137f74a70f5d2a435553c90944 (diff) | |
| download | luaotfload-f3776cb0941e417f8aa2efe46773cc7330506387.tar.gz | |
Merge pull request #10 from phi-gamma/master
great file bundle restructuring, part I
Diffstat (limited to 'luaotfload-basics-nod.lua')
| -rw-r--r-- | luaotfload-basics-nod.lua | 95 | 
1 files changed, 95 insertions, 0 deletions
| diff --git a/luaotfload-basics-nod.lua b/luaotfload-basics-nod.lua new file mode 100644 index 0000000..151d98a --- /dev/null +++ b/luaotfload-basics-nod.lua @@ -0,0 +1,95 @@ +if not modules then modules = { } end modules ['luatex-fonts-nod'] = { +    version   = 1.001, +    comment   = "companion to luatex-fonts.lua", +    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL", +    copyright = "PRAGMA ADE / ConTeXt Development Team", +    license   = "see context related readme files" +} + +if context then +    texio.write_nl("fatal error: this module is not for context") +    os.exit() +end + +-- Don't depend on code here as it is only needed to complement the +-- font handler code. + +-- Attributes: + +if tex.attribute[0] ~= 0 then + +    texio.write_nl("log","!") +    texio.write_nl("log","! Attribute 0 is reserved for ConTeXt's font feature management and has to be") +    texio.write_nl("log","! set to zero. Also, some attributes in the range 1-255 are used for special") +    texio.write_nl("log","! purposes so setting them at the TeX end might break the font handler.") +    texio.write_nl("log","!") + +    tex.attribute[0] = 0 -- else no features + +end + +attributes            = { } +attributes.unsetvalue = -0x7FFFFFFF + +local numbers, last = { }, 127 + +function attributes.private(name) +    local number = numbers[name] +    if not number then +        if last < 255 then +            last = last + 1 +        end +        number = last +        numbers[name] = number +    end +    return number +end + +-- Nodes: + +nodes              = { } +nodes.pool         = { } +nodes.handlers     = { } + +local nodecodes    = { } for k,v in next, node.types   () do nodecodes[string.gsub(v,"_","")] = k end +local whatcodes    = { } for k,v in next, node.whatsits() do whatcodes[string.gsub(v,"_","")] = k end +local glyphcodes   = { [0] = "character", "glyph", "ligature", "ghost", "left", "right" } + +nodes.nodecodes    = nodecodes +nodes.whatcodes    = whatcodes +nodes.whatsitcodes = whatcodes +nodes.glyphcodes   = glyphcodes + +local free_node    = node.free +local remove_node  = node.remove +local new_node     = node.new + +nodes.handlers.protectglyphs   = node.protect_glyphs +nodes.handlers.unprotectglyphs = node.unprotect_glyphs + +function nodes.remove(head, current, free_too) +   local t = current +   head, current = remove_node(head,current) +   if t then +        if free_too then +            free_node(t) +            t = nil +        else +            t.next, t.prev = nil, nil +        end +   end +   return head, current, t +end + +function nodes.delete(head,current) +    return nodes.remove(head,current,true) +end + +nodes.before = node.insert_before +nodes.after  = node.insert_after + +function nodes.pool.kern(k) +    local n = new_node("kern",1) +    n.kern = k +    return n +end | 
