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
|
if not modules then modules = { } end modules ['file-lib'] = {
version = 1.001,
comment = "companion to file-lib.mkvi",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
-- todo: check all usage of truefilename at the tex end and remove
-- files there (and replace definitions by full names)
local format = string.format
local trace_files = false trackers.register("resolvers.readfile", function(v) trace_files = v end)
local report_files = logs.reporter("files","readfile")
local loaded = { }
local defaultpatterns = { "%s" }
local function defaultaction(name,foundname)
report_files("asked name %a, found name %a",name,foundname)
end
local function defaultfailure(name)
report_files("asked name %a, not found",name)
end
-- function commands.uselibrary(specification) -- todo; reporter
-- local name = specification.name
-- if name and name ~= "" then
-- local patterns = specification.patterns or defaultpatterns
-- local action = specification.action or defaultaction
-- local failure = specification.failure or defaultfailure
-- local onlyonce = specification.onlyonce
-- local files = utilities.parsers.settings_to_array(name)
-- local truename = environment.truefilename
-- local done = false
-- for i=1,#files do
-- local filename = files[i]
-- if not loaded[filename] then
-- if onlyonce then
-- loaded[filename] = true -- todo: base this on return value
-- end
-- for i=1,#patterns do
-- local somename = format(patterns[i],filename)
-- if truename then
-- somename = truename(somename)
-- end
-- local foundname = resolvers.getreadfilename("any",".",somename) or ""
-- if foundname ~= "" then
-- action(name,foundname)
-- done = true
-- break
-- end
-- end
-- if done then
-- break
-- end
-- end
-- end
-- if failure and not done then
-- failure(name)
-- end
-- end
-- end
function commands.uselibrary(specification) -- todo: reporter
local name = specification.name
if name and name ~= "" then
local patterns = specification.patterns or defaultpatterns
local action = specification.action or defaultaction
local failure = specification.failure or defaultfailure
local onlyonce = specification.onlyonce
local files = utilities.parsers.settings_to_array(name)
local truename = environment.truefilename
for i=1,#files do
local filename = files[i]
if loaded[filename] then
-- next one
else
if onlyonce then
loaded[filename] = true -- todo: base this on return value
end
local done = false
for i=1,#patterns do
local somename = format(patterns[i],filename)
if truename then
somename = truename(somename)
end
local foundname = resolvers.getreadfilename("any",".",somename) or ""
if foundname ~= "" then
action(name,foundname)
done = true
break
end
end
if failure and not done then
failure(name)
end
end
end
end
end
|