summaryrefslogtreecommitdiff
path: root/tex/context/base/back-ini.lua
blob: 243e3fbd55cc76dd0d8718ca01097544c1aba19e (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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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"
}

backends = backends or { }

local trace_backend = false local function nothing() return nil end

local report_backends = logs.new("backends")

backends.nothing = nothing

backends.nodeinjections = {
    rgbcolor     = nothing,
    cmykcolor    = nothing,
    graycolor    = nothing,
    spotcolor    = nothing,
    transparency = nothing,
    overprint    = nothing,
    knockout     = nothing,
    positive     = nothing,
    negative     = nothing,
    effect       = nothing,
    startlayer   = nothing,
    stoplayer    = nothing,
    switchlayer  = nothing,

    reference    = nothing,
    destination  = nothing,

}

backends.codeinjections = {

    prerollreference      = nothing,

    insertmovie           = nothing,
    insertsound           = nothing,

    presetsymbollist      = nothing,
    registersymbol        = nothing,
    registeredsymbol      = nothing,

    registercomment       = nothing,
    embedfile             = nothing,
    attachfile            = nothing,
    adddocumentinfo       = nothing,
    setupidentity         = nothing,
    setpagetransition     = nothing,
    defineviewerlayer     = nothing,
    addbookmarks          = nothing,
    addtransparencygroup  = nothing,

    typesetfield          = nothing,
    doiffieldelse         = nothing,
    doiffieldgroupelse    = nothing,
    definefield           = nothing,
    clonefield            = nothing,
    definefieldset        = nothing,
    getfieldgroup         = nothing,
    setformsmethod        = nothing,
    getdefaultfieldvalue  = nothing,

    setupcanvas           = nothing,

    initializepage        = nothing,
    initializedocument    = nothing,
    finalizepage          = nothing,
    finalizedocument      = nothing,

    flushpageactions      = nothing,
    flushdocumentactions  = nothing,

    insertrenderingwindow = nothing,
    processrendering      = nothing,
    kindofrendering       = nothing,
    flushrenderingwindow  = nothing,

    setfigurecolorspace   = nothing,
    setfigurealternative  = nothing,

}

backends.registrations = {
    grayspotcolor  = nothing,
    rgbspotcolor   = nothing,
    cmykspotcolor  = nothing,
    grayindexcolor = nothing,
    rgbindexcolor  = nothing,
    cmykindexcolor = nothing,
    spotcolorname  = nothing,
    transparency   = nothing,
}

local nodeinjections = backends.nodeinjections
local codeinjections = backends.codeinjections
local registrations  = backends.registrations

backends.current = "unknown"

function backends.install(what)
    if type(what) == "string" then
        local backend = backends[what]
        if backend then
            if trace_backend then
                report_backends("initializing backend %s (%s)",what,backend.comment or "no comment")
            end
            backends.current = what
            for _, category in next, { "nodeinjections", "codeinjections", "registrations"} do
                local plugin = backend[category]
                if plugin then
                    local whereto = backends[category]
                    for name, meaning in next, whereto do
                        if plugin[name] then
                            whereto[name] = plugin[name]
                        --  report_backends("installing function %s in category %s of %s",name,category,what)
                        elseif trace_backend then
                            report_backends("no function %s in category %s of %s",name,category,what)
                        end
                    end
                elseif trace_backend then
                    report_backends("no category %s in %s",category,what)
                end
            end
            backends.helpers = backend.helpers
        elseif trace_backend then
            report_backends("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)