• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

sile-typesetter / sile / 6713098919

31 Oct 2023 10:21PM UTC coverage: 52.831% (-21.8%) from 74.636%
6713098919

push

github

web-flow
Merge d0a2a1ee9 into b185d4972

45 of 45 new or added lines in 3 files covered. (100.0%)

8173 of 15470 relevant lines covered (52.83%)

6562.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/pagebuilders/grid.lua
1
local base = require("pagebuilders.base")
×
2

3
local pagebuilder = pl.class(base)
×
4
pagebuilder._name = "grid"
×
5

6
function pagebuilder:_init()
×
7
  base._init(self)
×
8
end
9

10
function pagebuilder.findBestBreak (_, options)
×
11
  local vboxlist = SU.required(options, "vboxlist", "in findBestBreak")
×
12
  local target   = SU.required(options, "target", "in findBestBreak")
×
13
  local i = 0
×
14
  local totalHeight = SILE.length()
×
15
  local bestBreak = 0
×
16
  SU.debug("pagebuilder", "Page builder for frame", SILE.typesetter.frame.id, "called with", #vboxlist, "nodes,", target)
×
17
  if SU.debugging("vboxes") then
×
18
    for j, box in ipairs(vboxlist) do
×
19
      SU.debug("vboxes", (j == i and " >" or "  ") .. j .. ": " .. box)
×
20
    end
21
  end
22
  while i < #vboxlist do
×
23
    i = i + 1
×
24
    if not vboxlist[i].is_vglue then
×
25
      i = i - 1
×
26
      break
27
    end
28
  end
29
  while i < #vboxlist do
×
30
    i = i + 1
×
31
    local node = vboxlist[i]
×
32
    SU.debug("pagebuilder", "Dealing with VBox", node)
×
33
    if node.is_vbox then
×
34
      totalHeight = totalHeight + node.height:absolute() + node.depth:absolute()
×
35
    elseif node.is_vglue then
×
36
      totalHeight = totalHeight + node.height:absolute()
×
37
    elseif node.is_insertion then
×
38
      -- TODO: refactor as hook and without side effects!
39
      target = SILE.insertions.processInsertion(vboxlist, i, totalHeight, target)
×
40
      node = vboxlist[i]
×
41
    end
42
    local left = target - totalHeight
×
43
    local _left = left:tonumber()
×
44
    SU.debug("pagebuilder", "I have", left, "left")
×
45
    SU.debug("pagebuilder", "totalHeight", totalHeight, "with target", target)
×
46
    local badness = 0
×
47
    if _left < 0 then badness = 1000000 end
×
48
    if node.is_penalty then
×
49
      if node.penalty < -3000 then badness = 100000
×
50
      else badness = -_left * _left - node.penalty
×
51
      end
52
    end
53
    if badness > 0 then
×
54
      local onepage = {}
×
55
      for j = 1, bestBreak do
×
56
        onepage[j] = table.remove(vboxlist, 1)
×
57
      end
58
      while #onepage > 1 and onepage[#onepage].discardable do
×
59
        onepage[#onepage] = nil
×
60
      end
61
      return onepage, 1000
×
62
    end
63
    bestBreak = i
×
64
  end
65
  return false, false
×
66
end
67

68
return pagebuilder
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc