diff options
author | Karl Berry <karl@freefriends.org> | 2021-03-06 21:58:15 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-03-06 21:58:15 +0000 |
commit | 974640d66e61e81cb197ad96fdff7b08343e4c5a (patch) | |
tree | 2e1f75f32f312b7f24ba82b4590ae230bcd6f399 /Master/texmf-dist/tex/context/base/mkiv/mult-fmt.lua | |
parent | b4fa72e61230aca75f7f6fbf988821f71edfb6b2 (diff) |
context
git-svn-id: svn://tug.org/texlive/trunk@58167 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/mult-fmt.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/mult-fmt.lua | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/mult-fmt.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-fmt.lua new file mode 100644 index 00000000000..0d11a425333 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/mult-fmt.lua @@ -0,0 +1,338 @@ +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 setmacro = token.set_macro +local definedmacro = token.is_defined + +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}"] +-- 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 + +-- different per interface +-- +-- en: +-- +-- ui_c macro:#1#2 -> \immutable \gdefcsname \c!prefix! #1\endcsname {#1} +-- ui_v macro:#1#2 -> \immutable \gdefcsname \v!prefix! #1\endcsname {#2} +-- ui_e macro:#1#2 -> \immutable \gdefcsname \e!prefix! #1\endcsname {#2} +-- ui_a macro:#1#2 -> \frozen \protected \def #2{#1} +-- +-- otherwise: +-- +-- ui_c macro:#1#2 -> \immutable \gdefcsname \c!prefix! #1\endcsname {#1} +-- \immutable \gdefcsname \k!prefix! #2\endcsname {#1} + +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 + local reversetoo = interface ~= "en" + -- + do + local list = complete.constants -- forces the load + 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 + setmacro("c!" .. given,given,"immutable") + if reversetoo then + setmacro("k!" .. constant,given,"immutable") + end + report_constant("%-40s: %s",given,constant) + end + logs.stopfilelogging() + end + do + local list = complete.variables -- forces the load + 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 + setmacro("v!" .. given,variable,"immutable") + report_variable("%-40s: %s",given,variable) + end + logs.stopfilelogging() + end + do + local list = complete.elements -- forces the load + 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 + setmacro("e!" .. given,element,"immutable") + report_element("%-40s: %s",given,element) + end + logs.stopfilelogging() + end +-- do +-- local list = complete.commands -- forces the load +-- local todo = { } -- normally a small list +-- logs.startfilelogging(report,"translated commands") +-- for given, command in sortedhash(list) do +-- command = command[interface] or command.en or given +-- if command ~= given then +-- report_command("%-40s: %s",given,command) +-- todo[given] = command +-- end +-- nofcommands = nofcommands + 1 +-- end +-- logs.stopfilelogging() +-- -- For some reason we get corrupted definitions. +-- luatex.registerdumpactions(function() +-- for given, command in sortedhash(todo) do +-- -- if definedmacro(given) then +-- setmacro(command,"\\"..given,"frozen","protected","global") +-- -- end +-- end +-- end) +-- end + do + local list = complete.commands -- forces the load + local t = { } + local n = 0 + local f = formatters["\\frozen\\protected\\def\\%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(command,given) + 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", +} |