summaryrefslogtreecommitdiff
path: root/tex/context/base/mkxl/strc-flt.lmt
blob: e47046f8c809b8e00de579d9a95160c3dc8ac70f (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
if not modules then modules = { } end modules ['strc-flt'] = {
    version   = 1.001,
    comment   = "companion to strc-flt.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

-- nothing

local sequencers         = utilities.sequencers
local appendaction       = sequencers.appendaction
local enableaction       = sequencers.enableaction
local disableaction      = sequencers.disableaction

local texgetdimen        = tex.getdimen
local texgetoutputactive = tex.getoutputactive

local trace              = trackers.register("structure.sidefloats.pageflush")
local report             = logs.reporter("structure","floats")

local forcepageflush     = builders.vspacing.forcepageflush

local d_page_sides_vsize = tex.isdimen("d_page_sides_vsize")

function builders.checksidefloat(mode,indented)
    if not texgetoutputactive() then
        local s = texgetdimen(d_page_sides_vsize)
        if s > 0 then
            if trace then
                report("force flushing page state, height %p",s)
            end
            forcepageflush()
        end
    else
        -- we don't have side floats outside the main vertical list
    end
    return indented
end

-- These two lines might move to task-ini.lmt where we currently only deal
-- with node handlers:

appendaction ("paragraph","system","builders.checksidefloat")
disableaction("paragraph","builders.checksidefloat")

interfaces.implement {
    name     = "enablesidefloatchecker",
    onlyonce = true,
    actions  = function()
        enableaction("paragraph","builders.checksidefloat")
    end,
}