summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/grph-mem.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/grph-mem.lua')
-rw-r--r--tex/context/base/mkiv/grph-mem.lua168
1 files changed, 50 insertions, 118 deletions
diff --git a/tex/context/base/mkiv/grph-mem.lua b/tex/context/base/mkiv/grph-mem.lua
index ff3548350..bde216826 100644
--- a/tex/context/base/mkiv/grph-mem.lua
+++ b/tex/context/base/mkiv/grph-mem.lua
@@ -21,142 +21,74 @@ local report = logs.reporter("memstream")
local trace = false trackers.register ("graphics.memstreams", function(v) trace = v end)
local data = { }
-if pdfe then
-
- local function setmemstream(name,stream,once)
- if once and data[name] then
- if trace then
- report("not overloading %a",name) --
- end
- return data[name]
- end
- local kind = figures.guessfromstring(stream)
- local identifier = false
- if kind == "pdf" then
- identifier = pdfe.new(stream,#stream,name)
- if not identifier then
- report("no valid pdf stream %a",name)
- elseif trace then
- report("setting %a with identifier %a",name,identifier)
- end
- else
- identifier = "m_k_i_v_memstream_" .. name .. "." .. kind
- io.savedata(identifier,stream)
- end
- if not identifier then
- identifier = "invalid-memstream"
- end
- data[name] = identifier
- return identifier
- end
-
- resolvers.setmemstream = setmemstream
-
- function resolvers.finders.memstream(specification)
- local name = specification.path
- local identifier = data[name]
- if identifier then
- if trace then
- report("reusing %a with identifier %a",name,identifier)
- end
- return identifier
- end
- local stream = io.loaddata(name)
- if stream and stream ~= "" then
- return setmemstream(name,stream)
- end
+local function setmemstream(name,stream,once)
+ if once and data[name] then
if trace then
- report("no valid memstream %a",name)
+ report("not overloading %a",name) --
end
- return resolvers.finders.notfound()
+ return data[name]
end
-
- local flush = { }
-
- function resolvers.resetmemstream(name,afterpage)
- if afterpage then
- flush[#flush+1] = name
- end
- end
-
- luatex.registerpageactions(function()
- if #flush > 0 then
- for i=1,#flush do
- local identifier = data[name]
- if identifier then
- os.remove(identifier)
- data[name] = nil
- end
- end
- flush = { }
- end
- end)
-
-else
-
- local opened = { }
-
- local function setmemstream(name,stream,once)
- if once and data[name] then
- if trace then
- report("not overloading %a",name) --
- end
- return data[name]
- end
- local memstream, identifier = epdf.openMemStream(stream,#stream,name)
+ local kind = figures.guessfromstring(stream)
+ local identifier = false
+ if kind == "pdf" then
+ identifier = pdfe.new(stream,#stream,name)
if not identifier then
- report("no valid stream %a",name)
- identifier = "invalid-memstream"
+ report("no valid pdf stream %a",name)
elseif trace then
report("setting %a with identifier %a",name,identifier)
end
- data [name] = identifier
- opened[name] = memstream
- return identifier
+ else
+ identifier = "m_k_i_v_memstream_" .. name .. "." .. kind
+ io.savedata(identifier,stream)
end
+ if not identifier then
+ identifier = "invalid-memstream"
+ end
+ data[name] = identifier
+ return identifier
+end
- resolvers.setmemstream = setmemstream
+resolvers.setmemstream = setmemstream
- function resolvers.finders.memstream(specification)
- local name = specification.path
- local identifier = data[name]
- if identifier then
- if trace then
- report("reusing %a with identifier %a",name,identifier)
- end
- return identifier
- end
- local stream = io.loaddata(name)
- if not stream or stream == "" then
- if trace then
- report("no valid file %a",name)
- end
- return resolvers.finders.notfound()
- else
- return setmemstream(name,stream)
+function resolvers.finders.memstream(specification)
+ local name = specification.path
+ local identifier = data[name]
+ if identifier then
+ if trace then
+ report("reusing %a with identifier %a",name,identifier)
end
+ return identifier
+ end
+ local stream = io.loaddata(name)
+ if stream and stream ~= "" then
+ return setmemstream(name,stream)
end
+ if trace then
+ report("no valid memstream %a",name)
+ end
+ return resolvers.finders.notfound()
+end
- local flush = { }
+local flush = { }
- function resolvers.resetmemstream(name,afterpage)
- if afterpage then
- flush[#flush+1] = name
- else
- opened[name] = nil
- end
+function resolvers.resetmemstream(name,afterpage)
+ if afterpage then
+ flush[#flush+1] = name
end
+end
- luatex.registerpageactions(function()
- if #flush > 0 then
- for i=1,#flush do
- opened[flush[i]] = nil -- we keep of course data[name] because of reuse
+luatex.registerpageactions(function()
+ if #flush > 0 then
+ for i=1,#flush do
+ local identifier = data[name]
+ if identifier then
+ os.remove(identifier)
+ data[name] = nil
end
- flush = { }
end
- end)
-
-end
+ flush = { }
+ end
+end)
figures.identifiers.list[#figures.identifiers.list+1] = function(specification)
local name = specification.request.name