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.lua49
1 files changed, 34 insertions, 15 deletions
diff --git a/tex/context/base/mult-ini.lua b/tex/context/base/mult-ini.lua
index 14eeeb4c6..e1c8610a3 100644
--- a/tex/context/base/mult-ini.lua
+++ b/tex/context/base/mult-ini.lua
@@ -12,7 +12,7 @@ local serialize = table.serialize
local texsprint = tex.sprint
-local report_interfaces = logs.new("interfaces")
+local report_interface = logs.new("interface","initialization")
interfaces = interfaces or { }
interfaces.messages = interfaces.messages or { }
@@ -20,7 +20,7 @@ interfaces.constants = interfaces.constants or { }
interfaces.variables = interfaces.variables or { }
interfaces.elements = interfaces.elements or { }
-storage.register("interfaces/messages", interfaces.messages, "interfaces.messages" )
+storage.register("interfaces/messages", interfaces.messages, "interfaces.messages")
storage.register("interfaces/constants", interfaces.constants, "interfaces.constants")
storage.register("interfaces/variables", interfaces.variables, "interfaces.variables")
storage.register("interfaces/elements", interfaces.elements, "interfaces.elements")
@@ -38,9 +38,9 @@ local currentresponse = storage.shared.currentresponse
local complete = { } interfaces.complete = complete
setmetatable(complete, { __index = function(t,k)
- report_interfaces("loading interface definitions from 'mult-def.lua'")
+ report_interface("loading interface definitions from 'mult-def.lua'")
complete = dofile(resolvers.findfile("mult-def.lua"))
- report_interfaces("loading interface messages from 'mult-mes.lua'")
+ report_interface("loading interface messages from 'mult-mes.lua'")
complete.messages = dofile(resolvers.findfile("mult-mes.lua"))
interfaces.complete = complete
return complete[k]
@@ -50,6 +50,7 @@ local messages = interfaces.messages
local constants = interfaces.constants
local variables = interfaces.variables
local elements = interfaces.elements
+local reporters = { } -- just an optimization
local valueiskey = { __index = function(t,k) t[k] = k return k end }
@@ -57,8 +58,19 @@ setmetatable(variables,valueiskey)
setmetatable(constants,valueiskey)
setmetatable(elements, valueiskey)
+setmetatable(messages, { __index = function(t,k) local v = { } ; t[k] = v ; return v end })
+setmetatable(reporters, { __index = function(t,k) local v = logs.new(k) ; t[k] = v ; return v end })
+
+for category, m in next, messages do
+ -- We pre-create reporters for already defined messages
+ -- because otherwise listing is incomplete and we want
+ -- to use that for checking so delaying makes not much
+ -- sense there.
+ local r = reporters[m.title or category]
+end
+
function interfaces.setmessages(category,str)
- local m = messages[category] or { }
+ local m = messages[category]
for k, v in gmatch(str,"(%S+) *: *(.-) *[\n\r]") do
m[k] = gsub(v,"%-%-","%%s")
end
@@ -67,10 +79,6 @@ end
function interfaces.setmessage(category,tag,message)
local m = messages[category]
- if not m then
- m = { }
- messages[category] = m
- end
m[tag] = gsub(message,"%-%-","%%s")
end
@@ -86,7 +94,7 @@ end
local messagesplitter = lpeg.splitat(",")
-function interfaces.makemessage(category,tag,arguments)
+local function makemessage(category,tag,arguments)
local m = messages[category]
m = (m and (m[tag] or m[tostring(tag)])) or format("unknown message, category '%s', tag '%s'",category,tag)
if not m then
@@ -98,9 +106,13 @@ function interfaces.makemessage(category,tag,arguments)
end
end
+interfaces.makemessage = makemessage
+
function interfaces.showmessage(category,tag,arguments)
local m = messages[category]
- commands.writestatus((m and m.title) or "unknown title",interfaces.makemessage(category,tag,arguments))
+ local t = m and m.title or category
+ local r = reporters[t]
+ r(makemessage(category,tag,arguments))
end
function interfaces.setvariable(variable,given)
@@ -115,6 +127,13 @@ function interfaces.setelement(element,given)
elements[given] = element
end
+-- status
+
+function commands.showstatus(category,message)
+ local r = reporters[category]
+ r(message)
+end
+
-- initialization
function interfaces.setuserinterface(interface,response)
@@ -153,16 +172,16 @@ function interfaces.setuserinterface(interface,response)
nofcommands = nofcommands + 1
end
local nofmessages = 0
- local setmessage = interfaces.setmessage
for category, message in next, complete.messages do
+ local m = messages[category]
for tag, set in next, message do
- if tag ~= "files" then
- setmessage(category,tag,set[interface] or set.en)
+ if tag ~= "files" then
+ m[tag] = set[interface] or set.en -- there are no --'s any longer in the lua file
end
end
nofmessages = nofmessages + 1
end
- report_interfaces("definitions: %s constants, %s variables, %s elements, %s commands, %s message groups",
+ report_interface("definitions: %s constants, %s variables, %s elements, %s commands, %s message groups",
nofconstants,nofvariables,nofelements,nofcommands,nofmessages)
end
end