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 local names = settings_to_array(name) 33 for i=1,#names do 34 local name = names[i] 35 local synonym = filesynonyms[name] 36 if synonym then 37 interfaces.showmessage("files",1,{ name or "?", realname or "?", synonym or "?" }) 38 end 39 filesynonyms[name] = realname 40 end 41end 42 43function environment.definefilefallback(name,alternatives) 44 local names = settings_to_array(alternatives) 45 for i=1,#names do 46 local realname = findfile(names[i]) 47 if realname ~= "" then 48 filesynonyms[name] = realname 49 break 50 end 51 end 52end 53 54implement { 55 name = "truefilename", 56 actions = { truefilename, context }, 57 arguments = "string" 58} 59 60implement { 61 name = "definefilesynonym", 62 actions = environment.definefilesynonym, 63 arguments = "2 strings" 64} 65 66implement { 67 name = "definefilefallback", 68 actions = environment,definefilefallback, 69 arguments = "2 strings" 70} 71 |