summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/mult-fmt.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/mult-fmt.lua')
-rw-r--r--tex/context/base/mkiv/mult-fmt.lua177
1 files changed, 177 insertions, 0 deletions
diff --git a/tex/context/base/mkiv/mult-fmt.lua b/tex/context/base/mkiv/mult-fmt.lua
new file mode 100644
index 000000000..a91999afd
--- /dev/null
+++ b/tex/context/base/mkiv/mult-fmt.lua
@@ -0,0 +1,177 @@
+if not modules then modules = { } end modules ['mult-fmt'] = {
+ version = 1.001,
+ comment = "companion to mult-ini.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local next = next
+local concat, sortedhash = table.concat, table.sortedhash
+local sub, formatters = string.sub, string.formatters
+local utfsplit = utf.split
+
+local prtcatcodes = catcodes.numbers.prtcatcodes
+local contextsprint = context.sprint
+local implement = interfaces.implement
+
+local report = logs.reporter("interface")
+local report_interface = logs.reporter("interface","initialization")
+local report_variable = logs.reporter("variable")
+local report_constant = logs.reporter("constant")
+local report_command = logs.reporter("command")
+local report_element = logs.reporter("element")
+local report_format = logs.reporter("format")
+local report_messagetag = logs.reporter("messagetag")
+local report_setupstring = logs.reporter("setupstring")
+
+local function limit(str,n)
+ if n > 6 and #str > n then
+ n = n - 4
+ local t = utfsplit(str)
+ local m = #t
+ if m > n then
+ t[n] = " ..."
+ str = concat(t,"",1,n)
+ end
+ end
+ return str
+end
+
+function interfaces.setuserinterface(interface,response)
+ local variables = interfaces.variables
+ local constants = interfaces.constants
+ local elements = interfaces.elements
+ local formats = interfaces.formats
+ local translations = interfaces.translations
+ local setupstrings = interfaces.setupstrings
+ local complete = interfaces.complete
+ local sharedstorage = storage.shared
+ --
+ sharedstorage.currentinterface, currentinterface = interface, interface
+ sharedstorage.currentresponse, currentresponse = response, response
+ --
+ if environment.initex then
+ local nofconstants = 0
+ local nofvariables = 0
+ local nofelements = 0
+ local nofcommands = 0
+ local nofformats = 0
+ local noftranslations = 0
+ local nofsetupstrings = 0
+ --
+ do
+ local list = complete.constants -- forces the load
+ local t = { }
+ local f = formatters["\\ui_c{%s}{%s}"], formatters["\\ui_s{%s}"]
+ local s = formatters["\\ui_s{%s}"]
+ logs.startfilelogging(report,"translated constants")
+ for given, constant in sortedhash(list) do
+ constant = constant[interface] or constant.en or given
+ constants[constant] = given -- breedte -> width
+ nofconstants = nofconstants + 1
+ if given == constant then
+ t[nofconstants] = s(given)
+ else
+ t[nofconstants] = f(given,constant)
+ end
+ report_constant("%-40s: %s",given,constant)
+ end
+ logs.stopfilelogging()
+ contextsprint(prtcatcodes,concat(t))
+ end
+ do
+ local list = complete.variables -- forces the load
+ local t = { }
+ local f = formatters["\\ui_v{%s}{%s}"]
+ logs.startfilelogging(report,"translated variables")
+ for given, variable in sortedhash(list) do
+ variable = variable[interface] or variable.en or given
+ variables[given] = variable -- ja -> yes
+ nofvariables = nofvariables + 1
+ t[nofvariables] = f(given,variable)
+ report_variable("%-40s: %s",given,variable)
+ end
+ logs.stopfilelogging()
+ contextsprint(prtcatcodes,concat(t))
+ end
+ do
+ local list = complete.elements -- forces the load
+ local t = { }
+ local f = formatters["\\ui_e{%s}{%s}"]
+ logs.startfilelogging(report,"translated elements")
+ for given, element in sortedhash(list) do
+ element = element[interface] or element.en or given
+ elements[element] = given
+ nofelements = nofelements + 1
+ t[nofelements] = f(given,element)
+ report_element("%-40s: %s",given,element)
+ end
+ logs.stopfilelogging()
+ contextsprint(prtcatcodes,concat(t))
+ end
+ do
+ local list = complete.commands -- forces the load
+ local t = { }
+ local n = 0
+ local f = formatters["\\ui_a\\%s\\%s"] -- formatters["\\ui_m{%s}{%s}"]
+ logs.startfilelogging(report,"translated commands")
+ for given, command in sortedhash(list) do
+ command = command[interface] or command.en or given
+ if command ~= given then
+ n = n + 1
+ t[n] = f(given,command)
+ report_command("%-40s: %s",given,command)
+ end
+ nofcommands = nofcommands + 1
+ end
+ logs.stopfilelogging()
+ contextsprint(prtcatcodes,"\\toksapp\\everydump{"..concat(t).."}")
+ end
+ do
+ local list = complete.messages.formats
+ logs.startfilelogging(report,"translated message formats")
+ for given, format in sortedhash(list) do
+ local found = format[interface] or format.en or given
+ formats[given] = found
+ nofformats = nofformats + 1
+ report_messagetag("%-40s: %s",limit(given,38),limit(found,38))
+ end
+ logs.stopfilelogging()
+ end
+ do
+ local list = complete.messages.translations
+ logs.startfilelogging(report,"translated message tags")
+ for given, translation in sortedhash(list) do
+ local found = translation[interface] or translation.en or given
+ translations[given] = found
+ noftranslations = noftranslations + 1
+ report_messagetag("%-40s: %s",given,found)
+ end
+ logs.stopfilelogging()
+ end
+ do
+ local list = complete.setupstrings
+ logs.startfilelogging(report,"translated setupstrings")
+ for given, setupstring in sortedhash(list) do
+ local found = setupstring[interface] or setupstring.en or given
+ setupstrings[given] = found
+ nofsetupstrings = nofsetupstrings + 1
+ report_setupstring("%-40s: %s",given,found)
+ end
+ logs.stopfilelogging()
+ end
+ report_interface("definitions: %a constants, %a variables, %a elements, %a commands, %a formats, %a translations, %a setupstrings",
+ nofconstants,nofvariables,nofelements,nofcommands,nofformats,noftranslations,nofsetupstrings)
+ else
+ report_interface("the language(s) can only be set when making the format")
+ end
+ interfaces.currentinterface = currentinterface
+ interfaces.currentresponse = currentresponse
+end
+
+interfaces.implement {
+ name = "setuserinterface",
+ actions = interfaces.setuserinterface,
+ arguments = "2 strings",
+}