summaryrefslogtreecommitdiff
path: root/tex/context/base/node-shp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/node-shp.lua')
-rw-r--r--tex/context/base/node-shp.lua43
1 files changed, 23 insertions, 20 deletions
diff --git a/tex/context/base/node-shp.lua b/tex/context/base/node-shp.lua
index 1066ab064..e637153dc 100644
--- a/tex/context/base/node-shp.lua
+++ b/tex/context/base/node-shp.lua
@@ -6,28 +6,32 @@ if not modules then modules = { } end modules ['node-shp'] = {
license = "see context related readme files"
}
-local free_node, remove_node = node.free, node.remove
+local nodes, node = nodes, node
-local nodecodes = nodes.nodecodes
+local nodecodes = nodes.nodecodes
+local tasks = nodes.tasks
-local hlist = nodecodes.hlist
-local vlist = nodecodes.vlist
-local disc = nodecodes.disc
-local mark = nodecodes.mark
-local kern = nodecodes.kern
-local glue = nodecodes.glue
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local disc_code = nodecodes.disc
+local mark_code = nodecodes.mark
+local kern_code = nodecodes.kern
+local glue_code = nodecodes.glue
-local function cleanup_page(head) -- rough
+local free_node = node.free
+local remove_node = node.remove
+
+local function cleanup(head) -- rough
local start = head
while start do
local id = start.id
- if id == disc or (id == glue and not start.writable) or (id == kern and start.kern == 0) or id == mark then
+ if id == disc_code or (id == glue_code and not start.writable) or (id == kern_code and start.kern == 0) or id == mark_code then
head, start, tmp = remove_node(head,start)
free_node(tmp)
- elseif id == hlist or id == vlist then
+ elseif id == hlist_code or id == vlist_code then
local sl = start.list
if sl then
- start.list = cleanup_page(sl)
+ start.list = cleanup(sl)
start = start.next
else
head, start, tmp = remove_node(head,start)
@@ -40,20 +44,19 @@ local function cleanup_page(head) -- rough
return head
end
-nodes.cleanup_page_first = false
+directives.register("backend.cleanup", function()
+ tasks.enableaction("shipouts","nodes.handlers.cleanuppage")
+end)
-function nodes.cleanup_page(head)
+function nodes.handlers.cleanuppage(head)
-- about 10% of the nodes make no sense for the backend
- if nodes.cleanup_page_first then
- head = cleanup_page(head)
- end
- return head, false
+ return cleanup(head), true
end
local actions = tasks.actions("shipouts",0) -- no extra arguments
-function nodes.process_page(head) -- problem, attr loaded before node, todo ...
+function nodes.handlers.finalize(head) -- problem, attr loaded before node, todo ...
return actions(head)
end
---~ nodes.process_page = actions
+--~ nodes.handlers.finalize = actions