diff options
Diffstat (limited to 'tex/context/base/node-spl.lua')
-rw-r--r-- | tex/context/base/node-spl.lua | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/tex/context/base/node-spl.lua b/tex/context/base/node-spl.lua index c609f4150..ddb4a26a8 100644 --- a/tex/context/base/node-spl.lua +++ b/tex/context/base/node-spl.lua @@ -22,9 +22,6 @@ local gmatch, concat, format, remove = string.gmatch, table.concat, string.forma local next, tostring, tonumber = next, tostring, tonumber local utfchar = utf.char local random = math.random -local variables = interfaces.variables -local settings_to_array, settings_to_hash = utilities.parsers.settings_to_array, utilities.parsers.settings_to_hash -local fcs = fonts.colors.set local trace_split = false trackers.register("builders.paragraphs.solutions.splitters.splitter", function(v) trace_split = v end) local trace_optimize = false trackers.register("builders.paragraphs.solutions.splitters.optimizer", function(v) trace_optimize = v end) @@ -37,6 +34,11 @@ local report_optimizers = logs.reporter("nodes","optimizers") local nodes, node = nodes, node +local variables = interfaces.variables + +local settings_to_array = utilities.parsers.settings_to_array +local settings_to_hash = utilities.parsers.settings_to_hash + local find_node_tail = node.tail or node.slide local free_node = node.free local free_nodelist = node.flush_list @@ -53,6 +55,8 @@ local insert_node_before = node.insert_before local insert_node_after = node.insert_after local repack_hlist = nodes.repack_hlist +local setnodecolor = nodes.tracers.colors.set + local nodecodes = nodes.nodecodes local whatsitcodes = nodes.whatsitcodes @@ -76,7 +80,9 @@ local starttiming = statistics.starttiming local stoptiming = statistics.stoptiming local process_characters = nodes.handlers.characters local inject_kerns = nodes.injections.handler -local fontdata = fonts.identifiers +local fontdata = fonts.hashes.identifiers +local setfontdynamics = fonts.hashes.setdynamics +local fontprocesses = fonts.hashes.processes local parbuilders = builders.paragraphs parbuilders.solutions = parbuilders.solutions or { } @@ -112,7 +118,7 @@ function splitters.setup(setups) criterium = tonumber(setups.criterium) or criterium end -local contextsetups = fonts.definers.specifiers.contextsetups +local contextsetups = fonts.specifiers.contextsetups local function convert(featuresets,name,set,what) local list, numbers, nofnumbers = set[what], { }, 0 @@ -333,29 +339,35 @@ local function doit(word,list,best,width,badness,line,set,listdir) end elseif set == "less" then for n in traverse_nodes(first) do - fcs(n,"font:isol") + setnodecolor(n,"font:isol") set_attribute(n,0,featurenumber) end else for n in traverse_nodes(first) do - fcs(n,"font:medi") + setnodecolor(n,"font:medi") set_attribute(n,0,featurenumber) end end local font = found.font - local dynamics = found.dynamics - local shared = fontdata[font].shared - if not dynamics then -- we cache this - dynamics = shared.dynamics - found.dynamics = dynamics - end - local processors = found[featurenumber] - if not processors then -- we cache this too - processors = shared.setdynamics(font,dynamics,featurenumber) - found[featurenumber] = processors - end - for i=1,#processors do -- often more than 1 - first = processors[i](first,font,featurenumber) -- we can make a special one that already passes the dynamics + -- local dynamics = found.dynamics + -- local shared = fontdata[font].shared + -- if not dynamics then -- we cache this + -- dynamics = shared.dynamics + -- found.dynamics = dynamics + -- end + -- local processors = found[featurenumber] + -- if not processors then -- we cache this too + -- processors = fonts.handlers.otf.setdynamics(font,featurenumber) + -- found[featurenumber] = processors + -- end + local setdynamics = setfontdynamics[font] + if setdynamics then + local processes = setdynamics(font,featurenumber) + for i=1,#processes do -- often more than 1 + first = processes[i](first,font,featurenumber) + end + else + report_solutions("fatal error, no dynamics for font %s",font) end first = inject_kerns(first) local h = word[2].next -- head of current word |