diff options
author | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2016-04-22 22:14:39 +0000 |
commit | fc4466b32ed330a956ac603b00fd145524cff49a (patch) | |
tree | 2c50e2b8de13aa9233b2c76dffe201558f169e86 /Master/texmf-dist/tex/context/base/mkiv/data-pre.lua | |
parent | 50e2368597d5f6fe2057195d0ae6a9f2044923e4 (diff) |
context (22apr16)
git-svn-id: svn://tug.org/texlive/trunk@40691 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/data-pre.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/data-pre.lua | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/data-pre.lua b/Master/texmf-dist/tex/context/base/mkiv/data-pre.lua new file mode 100644 index 00000000000..1c5016f8644 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/data-pre.lua @@ -0,0 +1,142 @@ +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 + +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 + +-- This one assumes that inputstack is set (used in the tex loader). It is a momentary resolve +-- as the top of the input stack changes. + +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 + +-- The next variant is similar but bound to explicitly registered paths. Practice should +-- show if that gives the same results as the previous one. It is meant for a project +-- stucture. + +local function jobpath() + local path = resolvers.stackpath() + if not path or path == "" then + return "." + else + return path + end +end + +resolvers.toppath = toppath +resolvers.jobpath = jobpath + +-- This hook sit into the resolver: + +prefixes.toppath = function(str) return cleanpath(joinpath(toppath(),str)) end -- str can be nil or empty +prefixes.jobpath = function(str) return cleanpath(joinpath(jobpath(),str)) end -- str can be nil or empty + +resolvers.setdynamic("toppath") +resolvers.setdynamic("jobpath") + +-- for a while (obsolete): + +prefixes.jobfile = prefixes.jobpath + +resolvers.setdynamic("jobfile") |