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.lua102
1 files changed, 48 insertions, 54 deletions
diff --git a/tex/context/base/mult-ini.lua b/tex/context/base/mult-ini.lua
index 73de836db..ab3fa2230 100644
--- a/tex/context/base/mult-ini.lua
+++ b/tex/context/base/mult-ini.lua
@@ -15,14 +15,12 @@ local texsprint = tex.sprint
local report_interface = logs.reporter("interface","initialization")
interfaces = interfaces or { }
-interfaces.messages = interfaces.messages 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 { }
-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")
@@ -50,7 +48,6 @@ setmetatable(complete, { __index = function(t,k) -- one access needed to get loa
return rawget(complete,k)
end } )
-local messages = interfaces.messages
local constants = interfaces.constants
local variables = interfaces.variables
local elements = interfaces.elements
@@ -66,63 +63,76 @@ setmetatable(elements, valueiskey)
setmetatable(formats, valueiskey)
setmetatable(translations, valueiskey)
-setmetatable(messages, { __index = function(t,k) local v = { } ; t[k] = v ; return v end })
setmetatable(reporters, { __index = function(t,k) local v = logs.reporter(k) ; t[k] = v ; return v end })
-for category, m in next, messages do
+for category, _ in next, translations 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]
+ local r = reporters[category]
end
-function interfaces.setmessages(category,str)
- local m = messages[category]
- for k, v in gmatch(str,"(%S+) *: *(.-) *[\n\r]") do
- m[k] = gsub(v,"%-%-","%%s")
+-- adding messages
+
+local function add(target,tag,values)
+ local t = target[tag]
+ if not f then
+ target[tag] = values
+ else
+ for k, v in next, values do
+ if f[k] then
+ -- error
+ else
+ f[k] = v
+ end
+ end
end
- messages[category] = m
end
-function interfaces.setmessage(category,tag,message)
- local m = messages[category]
- m[tag] = gsub(message,"%-%-","%%s")
+function interfaces.settranslation(tag,values)
+ add(translations,tag,values)
end
-function interfaces.getmessage(category,tag,default)
- local m = messages[category]
- return (m and m[tag]) or default or "unknown message"
+function interfaces.setformat(tag,values)
+ add(formats,tag,values)
end
-function interfaces.doifelsemessage(category,tag)
- local m = messages[category]
- return commands.testcase(m and m[tag])
-end
+-- the old method:
-local messagesplitter = lpeg.splitat(",")
+local function fulltag(category,tag)
+ tag = gsub(tag,"%-%-","%%s")
+ return format("%s:%s",category,tag)
+end
-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
- return m .. " " .. tag
- elseif not arguments then
- return m
- else
- return format(m,lpegmatch(messagesplitter,arguments))
+function interfaces.setmessages(category,str)
+ for tag, message in gmatch(str,"(%S+) *: *(.-) *[\n\r]") do
+ if tag == "title" then
+ translations[tag] = translations[tag] or tag
+ else
+ formats[fulltag(category,tag)] = gsub(message,"%-%-","%%s")
+ end
end
end
-interfaces.makemessage = makemessage
+function interfaces.setmessage(category,tag,message)
+ formats[fulltag(category,tag)] = gsub(message,"%-%-","%%s")
+end
+
+function interfaces.getmessage(category,tag,default)
+ return formats[fulltag(category,tag)] or default or "unknown message"
+end
+
+function interfaces.doifelsemessage(category,tag)
+ return commands.testcase(formats[fulltag(category,tag)])
+end
function interfaces.showmessage(category,tag,arguments)
- local m = messages[category]
- local t = m and m.title or category
- local r = reporters[t]
- r(makemessage(category,tag,arguments))
+ reporters[category](formats[fulltag(category,tag)],arguments)
end
+-- till here
+
function interfaces.setvariable(variable,given)
variables[given] = variable
end
@@ -149,8 +159,6 @@ end
-- initialization
function interfaces.setuserinterface(interface,response)
- -- texsprint(format("\\input{mult-%s}", interface))
- -- texsprint(format("\\input{mult-m%s}", response))
storage.shared.currentinterface, currentinterface = interface, interface
storage.shared.currentresponse, currentresponse = response, response
if environment.initex then
@@ -183,17 +191,6 @@ function interfaces.setuserinterface(interface,response)
end
nofcommands = nofcommands + 1
end
- local nofmessages = 0
- for category, message in next, complete.messages.originals do
- local m = messages[category]
- for tag, set in next, message do
- 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
- -- experimental code:
local nofformats = 0
for given, format in next, complete.messages.formats do
formats[given] = format[interface] or format.en or given
@@ -204,14 +201,11 @@ function interfaces.setuserinterface(interface,response)
translations[given] = translation[interface] or translation.en or given
noftranslations = noftranslations + 1
end
- --
- report_interface("definitions: %s constants, %s variables, %s elements, %s commands, %s message groups, % formats, %s translations",
- nofconstants,nofvariables,nofelements,nofcommands,nofmessages,nofformats,noftranslations)
+ report_interface("definitions: %s constants, %s variables, %s elements, %s commands, % formats, %s translations",
+ nofconstants,nofvariables,nofelements,nofcommands,nofformats,noftranslations)
end
end
--- it's nicer to have numbers as reference than a hash
-
interfaces.cachedsetups = interfaces.cachedsetups or { }
interfaces.hashedsetups = interfaces.hashedsetups or { }