summaryrefslogtreecommitdiff
path: root/tex/context/base/mult-ini.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mult-ini.lua')
-rw-r--r--tex/context/base/mult-ini.lua51
1 files changed, 33 insertions, 18 deletions
diff --git a/tex/context/base/mult-ini.lua b/tex/context/base/mult-ini.lua
index fbb986017..4156e813d 100644
--- a/tex/context/base/mult-ini.lua
+++ b/tex/context/base/mult-ini.lua
@@ -10,16 +10,19 @@ local format, gmatch, gsub = string.format, string.gmatch, string.gsub
local lpegmatch = lpeg.match
local serialize = table.serialize
-local texsprint = tex.sprint
+local allocate = utilities.storage.allocate
+local mark = utilities.storage.mark
+local texsprint = tex.sprint
+local setmetatableindex = table.setmetatableindex
-local report_interface = logs.reporter("interface","initialization")
+local report_interface = logs.reporter("interface","initialization")
-interfaces = interfaces or { }
-interfaces.constants = interfaces.constants or { }
-interfaces.variables = interfaces.variables or { }
-interfaces.elements = interfaces.elements or { }
-interfaces.formats = interfaces.formats or { }
-interfaces.translations = interfaces.translations or { }
+interfaces = interfaces or { }
+interfaces.constants = mark(interfaces.constants or { })
+interfaces.variables = mark(interfaces.variables or { })
+interfaces.elements = mark(interfaces.elements or { })
+interfaces.formats = mark(interfaces.formats or { })
+interfaces.translations = mark(interfaces.translations or { })
storage.register("interfaces/constants", interfaces.constants, "interfaces.constants")
storage.register("interfaces/variables", interfaces.variables, "interfaces.variables")
@@ -37,16 +40,19 @@ storage.shared.currentresponse = storage.shared.currentresponse or "en"
local currentinterface = storage.shared.currentinterface
local currentresponse = storage.shared.currentresponse
-local complete = { } interfaces.complete = complete
+local complete = allocate()
+interfaces.complete = complete
-setmetatable(complete, { __index = function(t,k) -- one access needed to get loaded
+local function resolve(t,k) -- one access needed to get loaded
report_interface("loading interface definitions from 'mult-def.lua'")
complete = dofile(resolvers.findfile("mult-def.lua"))
report_interface("loading interface messages from 'mult-mes.lua'")
complete.messages = dofile(resolvers.findfile("mult-mes.lua"))
interfaces.complete = complete
return rawget(complete,k)
-end } )
+end
+
+setmetatableindex(complete, resolve)
local constants = interfaces.constants
local variables = interfaces.variables
@@ -55,15 +61,24 @@ local formats = interfaces.formats
local translations = interfaces.translations
local reporters = { } -- just an optimization
-local valueiskey = { __index = function(t,k) t[k] = k return k end } -- will be helper
+local function valueiskey(t,k) -- will be helper
+ t[k] = k
+ return k
+end
-setmetatable(variables, valueiskey)
-setmetatable(constants, valueiskey)
-setmetatable(elements, valueiskey)
-setmetatable(formats, valueiskey)
-setmetatable(translations, valueiskey)
+setmetatableindex(variables, valueiskey)
+setmetatableindex(constants, valueiskey)
+setmetatableindex(elements, valueiskey)
+setmetatableindex(formats, valueiskey)
+setmetatableindex(translations, valueiskey)
+
+local function resolve(t,k)
+ local v = logs.reporter(k)
+ t[k] = v
+ return v
+end
-setmetatable(reporters, { __index = function(t,k) local v = logs.reporter(k) ; t[k] = v ; return v end })
+setmetatableindex(reporters, resolve)
for category, _ in next, translations do
-- We pre-create reporters for already defined messages