module IsoDoc::WordFunction
module Body
def remove_bottom_border(td)
td["style"] =
td["style"].gsub(/border-bottom:[^;]+;/, "border-bottom:0pt;").
gsub(/mso-border-bottom-alt:[^;]+;/, "mso-border-bottom-alt:0pt;")
end
SW1 = "solid windowtext".freeze
def new_fullcolspan_row(t, tfoot)
# how many columns in the table?
cols = 0
t.at(".//tr").xpath("./td | ./th").each do |td|
cols += (td["colspan"] ? td["colspan"].to_i : 1)
end
style = "border-top:0pt;mso-border-top-alt:0pt;"\
"border-bottom:#{SW1} 1.5pt;mso-border-bottom-alt:#{SW1} 1.5pt;"
tfoot.add_child("
|
")
tfoot.xpath(".//td").last
end
def make_tr_attr(td, row, totalrows, _header)
style = td.name == "th" ? "font-weight:bold;" : ""
rowmax = td["rowspan"] ? row + td["rowspan"].to_i - 1 : row
style += <<~STYLE
border-top:#{row.zero? ? "#{SW1} 1.5pt;" : 'none;'}
mso-border-top-alt:#{row.zero? ? "#{SW1} 1.5pt;" : 'none;'}
border-bottom:#{SW1} #{rowmax == totalrows ? '1.5' : '1.0'}pt;
mso-border-bottom-alt:#{SW1} #{rowmax == totalrows ? '1.5' : '1.0'}pt;
STYLE
{ rowspan: td["rowspan"], colspan: td["colspan"],
align: td["align"], style: style.gsub(/\n/, "") }
end
def make_table_attr(node)
super.merge(attr_code({
summary: node["summary"],
style: "mso-table-lspace:15.0cm;margin-left:423.0pt;"\
"mso-table-rspace:15.0cm;margin-right:423.0pt;"\
"mso-table-anchor-horizontal:column;"\
"mso-table-overlap:never;border-spacing:0;border-width:1px;"
}))
end
def table_parse(node, out)
@in_table = true
table_title_parse(node, out)
out.div **{ align: "center", class: "table_container" } do |div|
div.table **make_table_attr(node) do |t|
thead_parse(node, t)
tbody_parse(node, t)
tfoot_parse(node, t)
(dl = node.at(ns("./dl"))) && parse(dl, out)
node.xpath(ns("./note")).each { |n| parse(n, out) }
end
end
@in_table = false
end
end
end