diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua b/Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua new file mode 100644 index 00000000000..353b5e69c3a --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/mult-aux.lua @@ -0,0 +1,168 @@ +if not modules then modules = { } end modules ['mult-aux'] = { + version = 1.001, + comment = "companion to mult-aux.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local find = string.find + +interfaces.namespaces = interfaces.namespaces or { } +local namespaces = interfaces.namespaces +local variables = interfaces.variables + +local context = context + +local trace_namespaces = false trackers.register("interfaces.namespaces", function(v) trace_namespaces = v end) + +local report_namespaces = logs.reporter("interface","namespaces") + +local v_yes, v_list = variables.yes, variables.list + +local prefix = "????" +local meaning = "@@@@" + +local data = { } + +function namespaces.define(namespace,settings) + if trace_namespaces then + report_namespaces("installing namespace %a with settings %a",namespace,settings) + end + if data[namespace] then + report_namespaces("namespace %a is already taken",namespace) + end + if #namespace < 2 then + report_namespaces("namespace %a should have more than 1 character",namespace) + end + local ns = { } + data[namespace] = ns + utilities.parsers.settings_to_hash(settings,ns) + local name = ns.name + if not name or name == "" then + report_namespaces("provide a (command) name in namespace %a",namespace) + end + local self = "\\" .. prefix .. namespace + context.unprotect() + -- context.installnamespace(namespace) + context("\\def\\%s%s{%s%s}",prefix,namespace,meaning,namespace) -- or context.setvalue + if trace_namespaces then + report_namespaces("using namespace %a for %a",namespace,name) + end + local parent = ns.parent or "" + if parent ~= "" then + if trace_namespaces then + report_namespaces("namespace %a for %a uses parent %a",namespace,name,parent) + end + if not find(parent,"\\",1,true) then + parent = "\\" .. prefix .. parent + -- todo: check if defined + end + end + context.installparameterhandler(self,name) + if trace_namespaces then + report_namespaces("installing parameter handler for %a",name) + end + context.installparameterhashhandler(self,name) + if trace_namespaces then + report_namespaces("installing parameterhash handler for %a",name) + end + local style = ns.style + if style == v_yes then + context.installstyleandcolorhandler(self,name) + if trace_namespaces then + report_namespaces("installing attribute handler for %a",name) + end + end + local command = ns.command + if command == v_yes then + context.installdefinehandler(self,name,parent) + if trace_namespaces then + report_namespaces("installing definition command for %a (single)",name) + end + elseif command == v_list then + context.installdefinehandler(self,name,parent) + if trace_namespaces then + report_namespaces("installing definition command for %a (multiple)",name) + end + end + local setup = ns.setup + if setup == v_yes then + context.installsetuphandler(self,name) + if trace_namespaces then + report_namespaces("installing setup command for %a (%s)",name,"single") + end + elseif setup == v_list then + context.installsetuphandler(self,name) + if trace_namespaces then + report_namespaces("installing setup command for %a (%s)",name,"multiple") + end + end + local set = ns.set + if set == v_yes then + context.installparametersethandler(self,name) + if trace_namespaces then + report_namespaces("installing set/let/reset command for %a (%s)",name,"single") + end + elseif set == v_list then + context.installparametersethandler(self,name) + if trace_namespaces then + report_namespaces("installing set/let/reset command for %a (%s)",name,"multiple") + end + end + local frame = ns.frame + if frame == v_yes then + context.installinheritedframed(name) + if trace_namespaces then + report_namespaces("installing framed command for %a",name) + end + end + context.protect() +end + +function utilities.formatters.list(data,key,keys) + if not keys then + keys = { } + for _, v in next, data do + for k, _ in next, v do + keys[k] = true + end + end + keys = table.sortedkeys(keys) + end + context.starttabulate { "|"..string.rep("l|",#keys+1) } + context.NC() + context(key) + for i=1,#keys do + context.NC() + context(keys[i]) + end context.NR() + context.HL() + for k, v in table.sortedhash(data) do + context.NC() + context(k) + for i=1,#keys do + context.NC() + context(v[keys[i]]) + end context.NR() + end + context.stoptabulate() +end + +function namespaces.list() + -- utilities.formatters.list(data,"namespace") + local keys = { "type", "name", "comment", "version", "parent", "definition", "setup", "style" } + utilities.formatters.list(data,"namespace",keys) +end + + +interfaces.implement { + name = "definenamespace", + arguments = { "string", "string" }, + actions = namespaces.define +} + +interfaces.implement { + name = "listnamespaces", + actions = namespaces.list +} |