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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
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 trace_backend = false trackers.register("backend.initializers", function(v) trace_finalizers = v end)
local report_backend = logs.reporter("backend","initializing")
local allocate = utilities.storage.allocate
local setmetatableindex = table.setmetatableindex
local function nothing() return nil end
backends.nothing = nothing
local nodeinjections = { }
local codeinjections = { }
local registrations = { }
local tables = allocate()
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_backend then
if backend.comment then
report_backend("initializing backend %a, %a",what,backend.comment)
else
report_backend("initializing backend %a",what)
end
end
backends.current = what
for category, default in next, defaults do
local target, plugin = backends[category], backend[category]
setmetatableindex(plugin, default)
setmetatableindex(target, plugin)
end
elseif trace_backend then
report_backend("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)
local comment = { "comment", "" }
tables.vfspecials = allocate {
red = comment,
green = comment,
blue = comment,
black = comment,
startslant = comment,
stopslant = comment,
}
-- we'd better have this return something (defaults)
function codeinjections.getpos () return 0, 0 end
function codeinjections.gethpos () return 0 end
function codeinjections.getvpos () return 0 end
function codeinjections.hasmatrix() return false end
function codeinjections.getmatrix() return 1, 0, 0, 1, 0, 0 end
|