summaryrefslogtreecommitdiff
path: root/tex/context/base/spac-par.lua
blob: f695e11e92f67fc28bde5e93a93abf0622d12de6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
if not modules then modules = { } end modules ['spac-par'] = {
    version   = 1.001,
    comment   = "companion to spac-par.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

-- sort of obsolete code

local attribute     = attributes.private('graphicvadjust')

local nodecodes     = nodes.nodecodes

local hlist_code    = nodecodes.hlist
local vlist_code    = nodecodes.vlist

local remove_node   = nodes.remove
local hpack_node    = node.hpack
local vpack_node    = node.vpack
local has_attribute = node.has_attribute

function nodes.handlers.graphicvadjust(head,groupcode) -- we can make an actionchain for mvl only
    if groupcode == "" then -- mvl only
        local h, p, done = head, nil, false
        while h do
            local id = h.id
            if id == hlist_code or id == vlist_code then
                local a = has_attribute(h,attribute)
                if a then
                    if p then
                        local n
                        head, h, n = remove_node(head,h)
                        local pl = p.list
                        if n.width ~= 0 then
                            n = hpack_node(n,0,'exactly') -- todo: dir
                        end
                        if pl then
                            pl.prev = n
                            n.next = pl
                        end
                        p.list = n
                        done = true
                    else
                        -- can't happen
                    end
                else
                    p = h
                    h = h.next
                end
            else
                h = h.next
            end
        end
        return head, done
    else
        return head, false
    end
end