diff options
Diffstat (limited to 'tex/context/base/mkiv/core-dat.lua')
-rw-r--r-- | tex/context/base/mkiv/core-dat.lua | 53 |
1 files changed, 44 insertions, 9 deletions
diff --git a/tex/context/base/mkiv/core-dat.lua b/tex/context/base/mkiv/core-dat.lua index fa4d089d0..5f9bc9d08 100644 --- a/tex/context/base/mkiv/core-dat.lua +++ b/tex/context/base/mkiv/core-dat.lua @@ -15,6 +15,7 @@ local tonumber, tostring, type = tonumber, tostring, type local context = context local commands = commands +local ctx_latelua = context.latelua local trace_datasets = false trackers.register("job.datasets" , function(v) trace_datasets = v end) local trace_pagestates = false trackers.register("job.pagestates", function(v) trace_pagestates = v end) @@ -244,7 +245,7 @@ end pagestates.setstate = setstate -function pagestates.extend(name,tag) +local function extend(name,tag) local realpage = texgetcount("realpageno") if trace_pagestates then report_pagestate("action %a, name %a, tag %a, preset %a","synchronize",name,tag,realpage) @@ -252,6 +253,8 @@ function pagestates.extend(name,tag) tobesaved[name][tag] = realpage end +pagestates.extend = extend + function pagestates.realpage(name,tag,default) local t = collected[name] if t then @@ -267,21 +270,47 @@ function pagestates.realpage(name,tag,default) return default end +-- local function setpagestate(settings) +-- local name, tag = setstate(settings) +-- if type(tag) == "number" then +-- context(new_latelua(formatters["job.pagestates.extend(%q,%i)"](name,tag))) +-- else +-- context(new_latelua(formatters["job.pagestates.extend(%q,%q)"](name,tag))) +-- end +-- end + local function setpagestate(settings) - local name, tag, data = setstate(settings) - if type(tag) == "number" then - context(new_latelua(formatters["job.pagestates.extend(%q,%i)"](name,tag))) - else - context(new_latelua(formatters["job.pagestates.extend(%q,%q)"](name,tag))) - end + local name, tag = setstate(settings) + -- context(new_latelua(function() extend(name,tag) end)) + ctx_latelua(function() extend(name,tag) end) end local function pagestaterealpage(name,tag) local t = collected[name] - t = t and (t[tag] or t[tonumber(tag)]) if t then - context(t) + t = t[tag] or t[tonumber(tag)] + if t then + context(t) + end + end +end + +local function pagestaterealpageorder(name,tag) + local t = collected[name] + if t then + local p = t[tag] + if p then + local n = 1 + for i=tag-1,1,-1 do + if t[i] == p then + n = n +1 + end + end + context(n) + return + end end + context(0) end local function setpagestaterealpageno(name,tag) @@ -313,3 +342,9 @@ implement { actions = setpagestaterealpageno, arguments = "2 strings", } + +implement { + name = "pagestaterealpageorder", + actions = pagestaterealpageorder, + arguments = { "string", "integer" } +} |