1if not modules then modules = { } end modules ['file-syn'] = { 2 version = 1.001, 3 comment = "companion to file-syn.mkvi", 4 author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", 5 copyright = "PRAGMA ADE / ConTeXt Development Team", 6 license = "see context related readme files" 7} 8 9 10environment.filesynonyms = environment.filesynonyms or { } 11local filesynonyms = environment.filesynonyms 12 13local settings_to_array = utilities.parsers.settings_to_array 14local findfile = resolvers.findfile 15 16local implement = interfaces.implement 17 18storage.register("environment/filesynonyms", filesynonyms, "environment.filesynonyms") 19 20local function truefilename(name) 21 local realname = filesynonyms[name] or name 22 if realname ~= name then 23 return truefilename(realname) 24 else 25 return realname 26 end 27end 28 29environment.truefilename = truefilename 30 31function environment.definefilesynonym(name,realname) 32 if name and realname then 33 local names = settings_to_array(name) 34 for i=1,#names do 35 local name = names[i] 36 local synonym = filesynonyms[name] 37 if synonym then 38 interfaces.showmessage("files",1,{ name or "?", realname or "?", synonym or "?" }) 39 end 40 filesynonyms[name] = realname 41 end 42 end 43end 44 45function environment.definefilefallback(name,alternatives) 46 if name and alternatives then 47 local names = settings_to_array(alternatives) 48 for i=1,#names do 49 local realname = findfile(names[i]) 50 if realname ~= "" then 51 filesynonyms[name] = realname 52 break 53 end 54 end 55 end 56end 57 58implement { 59 name = "truefilename", 60 public = true, 61 actions = { truefilename, context }, 62 arguments = "argument" 63} 64 65implement { 66 name = "definefilesynonym", 67 public = true, 68 protected = true, 69 actions = environment.definefilesynonym, 70 arguments = "2 optionals" 71} 72 73implement { 74 name = "definefilefallback", 75 public = true, 76 protected = true, 77 actions = environment,definefilefallback, 78 arguments = "2 optionals" 79} 80 |