diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/back-ini.lmt')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/back-ini.lmt | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/back-ini.lmt b/Master/texmf-dist/tex/context/base/mkxl/back-ini.lmt new file mode 100644 index 00000000000..92270574249 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/back-ini.lmt @@ -0,0 +1,127 @@ +if not modules then modules = { } end modules ['back-ini'] = { + version = 1.001, + comment = "companion to back-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local next, type = next, type +local format = string.format + +backends = backends or { } +local backends = backends + +local context = context + +local trace = false trackers.register("backend", function(v) trace = v end) +local report = logs.reporter("backend") + +local allocate = utilities.storage.allocate +local setmetatableindex = table.setmetatableindex +local setaction = nodes.tasks.setaction + +local implement = interfaces.implement +local variables = interfaces.variables + +local texset = tex.set + +local nodeinjections = { } +local codeinjections = { } +local registrations = { } +local tables = allocate() + +local function nothing() + return nil +end + +backends.nothing = nothing + +local function donothing(t,k) + t[k] = nothing + return nothing +end + +setmetatableindex(nodeinjections, donothing) +setmetatableindex(codeinjections, donothing) +setmetatableindex(registrations, donothing) + +local defaults = { + nodeinjections = nodeinjections, + codeinjections = codeinjections, + registrations = registrations, + tables = tables, +} + +backends.defaults = defaults + +backends.nodeinjections = { } setmetatableindex(backends.nodeinjections, nodeinjections) +backends.codeinjections = { } setmetatableindex(backends.codeinjections, codeinjections) +backends.registrations = { } setmetatableindex(backends.registrations, registrations) +backends.tables = { } setmetatableindex(backends.tables, tables) + +backends.current = "unknown" + +function backends.install(what) + if type(what) == "string" then + local backend = backends[what] + if backend then + if trace then + if backend.comment then + report("initializing backend %a, %a",what,backend.comment) + else + report("initializing backend %a",what) + end + end + backends.current = what + for category, default in next, defaults do + local target = backends[category] + local plugin = backend [category] + setmetatableindex(plugin, default) + setmetatableindex(target, plugin) + end + elseif trace then + report("no backend named %a",what) + end + end +end + +statistics.register("used backend", function() + local bc = backends.current + if bc ~= "unknown" then + return format("%s (%s)",bc,backends[bc].comment or "no comment") + else + return nil + end +end) + +-- can best be here + +interfaces.implement { + name = "setrealspaces", + arguments = "string", + actions = function(v) + setaction("shipouts","nodes.handlers.accessibility",v == variables.yes) + end +} + +-- moved to here + +local included = table.setmetatableindex( { + context = true, + id = true, + metadata = true, + date = true, + id = true, + pdf = true, +}, function(t,k) + return true +end) + +backends.included = included + +-- could also be codeinjections + +function backends.getcallbackstate() + return { count = status.late_callbacks or 0 } +end |