summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/spac-adj.lua
blob: cdf9b5051192064aeecd3cb793359e001da66351 (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
60
61
62
63
64
65
66
if not modules then modules = { } end modules ['spac-adj'] = {
    version   = 1.001,
    comment   = "companion to spac-adj.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 a_vadjust   = 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

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 = h[a_vadjust]
                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

interfaces.implement {
    name     = "enablegraphicvadjust",
    onlyonce = true,
    actions  = function()
        nodes.tasks.enableaction("finalizers","nodes.handlers.graphicvadjust")
    end
}