summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/file-syn.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/file-syn.lmt')
-rw-r--r--tex/context/base/mkxl/file-syn.lmt79
1 files changed, 79 insertions, 0 deletions
diff --git a/tex/context/base/mkxl/file-syn.lmt b/tex/context/base/mkxl/file-syn.lmt
new file mode 100644
index 000000000..1c3010b43
--- /dev/null
+++ b/tex/context/base/mkxl/file-syn.lmt
@@ -0,0 +1,79 @@
+if not modules then modules = { } end modules ['file-syn'] = {
+ version = 1.001,
+ comment = "companion to file-syn.mkvi",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+
+environment.filesynonyms = environment.filesynonyms or { }
+local filesynonyms = environment.filesynonyms
+
+local settings_to_array = utilities.parsers.settings_to_array
+local findfile = resolvers.findfile
+
+local implement = interfaces.implement
+
+storage.register("environment/filesynonyms", filesynonyms, "environment.filesynonyms")
+
+local function truefilename(name)
+ local realname = filesynonyms[name] or name
+ if realname ~= name then
+ return truefilename(realname)
+ else
+ return realname
+ end
+end
+
+environment.truefilename = truefilename
+
+function environment.definefilesynonym(name,realname)
+ if name and realname then
+ local names = settings_to_array(name)
+ for i=1,#names do
+ local name = names[i]
+ local synonym = filesynonyms[name]
+ if synonym then
+ interfaces.showmessage("files",1,{ name or "?", realname or "?", synonym or "?" })
+ end
+ filesynonyms[name] = realname
+ end
+ end
+end
+
+function environment.definefilefallback(name,alternatives)
+ if name and alternatives then
+ local names = settings_to_array(alternatives)
+ for i=1,#names do
+ local realname = findfile(names[i])
+ if realname ~= "" then
+ filesynonyms[name] = realname
+ break
+ end
+ end
+ end
+end
+
+implement {
+ name = "truefilename",
+ public = true,
+ actions = { truefilename, context },
+ arguments = "argument"
+}
+
+implement {
+ name = "definefilesynonym",
+ public = true,
+ protected = true,
+ actions = environment.definefilesynonym,
+ arguments = "2 optionals"
+}
+
+implement {
+ name = "definefilefallback",
+ public = true,
+ protected = true,
+ actions = environment,definefilefallback,
+ arguments = "2 optionals"
+}