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.lua100
1 files changed, 82 insertions, 18 deletions
diff --git a/tex/context/base/mult-ini.lua b/tex/context/base/mult-ini.lua
index 3e89cf68f..c715fb1ad 100644
--- a/tex/context/base/mult-ini.lua
+++ b/tex/context/base/mult-ini.lua
@@ -10,14 +10,20 @@ local format, gmatch, gsub = string.format, string.gmatch, string.gsub
local lpegmatch = lpeg.match
local serialize = table.serialize
+local texsprint = tex.sprint
+
+local report_interfaces = logs.new("interfaces")
+
interfaces = interfaces or { }
interfaces.messages = interfaces.messages or { }
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/constants", interfaces.constants, "interfaces.constants")
storage.register("interfaces/variables", interfaces.variables, "interfaces.variables")
+storage.register("interfaces/elements", interfaces.elements, "interfaces.elements")
interfaces.interfaces = {
"cs", "de", "en", "fr", "it", "nl", "ro", "pe",
@@ -26,17 +32,30 @@ interfaces.interfaces = {
storage.shared.currentinterface = storage.shared.currentinterface or "en"
storage.shared.currentresponse = storage.shared.currentresponse or "en"
-function interfaces.setuserinterface(interface,response)
- storage.shared.currentinterface = interface
- storage.shared.currentresponse = response
-end
+local currentinterface = storage.shared.currentinterface
+local currentresponse = storage.shared.currentresponse
-local messages, constants, variables = interfaces.messages, interfaces.constants, interfaces.variables
+local complete = { } interfaces.complete = complete
+
+setmetatable(complete, { __index = function(t,k)
+ report_interfaces("loading interface definitions from 'mult-def.lua'")
+ complete = dofile(resolvers.find_file("mult-def.lua"))
+ report_interfaces("loading interface messages from 'mult-mes.lua'")
+ complete.messages = dofile(resolvers.find_file("mult-mes.lua"))
+ interfaces.complete = complete
+ return complete[k]
+end } )
+
+local messages = interfaces.messages
+local constants = interfaces.constants
+local variables = interfaces.variables
+local elements = interfaces.elements
local valueiskey = { __index = function(t,k) t[k] = k return k end }
setmetatable(variables,valueiskey)
setmetatable(constants,valueiskey)
+setmetatable(elements, valueiskey)
function interfaces.setmessages(category,str)
local m = messages[category] or { }
@@ -85,14 +104,69 @@ function interfaces.showmessage(category,tag,arguments)
end
function interfaces.setvariable(variable,given)
---~ variables[given] = variable
- variables[variable] = given
+ variables[given] = variable
end
function interfaces.setconstant(constant,given)
constants[given] = constant
end
+function interfaces.setelement(element,given)
+ elements[given] = element
+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
+ local nofconstants = 0
+ for given, constant in next, complete.constants do
+ constant = constant[interface] or constant.en or given
+ constants[constant] = given -- breedte -> width
+ texsprint("\\do@sicon{",given,"}{",constant,"}")
+ nofconstants = nofconstants + 1
+ end
+ local nofvariables = 0
+ for given, variable in next, complete.variables do
+ variable = variable[interface] or variable.en or given
+ variables[given] = variable -- ja -> yes
+ texsprint("\\do@sivar{",given,"}{",variable,"}")
+ nofvariables = nofvariables + 1
+ end
+ local nofelements = 0
+ for given, element in next, complete.elements do
+ element = element[interface] or element.en or given
+ elements[element] = given
+ texsprint("\\do@siele{",given,"}{",element,"}")
+ nofelements = nofelements + 1
+ end
+ local nofcommands = 0
+ for given, command in next, complete.commands do
+ command = command[interface] or command.en or given
+ if command ~= given then
+ texsprint("\\do@sicom{",given,"}{",command,"}")
+ end
+ nofcommands = nofcommands + 1
+ end
+ local nofmessages = 0
+ local setmessage = interfaces.setmessage
+ for category, message in next, complete.messages do
+ for tag, set in next, message do
+ if tag ~= "files" then
+ setmessage(category,tag,set[interface] or set.en)
+ end
+ end
+ nofmessages = nofmessages + 1
+ end
+ report_interfaces("definitions: %s constants, %s variables, %s elements, %s commands, %s message groups",
+ nofconstants,nofvariables,nofelements,nofcommands,nofmessages)
+ end
+end
+
-- it's nicer to have numbers as reference than a hash
interfaces.cachedsetups = interfaces.cachedsetups or { }
@@ -121,17 +195,7 @@ function interfaces.is_command(str)
return (str and str ~= "" and token.csname_name(token.create(str)) ~= "") or false -- there will be a proper function for this
end
--- -- --
-
-local complete = { } interfaces.complete = complete
-
-setmetatable(complete, { __index = function(t,k)
- complete = require("mult-def.lua")
- interfaces.complete = complete
- return complete[k]
-end } )
-
function interfaces.interfacedcommand(name)
local command = complete.commands[name]
- return command and command[storage.shared.currentinterface] or name
+ return command and command[currentinterface] or name
end