summaryrefslogtreecommitdiff
path: root/tex/context/base/typo-krn.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/typo-krn.lua')
-rw-r--r--tex/context/base/typo-krn.lua26
1 files changed, 10 insertions, 16 deletions
diff --git a/tex/context/base/typo-krn.lua b/tex/context/base/typo-krn.lua
index fb394044f..48c09f5ff 100644
--- a/tex/context/base/typo-krn.lua
+++ b/tex/context/base/typo-krn.lua
@@ -66,7 +66,6 @@ kerns.mapping = kerns.mapping or { }
kerns.factors = kerns.factors or { }
local a_kerns = attributes.private("kern")
local a_fontkern = attributes.private('fontkern')
-kerns.attribute = kerns.attribute
storage.register("typesetters/kerns/mapping", kerns.mapping, "typesetters.kerns.mapping")
storage.register("typesetters/kerns/factors", kerns.factors, "typesetters.kerns.factors")
@@ -79,6 +78,7 @@ local factors = kerns.factors
-- make sure it runs after all others
-- there will be a width adaptor field in nodes so this will change
-- todo: interchar kerns / disc nodes / can be made faster
+-- todo: use insert_before etc
local gluefactor = 4 -- assumes quad = .5 enspace
@@ -111,16 +111,16 @@ end
-- needs checking ... base mode / node mode
-local function do_process(namespace,attribute,head,force) -- todo: glue so that we can fully stretch
+local function do_process(head,force) -- todo: glue so that we can fully stretch
local start, done, lastfont = head, false, nil
local keepligature = kerns.keepligature
local keeptogether = kerns.keeptogether
local fillup = false
while start do
-- faster to test for attr first
- local attr = force or start[attribute]
+ local attr = force or start[a_kerns]
if attr and attr > 0 then
- start[attribute] = unsetvalue
+ start[a_kerns] = unsetvalue
local krn = mapping[attr]
if krn == v_max then
krn = .25
@@ -137,7 +137,7 @@ local function do_process(namespace,attribute,head,force) -- todo: glue so that
if keepligature and keepligature(start) then
-- keep 'm
else
- c = do_process(namespace,attribute,c,attr)
+ c = do_process(c,attr)
local s = start
local p, n = s.prev, s.next
local tail = find_node_tail(c)
@@ -207,7 +207,7 @@ local function do_process(namespace,attribute,head,force) -- todo: glue so that
pre.prev = before
before.next = pre
before.prev = nil
- pre = do_process(namespace,attribute,before,attr)
+ pre = do_process(before,attr)
pre = pre.next
pre.prev = nil
disc.pre = pre
@@ -219,7 +219,7 @@ local function do_process(namespace,attribute,head,force) -- todo: glue so that
tail.next = after
after.prev = tail
after.next = nil
- post = do_process(namespace,attribute,post,attr)
+ post = do_process(post,attr)
tail.next = nil
disc.post = post
free_node(after)
@@ -234,7 +234,7 @@ local function do_process(namespace,attribute,head,force) -- todo: glue so that
tail.next = after
after.prev = tail
after.next = nil
- replace = do_process(namespace,attribute,before,attr)
+ replace = do_process(before,attr)
replace = replace.next
replace.prev = nil
after.prev.next = nil
@@ -320,16 +320,10 @@ function kerns.set(factor)
return factor
end
-local function process(namespace,attribute,head)
- return do_process(namespace,attribute,head) -- no direct map, because else fourth argument is tail == true
+local kerns.handler(head)
+ return do_process(head) -- no direct map, because else fourth argument is tail == true
end
-kerns.handler = nodes.installattributehandler {
- name = "kern",
- namespace = kerns,
- processor = process,
-}
-
-- interface
commands.setcharacterkerning = kerns.set