diff options
Diffstat (limited to 'tex/context/base/mkiv/mult-fmt.lua')
-rw-r--r-- | tex/context/base/mkiv/mult-fmt.lua | 177 |
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", +} |