diff options
Diffstat (limited to 'tex/context/base/node-tst.lua')
-rw-r--r-- | tex/context/base/node-tst.lua | 240 |
1 files changed, 120 insertions, 120 deletions
diff --git a/tex/context/base/node-tst.lua b/tex/context/base/node-tst.lua index 98743ca0d..bfe0051bd 100644 --- a/tex/context/base/node-tst.lua +++ b/tex/context/base/node-tst.lua @@ -1,120 +1,120 @@ -if not modules then modules = { } end modules ['node-tst'] = {
- version = 1.001,
- comment = "companion to node-ini.mkiv",
- author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
- copyright = "PRAGMA ADE / ConTeXt Development Team",
- license = "see context related readme files"
-}
-
-local nodes, node = nodes, node
-
-local chardata = characters.data
-local nodecodes = nodes.nodecodes
-local skipcodes = nodes.skipcodes
-
-local glue_code = nodecodes.glue
-local penalty_code = nodecodes.penalty
-local kern_code = nodecodes.kern
-local glyph_code = nodecodes.glyph
-local whatsit_code = nodecodes.whatsit
-local hlist_code = nodecodes.hlist
-
-local leftskip_code = skipcodes.leftskip
-local rightskip_code = skipcodes.rightskip
-local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip
-local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip
-
-local find_node_tail = node.tail or node.slide
-
-function nodes.leftmarginwidth(n) -- todo: three values
- while n do
- local id = n.id
- if id == glue_code then
- return n.subtype == leftskip_code and n.spec.width or 0
- elseif id == whatsit_code then
- n = n.next
- elseif id == hlist_code then
- return n.width
- else
- break
- end
- end
- return 0
-end
-
-function nodes.rightmarginwidth(n)
- if n then
- n = find_node_tail(n)
- while n do
- local id = n.id
- if id == glue_code then
- return n.subtype == rightskip_code and n.spec.width or 0
- elseif id == whatsit_code then
- n = n.prev
- else
- break
- end
- end
- end
- return false
-end
-
-function nodes.somespace(n,all)
- if n then
- local id = n.id
- if id == glue_code then
- return (all or (n.spec.width ~= 0)) and glue_code
- elseif id == kern_code then
- return (all or (n.kern ~= 0)) and kern
- elseif id == glyph_code then
- local category = chardata[n.char].category
- -- maybe more category checks are needed
- return (category == "zs") and glyph_code
- end
- end
- return false
-end
-
-function nodes.somepenalty(n,value)
- if n then
- local id = n.id
- if id == penalty_code then
- if value then
- return n.penalty == value
- else
- return true
- end
- end
- end
- return false
-end
-
-function nodes.is_display_math(head)
- local n = head.prev
- while n do
- local id = n.id
- if id == penalty_code then
- elseif id == glue_code then
- if n.subtype == abovedisplayshortskip_code then
- return true
- end
- else
- break
- end
- n = n.prev
- end
- n = head.next
- while n do
- local id = n.id
- if id == penalty_code then
- elseif id == glue_code then
- if n.subtype == belowdisplayshortskip_code then
- return true
- end
- else
- break
- end
- n = n.next
- end
- return false
-end
+if not modules then modules = { } end modules ['node-tst'] = { + version = 1.001, + comment = "companion to node-ini.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +local nodes, node = nodes, node + +local chardata = characters.data +local nodecodes = nodes.nodecodes +local skipcodes = nodes.skipcodes + +local glue_code = nodecodes.glue +local penalty_code = nodecodes.penalty +local kern_code = nodecodes.kern +local glyph_code = nodecodes.glyph +local whatsit_code = nodecodes.whatsit +local hlist_code = nodecodes.hlist + +local leftskip_code = skipcodes.leftskip +local rightskip_code = skipcodes.rightskip +local abovedisplayshortskip_code = skipcodes.abovedisplayshortskip +local belowdisplayshortskip_code = skipcodes.belowdisplayshortskip + +local find_node_tail = node.tail or node.slide + +function nodes.leftmarginwidth(n) -- todo: three values + while n do + local id = n.id + if id == glue_code then + return n.subtype == leftskip_code and n.spec.width or 0 + elseif id == whatsit_code then + n = n.next + elseif id == hlist_code then + return n.width + else + break + end + end + return 0 +end + +function nodes.rightmarginwidth(n) + if n then + n = find_node_tail(n) + while n do + local id = n.id + if id == glue_code then + return n.subtype == rightskip_code and n.spec.width or 0 + elseif id == whatsit_code then + n = n.prev + else + break + end + end + end + return false +end + +function nodes.somespace(n,all) + if n then + local id = n.id + if id == glue_code then + return (all or (n.spec.width ~= 0)) and glue_code + elseif id == kern_code then + return (all or (n.kern ~= 0)) and kern + elseif id == glyph_code then + local category = chardata[n.char].category + -- maybe more category checks are needed + return (category == "zs") and glyph_code + end + end + return false +end + +function nodes.somepenalty(n,value) + if n then + local id = n.id + if id == penalty_code then + if value then + return n.penalty == value + else + return true + end + end + end + return false +end + +function nodes.is_display_math(head) + local n = head.prev + while n do + local id = n.id + if id == penalty_code then + elseif id == glue_code then + if n.subtype == abovedisplayshortskip_code then + return true + end + else + break + end + n = n.prev + end + n = head.next + while n do + local id = n.id + if id == penalty_code then + elseif id == glue_code then + if n.subtype == belowdisplayshortskip_code then + return true + end + else + break + end + n = n.next + end + return false +end |