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
|
if not modules then modules = { } end modules ['data-pre'] = {
version = 1.001,
comment = "companion to luat-lib.mkiv",
author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
copyright = "PRAGMA ADE / ConTeXt Development Team",
license = "see context related readme files"
}
local resolvers = resolvers
local prefixes = resolvers.prefixes
local cleanpath = resolvers.cleanpath
local findgivenfile = resolvers.findgivenfile
local expansion = resolvers.expansion
local getenv = resolvers.getenv -- we can probably also use resolvers.expansion
local basename = file.basename
local dirname = file.dirname
local joinpath = file.join
local isfile = lfs.isfile
prefixes.environment = function(str)
return cleanpath(expansion(str))
end
local function relative(str,n)
if not isfile(str) then
local pstr = "./" .. str
if isfile(pstr) then
str = pstr
else
local p = "../"
for i=1,n or 2 do
local pstr = p .. str
if isfile(pstr) then
str = pstr
break
else
p = p .. "../"
end
end
end
end
return cleanpath(str)
end
local function locate(str)
local fullname = findgivenfile(str) or ""
return cleanpath(fullname ~= "" and fullname or str)
end
prefixes.relative = relative
prefixes.locate = locate
prefixes.auto = function(str)
local fullname = relative(str)
if not isfile(fullname) then
fullname = locate(str)
end
return fullname
end
prefixes.filename = function(str)
local fullname = findgivenfile(str) or ""
return cleanpath(basename((fullname ~= "" and fullname) or str)) -- no cleanpath needed here
end
prefixes.pathname = function(str)
local fullname = findgivenfile(str) or ""
return cleanpath(dirname((fullname ~= "" and fullname) or str))
end
prefixes.selfautoloc = function(str)
return cleanpath(joinpath(getenv('SELFAUTOLOC'),str))
end
prefixes.selfautoparent = function(str)
return cleanpath(joinpath(getenv('SELFAUTOPARENT'),str))
end
prefixes.selfautodir = function(str)
return cleanpath(joinpath(getenv('SELFAUTODIR'),str))
end
prefixes.home = function(str)
return cleanpath(joinpath(getenv('HOME'),str))
end
local function toppath()
local inputstack = resolvers.inputstack -- dependency, actually the code should move but it's
if not inputstack then -- more convenient to keep it here
return "."
end
local pathname = dirname(inputstack[#inputstack] or "")
if pathname == "" then
return "."
else
return pathname
end
end
resolvers.toppath = toppath
prefixes.toppath = function(str)
return cleanpath(joinpath(toppath(),str))
end
prefixes.env = prefixes.environment
prefixes.rel = prefixes.relative
prefixes.loc = prefixes.locate
prefixes.kpse = prefixes.locate
prefixes.full = prefixes.locate
prefixes.file = prefixes.filename
prefixes.path = prefixes.pathname
|