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
|
# File 'lib/isodoc/word_function/postprocess_table.rb', line 11
def word_colgroup(docxml)
cells2d = {}
docxml.xpath("//table[colgroup]").each do |t|
w = colgroup_widths(t)
t.xpath(".//tr").each_with_index { |_tr, r| cells2d[r] = {} }
t.xpath(".//tr").each_with_index do |tr, r|
tr.xpath("./td | ./th").each_with_index do |td, _i|
x = 0
rs = td.attr("rowspan")&.to_i || 1
cs = td.attr("colspan")&.to_i || 1
while cells2d[r][x]
x += 1
end
(r..(r + rs - 1)).each do |y2|
cells2d[y2].nil? and next
(x..(x + cs - 1)).each { |x2| cells2d[y2][x2] = 1 }
end
width = (x..(x + cs - 1)).each_with_object({ width: 0 }) do |z, m|
m[:width] += w[z]
end
td["width"] = "#{width[:width]}%"
x += cs
end
end
end
end
|