diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkiv/data-vir.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkiv/data-vir.lua | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkiv/data-vir.lua b/Master/texmf-dist/tex/context/base/mkiv/data-vir.lua new file mode 100644 index 00000000000..7e25c822d07 --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkiv/data-vir.lua @@ -0,0 +1,85 @@ +if not modules then modules = { } end modules ['data-vir'] = { + 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 formatters, validstrings = string.formatters, string.valid + +local trace_virtual = false +local report_virtual = logs.reporter("resolvers","virtual") + +trackers.register("resolvers.locating", function(v) trace_virtual = v end) +trackers.register("resolvers.virtual", function(v) trace_virtual = v end) + +local resolvers = resolvers + +local finders, openers, loaders, savers = resolvers.finders, resolvers.openers, resolvers.loaders, resolvers.savers + +local data = { } +local n = 0 -- hm, number can be query +local f_virtual = formatters["virtual://%s.%s"] + +function savers.virtual(specification,content) + n = n + 1 -- one number for all namespaces + local path = specification.path + local filename = f_virtual(path ~= "" and path or "virtualfile",n) + if trace_virtual then + report_virtual("saver: file %a saved",filename) + end + data[filename] = content + return filename +end + +function finders.virtual(specification) + local original = specification.original + local d = data[original] + if d then + if trace_virtual then + report_virtual("finder: file %a found",original) + end + return original + else + if trace_virtual then + report_virtual("finder: unknown file %a",original) + end + return finders.notfound() + end +end + +function openers.virtual(specification) + local original = specification.original + local d = data[original] + if d then + if trace_virtual then + report_virtual("opener: file %a opened",original) + end + data[original] = nil -- when we comment this we can have error messages + -- With utf-8 we signal that no regime is to be applied! + -- characters.showstring(d) + return openers.helpers.textopener("virtual",original,d,"utf-8") + else + if trace_virtual then + report_virtual("opener: file %a not found",original) + end + return openers.notfound() + end +end + +function loaders.virtual(specification) + local original = specification.original + local d = data[original] + if d then + if trace_virtual then + report_virtual("loader: file %a loaded",original) + end + data[original] = nil + return true, d, #d + end + if trace_virtual then + report_virtual("loader: file %a not loaded",original) + end + return loaders.notfound() +end |