summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/strc-syn.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/strc-syn.lua')
-rw-r--r--Master/texmf-dist/tex/context/base/strc-syn.lua87
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