summaryrefslogtreecommitdiff
path: root/tex/context/base/back-ini.lua
blob: 5cabc16acd17c6ace261f91c2f4833e10c52f593 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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 setmetatable = setmetatable

backends       = backends or { }
local backends = backends

local trace_backend = false  trackers.register("backend.initializers", function(v) trace_finalizers = v end)

local report_backend = logs.reporter("backend","initializing")

local function nothing() return nil end

backends.nothing = nothing

local mt = {
    __index = function(t,k)
        t[k] = nothing
        return nothing
    end
}

local nodeinjections = { }  setmetatable(nodeinjections, mt)
local codeinjections = { }  setmetatable(codeinjections, mt)
local registrations  = { }  setmetatable(registrations,  mt)
local tables         = { }

local defaults = {
    nodeinjections = nodeinjections,
    codeinjections = codeinjections,
    registrations  = registrations,
    tables         = tables,
}

backends.defaults = defaults

backends.nodeinjections = { }  setmetatable(backends.nodeinjections, { __index = nodeinjections })
backends.codeinjections = { }  setmetatable(backends.codeinjections, { __index = codeinjections })
backends.registrations  = { }  setmetatable(backends.registrations,  { __index = registrations  })
backends.tables         = { }  setmetatable(backends.tables,         { __index = tables         })

backends.current = "unknown"

function backends.install(what)
    if type(what) == "string" then
        local backend = backends[what]
        if backend then
            if trace_backend then
                report_backend("initializing backend %s (%s)",what,backend.comment or "no comment")
            end
            backends.current = what
            for category, default in next, defaults do
                local target, plugin = backends[category], backend[category]
                setmetatable(plugin, { __index = default })
                setmetatable(target, { __index = plugin  })
            end
        elseif trace_backend then
            report_backend("no backend named %s",what)
        end
    end
end

statistics.register("used backend", function()
    local bc = backends.current
    if bc ~= "unknown" then
        return string.format("%s (%s)",bc,backends[bc].comment or "no comment")
    else
        return nil
    end
end)

local comment = { "comment", "" }

tables.vfspecials = {
    red        = comment,
    green      = comment,
    blue       = comment,
    black      = comment,
    startslant = comment,
    stopslant  = comment,
}