diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-syn.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/strc-syn.lua | 87 |
1 files changed, 48 insertions, 39 deletions
diff --git a/Master/texmf-dist/tex/context/base/strc-syn.lua b/Master/texmf-dist/tex/context/base/strc-syn.lua index d6f38c2c7f6..f3ba97ffca2 100644 --- a/Master/texmf-dist/tex/context/base/strc-syn.lua +++ b/Master/texmf-dist/tex/context/base/strc-syn.lua @@ -7,20 +7,24 @@ if not modules then modules = { } end modules ['str-syn'] = { } local next, type = next, type -local texwrite, texsprint, format = tex.write, tex.sprint, string.format - -local ctxcatcodes = tex.ctxcatcodes +local texwrite, format = tex.write, string.format +local allocate = utilities.storage.allocate -- interface to tex end -joblists = joblists or { } -joblists.collected = joblists.collected or { } -joblists.tobesaved = joblists.tobesaved or { } +local structures = structures +local synonyms = structures.synonyms +local tags = structures.tags + +local collected = allocate() +local tobesaved = allocate() -local collected, tobesaved = joblists.collected, joblists.tobesaved +synonyms.collected = collected +synonyms.tobesaved = tobesaved local function initializer() - collected, tobesaved = joblists.collected, joblists.tobesaved + collected = synonyms.collected + tobesaved = synonyms.tobesaved end local function finalizer() @@ -29,7 +33,9 @@ local function finalizer() end end -job.register('joblists.collected', joblists.tobesaved, initializer, finalizer) +job.register('structures.synonyms.collected', tobesaved, initializer, finalizer) + +-- todo: allocate becomes metatable local function allocate(class) local d = tobesaved[class] @@ -50,12 +56,12 @@ local function allocate(class) return d end -function joblists.define(class,kind) +function synonyms.define(class,kind) local data = allocate(class) data.metadata.kind = kind end -function joblists.register(class,kind,spec) +function synonyms.register(class,kind,spec) local data = allocate(class) data.metadata.kind = kind -- runtime, not saved in format (yet) if not data.hash[spec.definition.tag or ""] then @@ -64,7 +70,7 @@ function joblists.register(class,kind,spec) end end -function joblists.registerused(class,tag) +function synonyms.registerused(class,tag) local data = allocate(class) local dht = data.hash[tag] if dht then @@ -72,29 +78,29 @@ function joblists.registerused(class,tag) end end -function joblists.synonym(class,tag) +function synonyms.synonym(class,tag) local data = allocate(class).hash local d = data[tag] if d then local de = d.definition de.used = true - texsprint(ctxcatcodes,de.synonym) + context(de.synonym) end end -function joblists.meaning(class,tag) +function synonyms.meaning(class,tag) local data = allocate(class).hash local d = data[tag] if d then local de = d.definition de.used = true - texsprint(ctxcatcodes,de.meaning) + context(de.meaning) end end -joblists.compare = sorters.comparers.basic -- (a,b) +synonyms.compare = sorters.comparers.basic -- (a,b) -function joblists.filter(data,options) +function synonyms.filter(data,options) local result = { } local entries = data.entries local all = options and options.criterium == interfaces.variables.all @@ -107,7 +113,7 @@ function joblists.filter(data,options) data.result = result end -function joblists.prepare(data) +function synonyms.prepare(data) local strip = sorters.strip local splitter = sorters.splitters.utf local result = data.result @@ -124,11 +130,11 @@ function joblists.prepare(data) end end -function joblists.sort(data,options) - sorters.sort(data.result,joblists.compare) +function synonyms.sort(data,options) + sorters.sort(data.result,synonyms.compare) end -function joblists.finalize(data,options) +function synonyms.finalize(data,options) local result = data.result data.metadata.nofsorted = #result local split = { } @@ -145,45 +151,48 @@ function joblists.finalize(data,options) data.result = split end -function joblists.flush(data,options) -- maybe pass the settings differently - local kind = data.metadata.kind -- hack, will be done better ---~ texsprint(ctxcatcodes,format("\\start%soutput",kind)) +-- for now, maybe at some point we will do a multipass or so +-- maybe pass the settings differently + +function synonyms.flush(data,options) + local kind = data.metadata.kind -- hack, will be done better + -- context[format("\\start%soutput",kind)]() local result = data.result local sorted = table.sortedkeys(result) for k=1,#sorted do local letter = sorted[k] local sublist = result[letter] local data = sublist.data ---~ texsprint(ctxcatcodes,format("\\start%ssection{%s}",kind,sublist.tag)) + -- context[format("\\start%ssection",kind)](sublist.tag) for d=1,#data do local entry = data[d].definition - texsprint(ctxcatcodes,format("\\%sentry{%s}{%s}{%s}{%s}",kind,d,entry.tag,entry.synonym,entry.meaning or "")) + -- context[format("\\%sentry",kind)](d,entry.tag,entry.synonym,entry.meaning or "") + context("\\%sentry{%s}{%s}{%s}{%s}",kind,d,entry.tag,entry.synonym,entry.meaning or "") end ---~ texsprint(ctxcatcodes,format("\\stop%ssection",kind)) + -- context[format("\\stop%ssection",kind)]() end ---~ texsprint(ctxcatcodes,format("\\stop%soutput",kind)) - -- for now, maybe at some point we will do a multipass or so + -- context[format("\\stop%soutput",kind)]() data.result = nil data.metadata.sorted = false end -function joblists.analysed(class,options) - local data = joblists.collected[class] +function synonyms.analyzed(class,options) + local data = synonyms.collected[class] if data and data.entries then options = options or { } sorters.setlanguage(options.language) - joblists.filter(data,options) -- filters entries to result - joblists.prepare(data,options) -- adds split table parallel to list table - joblists.sort(data,options) -- sorts entries in result - joblists.finalize(data,options) -- do things with data.entries + synonyms.filter(data,options) -- filters entries to result + synonyms.prepare(data,options) -- adds split table parallel to list table + synonyms.sort(data,options) -- sorts entries in result + synonyms.finalize(data,options) -- do things with data.entries data.metadata.sorted = true end return data and data.metadata.sorted and data.result and next(data.result) end -function joblists.process(class,options) - if joblists.analysed(class,options) then - joblists.flush(joblists.collected[class],options) +function synonyms.process(class,options) + if synonyms.analyzed(class,options) then + synonyms.flush(synonyms.collected[class],options) end end |