From bf1392944a85a42b673d812126ad95f5c9a20266 Mon Sep 17 00:00:00 2001 From: Context Git Mirror Bot Date: Mon, 13 Jul 2015 00:15:03 +0200 Subject: 2015-07-12 23:32:00 --- tex/context/base/font-oup.lua | 178 +++++++++++++++++++++--------------------- 1 file changed, 91 insertions(+), 87 deletions(-) (limited to 'tex/context/base/font-oup.lua') diff --git a/tex/context/base/font-oup.lua b/tex/context/base/font-oup.lua index e07bd6d05..e4b433bc6 100644 --- a/tex/context/base/font-oup.lua +++ b/tex/context/base/font-oup.lua @@ -1132,7 +1132,7 @@ function readers.pack(data) end end end - elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" or kind == "gpos_mark2ligature" then +-- elseif kind == "gpos_mark2base" or kind == "gpos_mark2mark" or kind == "gpos_mark2ligature" then -- local c = step.baseclasses -- for k, v in next, c do -- c[k] = pack_normal(v) @@ -1817,101 +1817,103 @@ function readers.expand(data) end end end - if sequences then - -- we also need to do sublookups - for i=1,#sequences do - local sequence = sequences[i] - local steps = sequence.steps - if steps then - local kind = sequence.type - local markclass = sequence.markclass - if markclass then - if not markclasses then - report_warning("missing markclasses") - sequence.markclass = false - else - sequence.markclass = markclasses[markclass] - end - end - for i=1,sequence.nofsteps do - local step = steps[i] - local baseclasses = step.baseclasses - if baseclasses then - local coverage = step.coverage - for k, v in next, coverage do --- v[1] = baseclasses[v[2]] -- slot 1 is a placeholder - v[1] = baseclasses[v[1]] - end - elseif kind == "gpos_cursive" then - local coverage = step.coverage - for k, v in next, coverage do - v[1] = coverage -- slot 1 is a placeholder + local function expandlookups(sequences) + if sequences then + -- we also need to do sublookups + for i=1,#sequences do + local sequence = sequences[i] + local steps = sequence.steps + if steps then + local kind = sequence.type + local markclass = sequence.markclass + if markclass then + if not markclasses then + report_warning("missing markclasses") + sequence.markclass = false + else + sequence.markclass = markclasses[markclass] end end - local rules = step.rules - if rules then - local rulehash = { } - local rulesize = 0 - local coverage = { } - local lookuptype = sequence.type - step.coverage = coverage -- combined hits - for nofrules=1,#rules do - local rule = rules[nofrules] - local current = rule.current - local before = rule.before - local after = rule.after - local replacements = rule.replacements - local sequence = { } - local nofsequences = 0 - if before then - for n=1,#before do - nofsequences = nofsequences + 1 - sequence[nofsequences] = before[n] - end + for i=1,sequence.nofsteps do + local step = steps[i] + local baseclasses = step.baseclasses + if baseclasses then + local coverage = step.coverage + for k, v in next, coverage do + -- v[1] = baseclasses[v[2]] -- slot 1 is a placeholder + v[1] = baseclasses[v[1]] end - local start = nofsequences + 1 - for n=1,#current do - nofsequences = nofsequences + 1 - sequence[nofsequences] = current[n] + elseif kind == "gpos_cursive" then + local coverage = step.coverage + for k, v in next, coverage do + v[1] = coverage -- slot 1 is a placeholder end - local stop = nofsequences - if after then - for n=1,#after do + end + local rules = step.rules + if rules then + local rulehash = { } + local rulesize = 0 + local coverage = { } + local lookuptype = sequence.type + step.coverage = coverage -- combined hits + for nofrules=1,#rules do + local rule = rules[nofrules] + local current = rule.current + local before = rule.before + local after = rule.after + local replacements = rule.replacements + local sequence = { } + local nofsequences = 0 + if before then + for n=1,#before do + nofsequences = nofsequences + 1 + sequence[nofsequences] = before[n] + end + end + local start = nofsequences + 1 + for n=1,#current do nofsequences = nofsequences + 1 - sequence[nofsequences] = after[n] + sequence[nofsequences] = current[n] end - end - local lookups = rule.lookups - local subtype = nil - if lookups then - for k, v in next, lookups do - local lookup = sublookups[v] - if lookup then - lookups[k] = lookup - if not subtype then - subtype = lookup.type + local stop = nofsequences + if after then + for n=1,#after do + nofsequences = nofsequences + 1 + sequence[nofsequences] = after[n] + end + end + local lookups = rule.lookups + local subtype = nil + if lookups then + for k, v in next, lookups do + local lookup = sublookups[v] + if lookup then + lookups[k] = lookup + if not subtype then + subtype = lookup.type + end + else + -- already expanded end - else - -- already expanded end end - end - if sequence[1] then -- we merge coverage into one - rulesize = rulesize + 1 - rulehash[rulesize] = { - nofrules, -- 1 - lookuptype, -- 2 - sequence, -- 3 - start, -- 4 - stop, -- 5 - rule.lookups, -- 6 - replacements, -- 7 - subtype, -- 8 - } - for unic in next, sequence[start] do - local cu = coverage[unic] - if not cu then - coverage[unic] = rulehash -- can now be done cleaner i think + if sequence[1] then -- we merge coverage into one + rulesize = rulesize + 1 + rulehash[rulesize] = { + nofrules, -- 1 + lookuptype, -- 2 + sequence, -- 3 + start, -- 4 + stop, -- 5 + rule.lookups, -- 6 + replacements, -- 7 + subtype, -- 8 + } + for unic in next, sequence[start] do + local cu = coverage[unic] + if not cu then + coverage[unic] = rulehash -- can now be done cleaner i think + end end end end @@ -1921,4 +1923,6 @@ function readers.expand(data) end end end + expandlookups(sequences) + expandlookups(sublookups) end -- cgit v1.2.3