summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/data-vir.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkxl/data-vir.lmt')
-rw-r--r--tex/context/base/mkxl/data-vir.lmt29
1 files changed, 24 insertions, 5 deletions
diff --git a/tex/context/base/mkxl/data-vir.lmt b/tex/context/base/mkxl/data-vir.lmt
index b78211fc9..75a8c68c0 100644
--- a/tex/context/base/mkxl/data-vir.lmt
+++ b/tex/context/base/mkxl/data-vir.lmt
@@ -20,26 +20,42 @@ local savers = resolvers.savers
local cleaners = resolvers.cleaners
local data = { }
+local keep = { }
local n = 0 -- hm, number can be query
local f_virtual_n = formatters["virtual://%s.%s"]
local f_virtual_y = formatters["virtual://%s-%s.%s"]
-function savers.virtual(specification,content,suffix)
+local function virtualname(specification,suffix)
n = n + 1 -- one number for all namespaces
local path = type(specification) == "table" and specification.path or specification
if type(path) ~= "string" or path == "" then
path = "virtualfile"
end
- local filename = suffix and f_virtual_y(path,n,suffix) or f_virtual_n(path,n)
+ return suffix and f_virtual_y(path,n,suffix) or f_virtual_n(path,n)
+end
+
+local function directvirtual(filename,content,persistent)
+ if not content then
+ content = ""
+ end
if trace_virtual then
- report_virtual("saver: file %a saved",filename)
+ report_virtual("saver: file %a saved, size %i",filename,#content)
end
- data[filename] = content
+ data[filename] = content or ""
+ keep[filename] = persistent
return filename
end
+function savers.virtual(specification,content,suffix)
+ return directvirtual(virtualname(specification,suffix),content)
+end
+
+savers.virtualname = virtualname
+savers.directvirtual = directvirtual
+
function cleaners.virtual(filename)
data[filename] = nil
+ keep[filename] = nil
end
local finders = resolvers.finders
@@ -94,7 +110,10 @@ function loaders.virtual(specification)
if trace_virtual then
report_virtual("loader: file %a loaded",original)
end
- data[original] = nil
+ if not keep[original] then
+ data[original] = nil
+ keep[original] = nil
+ end
return true, d, #d
end
if trace_virtual then