summaryrefslogtreecommitdiff
path: root/tex/context/base/core-ctx.lua
blob: 90cd4cb3b9ade05031c8c452b87215abacbcaa0a (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
if not modules then modules = { } end modules ['supp-fil'] = {
    version   = 1.001,
    comment   = "companion to supp-fil.tex",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

commands                   = commands or { }
commands.trace_prepfiles   = false

local list, suffix, islocal, found = { }, "prep", false, false

function commands.loadctxpreplist()
    local ctlname = file.replacesuffix(tex.jobname,"ctl")
    if lfs.isfile(ctlname) then
        local x = xml.load(ctlname)
        if x then
            islocal = xml.found(x,"ctx:preplist[@local=='yes']")
            if commands.trace_prepfiles then
                if islocal then
                    ctx.writestatus("systems","loading ctx log file (local)") -- todo: m!systems
                else
                    ctx.writestatus("systems","loading ctx log file (specified)") -- todo: m!systems
                end
            end
            for r, d, k in xml.elements(x,"ctx:prepfile") do
                local dk = d[k]
                local name = xml.content(dk)
                if islocal then
                    name = file.basename(name)
                end
                local done = dk.at['done'] or 'no'
                if commands.trace_prepfiles then
                    ctx.writestatus("systems","registering %s -> %s",done)
                end
                found = true
                list[name] = done -- 'yes' or 'no'
            end
        end
    end
end

local function resolve(name)
    local function found(name)
        local prepname = name .. "." .. suffix
        local done = list[name]
        if done then
            if lfs.isfile(prepname) then
                if commands.trace_prepfiles then
                    ctx.writestatus("systems", "preprocessing: using %s",prepname)
                end
                return prepname
            end
        end
        return false
    end
    local filename = file.collapse_path(name)
    local prepname = islocal and found(file.basename(name))
    if prepname then
        return prepname
    end
    local prepname = found(filename)
    if prepname then
        return prepname
    end
    return false
end

--~ support.doiffileexistelse(name)

local processfile       = commands.processfile
local doifinputfileelse = commands.doifinputfileelse

function commands.processfile(name,depth)
    local prepname = found and resolve(name)
    if prepname then
        return processfile(prepname,0)
    end
    return processfile(name,depth)
end

function commands.doifinputfileelse(name,depth)
    local prepname = found and resolve(name)
    if prepname then
        return doifinputfileelse(prepname,0)
    end
    return doifinputfileelse(name,depth)
end

function commands.preparedfile(name)
    return (found and resolve(name)) or name
end