summaryrefslogtreecommitdiff
path: root/tex/context/base/node-bck.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/node-bck.lua')
-rw-r--r--tex/context/base/node-bck.lua322
1 files changed, 161 insertions, 161 deletions
diff --git a/tex/context/base/node-bck.lua b/tex/context/base/node-bck.lua
index 44fed5e17..feaa2c684 100644
--- a/tex/context/base/node-bck.lua
+++ b/tex/context/base/node-bck.lua
@@ -1,161 +1,161 @@
-if not modules then modules = { } end modules ['node-bck'] = {
- version = 1.001,
- comment = "companion to node-bck.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
--- beware, this one takes quite some runtime, so we need a status flag
--- maybe some page related state
-
-local attributes, nodes, node = attributes, nodes, node
-
-local nodecodes = nodes.nodecodes
-local listcodes = nodes.listcodes
-
-local hlist_code = nodecodes.hlist
-local vlist_code = nodecodes.vlist
-local glyph_code = nodecodes.glyph
-local cell_code = listcodes.cell
-
-local traverse = node.traverse
-local traverse_id = node.traverse_id
-
-local nodepool = nodes.pool
-local tasks = nodes.tasks
-
-local new_rule = nodepool.rule
-local new_glue = nodepool.glue
-
-local a_color = attributes.private('color')
-local a_transparency = attributes.private('transparency')
-local a_colorspace = attributes.private('colormodel')
-local a_background = attributes.private('background')
-local a_alignbackground = attributes.private('alignbackground')
-
-local function add_backgrounds(head) -- rather old code .. to be redone
- local current = head
- while current do
- local id = current.id
- if id == hlist_code or id == vlist_code then
- local list = current.list
- if list then
- local head = add_backgrounds(list)
- if head then
- current.list = head
- list = head
- end
- end
- local width = current.width
- if width > 0 then
- local background = current[a_background]
- if background then
- -- direct to hbox
- -- colorspace is already set so we can omit that and stick to color
- local mode = current[a_colorspace]
- if mode then
- local height = current.height
- local depth = current.depth
- local skip = id == hlist_code and width or (height + depth)
- local glue = new_glue(-skip)
- local rule = new_rule(width,height,depth)
- local color = current[a_color]
- local transparency = current[a_transparency]
- rule[a_colorspace] = mode
- if color then
- rule[a_color] = color
- end
- if transparency then
- rule[a_transparency] = transparency
- end
- rule.next = glue
- glue.prev = rule
- if list then
- glue.next = list
- list.prev = glue
- end
- current.list = rule
- end
- end
- end
- end
- current = current.next
- end
- return head, true
-end
-
-local function add_alignbackgrounds(head)
- local current = head
- while current do
- local id = current.id
- if id == hlist_code then
- local list = current.list
- if not list then
- -- no need to look
- elseif current.subtype == cell_code then
- local background = nil
- local found = nil
- -- for l in traverse(list) do
- -- background = l[a_alignbackground]
- -- if background then
- -- found = l
- -- break
- -- end
- -- end
- -- we know that it's a fake hlist (could be user node)
- -- but we cannot store tables in user nodes yet
- for l in traverse_id(hpack_code,list) do
- background = l[a_alignbackground]
- if background then
- found = l
- end
- break
- end
- --
- if background then
- -- current has subtype 5 (cell)
- local width = current.width
- if width > 0 then
- local mode = found[a_colorspace]
- if mode then
- local glue = new_glue(-width)
- local rule = new_rule(width,current.height,current.depth)
- local color = found[a_color]
- local transparency = found[a_transparency]
- rule[a_colorspace] = mode
- if color then
- rule[a_color] = color
- end
- if transparency then
- rule[a_transparency] = transparency
- end
- rule.next = glue
- glue.prev = rule
- if list then
- glue.next = list
- list.prev = glue
- end
- current.list = rule
- end
- end
- end
- else
- add_alignbackgrounds(list)
- end
- elseif id == vlist_code then
- local list = current.list
- if list then
- add_alignbackgrounds(list)
- end
- end
- current = current.next
- end
- return head, true
-end
-
-nodes.handlers.backgrounds = add_backgrounds
-nodes.handlers.alignbackgrounds = add_alignbackgrounds
-
-tasks.appendaction("shipouts","normalizers","nodes.handlers.backgrounds")
-tasks.appendaction("shipouts","normalizers","nodes.handlers.alignbackgrounds")
+if not modules then modules = { } end modules ['node-bck'] = {
+ version = 1.001,
+ comment = "companion to node-bck.mkiv",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- beware, this one takes quite some runtime, so we need a status flag
+-- maybe some page related state
+
+local attributes, nodes, node = attributes, nodes, node
+
+local nodecodes = nodes.nodecodes
+local listcodes = nodes.listcodes
+
+local hlist_code = nodecodes.hlist
+local vlist_code = nodecodes.vlist
+local glyph_code = nodecodes.glyph
+local cell_code = listcodes.cell
+
+local traverse = node.traverse
+local traverse_id = node.traverse_id
+
+local nodepool = nodes.pool
+local tasks = nodes.tasks
+
+local new_rule = nodepool.rule
+local new_glue = nodepool.glue
+
+local a_color = attributes.private('color')
+local a_transparency = attributes.private('transparency')
+local a_colorspace = attributes.private('colormodel')
+local a_background = attributes.private('background')
+local a_alignbackground = attributes.private('alignbackground')
+
+local function add_backgrounds(head) -- rather old code .. to be redone
+ local current = head
+ while current do
+ local id = current.id
+ if id == hlist_code or id == vlist_code then
+ local list = current.list
+ if list then
+ local head = add_backgrounds(list)
+ if head then
+ current.list = head
+ list = head
+ end
+ end
+ local width = current.width
+ if width > 0 then
+ local background = current[a_background]
+ if background then
+ -- direct to hbox
+ -- colorspace is already set so we can omit that and stick to color
+ local mode = current[a_colorspace]
+ if mode then
+ local height = current.height
+ local depth = current.depth
+ local skip = id == hlist_code and width or (height + depth)
+ local glue = new_glue(-skip)
+ local rule = new_rule(width,height,depth)
+ local color = current[a_color]
+ local transparency = current[a_transparency]
+ rule[a_colorspace] = mode
+ if color then
+ rule[a_color] = color
+ end
+ if transparency then
+ rule[a_transparency] = transparency
+ end
+ rule.next = glue
+ glue.prev = rule
+ if list then
+ glue.next = list
+ list.prev = glue
+ end
+ current.list = rule
+ end
+ end
+ end
+ end
+ current = current.next
+ end
+ return head, true
+end
+
+local function add_alignbackgrounds(head)
+ local current = head
+ while current do
+ local id = current.id
+ if id == hlist_code then
+ local list = current.list
+ if not list then
+ -- no need to look
+ elseif current.subtype == cell_code then
+ local background = nil
+ local found = nil
+ -- for l in traverse(list) do
+ -- background = l[a_alignbackground]
+ -- if background then
+ -- found = l
+ -- break
+ -- end
+ -- end
+ -- we know that it's a fake hlist (could be user node)
+ -- but we cannot store tables in user nodes yet
+ for l in traverse_id(hpack_code,list) do
+ background = l[a_alignbackground]
+ if background then
+ found = l
+ end
+ break
+ end
+ --
+ if background then
+ -- current has subtype 5 (cell)
+ local width = current.width
+ if width > 0 then
+ local mode = found[a_colorspace]
+ if mode then
+ local glue = new_glue(-width)
+ local rule = new_rule(width,current.height,current.depth)
+ local color = found[a_color]
+ local transparency = found[a_transparency]
+ rule[a_colorspace] = mode
+ if color then
+ rule[a_color] = color
+ end
+ if transparency then
+ rule[a_transparency] = transparency
+ end
+ rule.next = glue
+ glue.prev = rule
+ if list then
+ glue.next = list
+ list.prev = glue
+ end
+ current.list = rule
+ end
+ end
+ end
+ else
+ add_alignbackgrounds(list)
+ end
+ elseif id == vlist_code then
+ local list = current.list
+ if list then
+ add_alignbackgrounds(list)
+ end
+ end
+ current = current.next
+ end
+ return head, true
+end
+
+nodes.handlers.backgrounds = add_backgrounds
+nodes.handlers.alignbackgrounds = add_alignbackgrounds
+
+tasks.appendaction("shipouts","normalizers","nodes.handlers.backgrounds")
+tasks.appendaction("shipouts","normalizers","nodes.handlers.alignbackgrounds")