summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/core-dat.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/core-dat.lua')
-rw-r--r--tex/context/base/mkiv/core-dat.lua35
1 files changed, 33 insertions, 2 deletions
diff --git a/tex/context/base/mkiv/core-dat.lua b/tex/context/base/mkiv/core-dat.lua
index b49750159..b58a801d9 100644
--- a/tex/context/base/mkiv/core-dat.lua
+++ b/tex/context/base/mkiv/core-dat.lua
@@ -156,8 +156,29 @@ local function setdataset(settings)
end
end
-local function datasetvariable(name,tag,key)
- local t = collected[name]
+local cache = table.setmetatableindex(function(t,k)
+ local v = table.load(k..".tuc")
+ if v then
+ v = v.job
+ if v then
+ v = v.datasets
+ if v then
+ v = v.collected
+ end
+ end
+ end
+ if not v then
+ v = { }
+ if trace_datasets then
+ report_dataset("error: unknown dataset job %a",k)
+ end
+ end
+ t[k] = v
+ return v
+end)
+
+local function datasetvariable(name,tag,key,cache)
+ local t = (cache or collected)[name]
if t == nil then
if trace_datasets then
report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name) -- no tag
@@ -181,6 +202,10 @@ local function datasetvariable(name,tag,key)
end
end
+local function datasetvariablefromjob(jobnname,name,tag,key)
+ datasetvariable(name,tag,key,cache[jobnname])
+end
+
implement {
name = "setdataset",
actions = setdataset,
@@ -200,6 +225,12 @@ implement {
arguments = "3 strings",
}
+implement {
+ name = "datasetvariablefromjob",
+ arguments = { "string", "string", "string", "string" },
+ actions = datasetvariablefromjob
+}
+
--[[ldx--
<p>We also provide an efficient variant for page states.</p>
--ldx]]--