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/page-inj.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/page-inj.lua')
-rw-r--r-- | Master/texmf-dist/tex/context/base/page-inj.lua | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/page-inj.lua b/Master/texmf-dist/tex/context/base/page-inj.lua new file mode 100644 index 00000000000..5b450d60ece --- /dev/null +++ b/Master/texmf-dist/tex/context/base/page-inj.lua @@ -0,0 +1,101 @@ +if not modules then modules = { } end modules ["page-inj"] = { + version = 1.000, + comment = "Page injections", + author = "Wolfgang Schuster & Hans Hagen", + copyright = "Wolfgang Schuster & Hans Hagen", + license = "see context related readme files", +} + +-- Adapted a bit by HH: numbered states, tracking, delayed, order, etc. + +local injections = pagebuilders.injections or { } +pagebuilders.injections = injections + +local report = logs.reporter("pagebuilder","injections") +local trace = false trackers.register("pagebuilder.injections",function(v) trace = v end) + +local variables = interfaces.variables + +local v_yes = variables.yes +local v_previous = variables.previous +local v_next = variables.next + +local order = 0 +local cache = { } + +function injections.save(specification) -- maybe not public, just commands.* + order = order + 1 + cache[#cache+1] = { + order = order, + name = specification.name, + state = tonumber(specification.state) or specification.state, + parameters = specification.userdata, + } + tex.setcount("global","c_page_boxes_flush_n",#cache) +end + +function injections.flushbefore() -- maybe not public, just commands.* + if #cache > 0 then + local delayed = { } + context.unprotect() + for i=1,#cache do + local c = cache[i] + local oldstate = c.state + if oldstate == v_previous then + if trace then + report("entry %a, order %a, flushing due to state %a",i,c.order,oldstate) + end + context.page_injections_flush_saved(c.name,c.parameters) + elseif type(oldstate) == "number" and oldstate < 0 then + local newstate = oldstate + 1 + if newstate >= 0 then + newstate = v_previous + end + if trace then + report("entry %a, order %a, changing state from %a to %a",i,c.order,oldstate,newstate) + end + c.state = newstate + delayed[#delayed+1] = c + else + delayed[#delayed+1] = c + end + end + context.unprotect() + cache = delayed + tex.setcount("global","c_page_boxes_flush_n",#cache) + end +end + +function injections.flushafter() -- maybe not public, just commands.* + if #cache > 0 then + local delayed = { } + context.unprotect() + for i=1,#cache do + local c = cache[i] + local oldstate = c.state + if oldstate == v_next then + if trace then + report("entry %a, order %a, flushing due to state %a",i,c.order,oldstate) + end + context.page_injections_flush_saved(c.name,c.parameters) + elseif type(oldstate) == "number" and oldstate> 0 then + local newstate = oldstate- 1 + if newstate <= 0 then + newstate = v_next + end + if trace then + report("entry %a, order %a, changing state from %a to %a",i,c.order,oldstate,newstate) + end + c.state = newstate + delayed[#delayed+1] = c + end + end + context.protect() + cache = delayed + tex.setcount("global","c_page_boxes_flush_n",#cache) + end +end + +commands.page_injections_save = injections.save +commands.page_injections_flush_after = injections.flushafter +commands.page_injections_flush_before = injections.flushbefore |