diff options
author | Karl Berry <karl@freefriends.org> | 2013-04-08 00:43:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-04-08 00:43:40 +0000 |
commit | 824f7b0903de8ad7f6ee3d7656005e4c59155e06 (patch) | |
tree | abfc8673ef9916f3ab7074e811207384c301492b /Master/texmf-dist/tex/context/base/core-dat.lua | |
parent | 689aefb0727676ed3cddf331337b4be226495e72 (diff) |
context import for TL13, from www.pragma-ade.com/context/beta/cont-tmf.zip
git-svn-id: svn://tug.org/texlive/trunk@29731 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/context/base/core-dat.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/core-dat.lua | 85 |
1 files changed, 54 insertions, 31 deletions
diff --git a/Master/texmf-dist/tex/context/base/core-dat.lua b/Master/texmf-dist/tex/context/base/core-dat.lua index 071a3fe0b47..826d3a675ee 100644 --- a/Master/texmf-dist/tex/context/base/core-dat.lua +++ b/Master/texmf-dist/tex/context/base/core-dat.lua @@ -11,7 +11,7 @@ if not modules then modules = { } end modules ['core-dat'] = { replaces the twopass data mechanism.</p> --ldx]]-- -local tonumber = tonumber +local tonumber, tostring, type = tonumber, tostring, type local context, commands = context, commands @@ -23,9 +23,8 @@ local report_pagestate = logs.reporter("pagestate") local allocate = utilities.storage.allocate local settings_to_hash = utilities.parsers.settings_to_hash -local format = string.format local texcount = tex.count - +local formatters = string.formatters local v_yes = interfaces.variables.yes local new_latelua = nodes.pool.latelua @@ -69,7 +68,12 @@ local function setdata(settings) local tag = settings.tag local data = settings.data local list = tobesaved[name] - data = settings_to_hash(data) or { } + if settings.convert and type(data) == "string" then + data = settings_to_hash(data) + end + if type(data) ~= "table" then + data = { data = settings.data } + end if not tag then tag = #list + 1 else @@ -84,10 +88,10 @@ local function setdata(settings) data.order = index data.realpage = texcount.realpageno if trace_datasets then - report_dataset("delayed: name %s, tag %s, index %s",name,tag,index) + report_dataset("action %a, name %a, tag %a, index %a","assign delayed",name,tag,index) end elseif trace_datasets then - report_dataset("immediate: name %s, tag %s",name,tag) + report_dataset("action %a, name %a, tag %a","assign immediate",name,tag) end return name, tag, data end @@ -103,47 +107,66 @@ function datasets.extend(name,tag) t.realpage = realpage t.order = order if trace_datasets then - report_dataset("flushed: name %s, tag %s, page %s, index %s, order",name,tag,t.index or 0,order,realpage) + report_dataset("action %a, name %a, tag %a, page %a, index %a","flush by order",name,tag,t.index or 0,order,realpage) end end function datasets.getdata(name,tag,key,default) local t = collected[name] - if t then + if t == nil then + if trace_datasets then + report_dataset("error: unknown dataset, name %a",name) + end + elseif type(t) ~= "table" then + return t + else t = t[tag] or t[tonumber(tag)] - if t then - if key then - return t[key] or default - else - return t + if not t then + if trace_datasets then + report_dataset("error: unknown dataset, name %a, tag %a",name,tag) end - elseif trace_datasets then - report_dataset("unknown: name %s, tag %s",name,tag) + elseif key then + return t[key] or default + else + return t end - elseif trace_datasets then - report_dataset("unknown: name %s",name) end return default end function commands.setdataset(settings) - local name, tag, data = setdata(settings) + settings.convert = true + local name, tag = setdata(settings) if settings.delay ~= v_yes then -- elseif type(tag) == "number" then - context(new_latelua(format("job.datasets.extend(%q,%i)",name,tag))) + context(new_latelua(formatters["job.datasets.extend(%q,%i)"](name,tag))) else - context(new_latelua(format("job.datasets.extend(%q,%q)",name,tag))) + context(new_latelua(formatters["job.datasets.extend(%q,%q)"](name,tag))) end end function commands.datasetvariable(name,tag,key) local t = collected[name] - t = t and (t[tag] or t[tonumber(tag)]) - if t then - local s = t[key] - if s then - context(s) + if t == nil then + if trace_datasets then + report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name) -- no tag + end + elseif type(t) ~= "table" then + context(tostring(t)) + else + t = t and (t[tag] or t[tonumber(tag)]) + if not t then + if trace_datasets then + report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name,tag) + end + elseif type(t) == "table" then + local s = t[key] + if type(s) ~= "table" then + context(tostring(s)) + elseif trace_datasets then + report_dataset("error: unknown dataset, name %a, tag %a, not passed to tex",name,tag) + end end end end @@ -188,7 +211,7 @@ local function setstate(settings) local data = realpage list[tag] = data if trace_pagestates then - report_pagestate("setting: name %s, tag %s, preset %s",name,tag,realpage) + report_pagestate("action %a, name %a, tag %a, preset %a","set",name,tag,realpage) end return name, tag, data end @@ -198,7 +221,7 @@ pagestates.setstate = setstate function pagestates.extend(name,tag) local realpage = texcount.realpageno if trace_pagestates then - report_pagestate("synchronizing: name %s, tag %s, preset %s",name,tag,realpage) + report_pagestate("action %a, name %a, tag %a, preset %a","synchronize",name,tag,realpage) end tobesaved[name][tag] = realpage end @@ -210,10 +233,10 @@ function pagestates.realpage(name,tag,default) if t then return tonumber(t or default) elseif trace_pagestates then - report_pagestate("unknown: name %s, tag %s",name,tag) + report_pagestate("error: unknown dataset, name %a, tag %a",name,tag) end elseif trace_pagestates then - report_pagestate("unknown: name %s",name) + report_pagestate("error: unknown dataset, name %a, tag %a",name) -- nil end return default end @@ -221,9 +244,9 @@ end function commands.setpagestate(settings) local name, tag, data = setstate(settings) if type(tag) == "number" then - context(new_latelua(format("job.pagestates.extend(%q,%i)",name,tag))) + context(new_latelua(formatters["job.pagestates.extend(%q,%i)"](name,tag))) else - context(new_latelua(format("job.pagestates.extend(%q,%q)",name,tag))) + context(new_latelua(formatters["job.pagestates.extend(%q,%q)"](name,tag))) end end |