diff options
author | Philipp Gesang <phg@phi-gamma.net> | 2016-05-02 21:08:29 +0200 |
---|---|---|
committer | Philipp Gesang <phg@phi-gamma.net> | 2016-05-02 21:08:29 +0200 |
commit | c038e2135c2b312e0f882f2e5130736781d64dc0 (patch) | |
tree | 55d1e8f983c54cb0883b6f0fa88825f8f94bad1f /src/luaotfload-letterspace.lua | |
parent | f502d52086e6d13fdf27eca02c3df0c13e6351a4 (diff) | |
parent | 687430a81dcd658d664e6a8c7dca6f53bc093a8c (diff) | |
download | luaotfload-c038e2135c2b312e0f882f2e5130736781d64dc0.tar.gz |
Merge pull request #352 from phi-gamma/master
fixes
Diffstat (limited to 'src/luaotfload-letterspace.lua')
-rw-r--r-- | src/luaotfload-letterspace.lua | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/src/luaotfload-letterspace.lua b/src/luaotfload-letterspace.lua index 007fa51..40b3015 100644 --- a/src/luaotfload-letterspace.lua +++ b/src/luaotfload-letterspace.lua @@ -277,7 +277,7 @@ local kernfactors = { } --- fontid -> factor local kerncharacters kerncharacters = function (head) - local start, done = head, false + local start = head local lastfont = nil local keepligature = letterspace.keepligature --- function local keeptogether = letterspace.keeptogether --- function @@ -352,7 +352,6 @@ kerncharacters = function (head) start = c setfield(s, "components", nil) free_node(s) - done = true c = getfield (start, "components") end end @@ -378,7 +377,6 @@ kerncharacters = function (head) local shrunk = (getfield(spec,"shrink") * newwd) / wd setfield(prev, "spec", spec_injector(fillup, newwd, stretched, shrunk)) - done = true end elseif pid == kern_code then @@ -400,7 +398,6 @@ kerncharacters = function (head) local prev_kern = getfield(prev, "kern") prev_kern = prev_kern + quaddata[lastfont] * krn setfield (prev, "kern", prev_kern) - done = true end end @@ -411,16 +408,23 @@ kerncharacters = function (head) if keeptogether and keeptogether(prev, start) then -- keep 'm elseif identifiers[lastfont] then - local kerns = chardata[lastfont] and chardata[lastfont][prevchar].kerns - local kern = kerns and kerns[lastchar] or 0 - krn = kern + quaddata[lastfont]*krn -- here - insert_node_before(head,start,kern_injector(fillup,krn)) - done = true + local lastfontchars = chardata[lastfont] + if lastfontchars then + local prevchardata = lastfontchars[prevchar] + if not prevchardata then + --- font doesn’t contain the glyph + else + local kern = 0 + local kerns = prevchardata.kerns + if kerns then kern = kerns[lastchar] end + krn = kern + quaddata[lastfont]*krn -- here + insert_node_before(head,start,kern_injector(fillup,krn)) + end + end end else krn = quaddata[lastfont]*krn -- here insert_node_before(head,start,kern_injector(fillup,krn)) - done = true end elseif pid == disc_code then @@ -477,10 +481,19 @@ kerncharacters = function (head) and getid(prv) == glyph_code and getfont(prv) == lastfont then + local kern = 0 local prevchar = getchar(prv) local lastchar = getchar(start) - local kerns = chardata[lastfont] and chardata[lastfont][prevchar].kerns - local kern = kerns and kerns[lastchar] or 0 + local lastfontchars = chardata[lastfont] + if lastfontchars then + local prevchardata = lastfontchars[prevchar] + if not prevchardata then + --- font doesn’t contain the glyph + else + local kerns = prevchardata.kerns + if kerns then kern = kerns[lastchar] end + end + end krn = kern + quaddata[lastfont]*krn -- here else krn = quaddata[lastfont]*krn -- here @@ -496,7 +509,7 @@ kerncharacters = function (head) start = getnext(start) end end - return head, done + return head end ---=================================================================--- @@ -548,7 +561,7 @@ local enablefontkerning = function ( ) logreport ("term", 5, "letterspace", "kerncharacters() invoked with node.direct interface \z (``%s`` -> ``%s``)", tostring (hd), tostring (direct_hd)) - local direct_hd, _done = kerncharacters (direct_hd) + local direct_hd = kerncharacters (direct_hd) if not direct_hd then --- bad logreport ("both", 0, "letterspace", "kerncharacters() failed to return a valid new head") |