Sha256: 6c24b37bb53cee1146a1f7332b6f47ebfbf18ee378f0e05afca9cbdf71298948
Contents?: true
Size: 1.89 KB
Versions: 9
Compression:
Stored size: 1.89 KB
Contents
module RailsConnector module FopOnRails module Document module Tables def self.repair(xml) xml.elements.each '//table' do |table| add_missing_cols(table) add_col_metadata(table) end end private def self.add_missing_cols(table) @@max = 0 trs = table.get_elements('./tr | ./tbody/tr | ./thead/tr | ./tfoot/tr') trs.each do |tr| n = 0 tr.each_element('./td | ./th') do |elem| colspan = elem.attributes['colspan'].to_i if colspan > 0 n += colspan else n += 1 elem.delete_attribute 'colspan' end end @@max = n if n > @@max end trs.each do |tr| n = @@max - tr.get_elements('./td | ./th').size tr.each_element('./td | ./th') do |elem| colspan = elem.attributes['colspan'].to_i n -= colspan if colspan > 0 end n.times do tr.add_element 'td' end end end def self.add_col_metadata(table) default_width = 480 cols = table.get_elements('./col | ./colgroup/col') vals, total, not_nulls = [], 0, 0 [@@max, cols.size].min.times do |i| width = cols[i].attributes['width'].to_i if width > 0 vals[i] = width not_nulls += 1 end total += width end total = default_width unless total > 0 @@max.times do |i| if val = vals[i] vals[i] = (val * default_width * not_nulls) / (total * @@max) else vals[i] = default_width / @@max end end table.attributes['cols'] = vals * "\s" end end end end end
Version data entries
9 entries across 9 versions & 1 rubygems