Sha256: 5adafd47e9eaef9a32ace0b5e0f558976c48a1f3bb46503888cfc0bdd03839e4

Contents?: true

Size: 1.91 KB

Versions: 21

Compression:

Stored size: 1.91 KB

Contents

module RailsConnector
  module FopOnRails
    module Document # :nodoc: all
      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

21 entries across 21 versions & 1 rubygems

Version Path
infopark_rails_connector-6.8.0.210.ed204b0 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.110.6570b45 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.72.d18d096 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.23.da7f96b lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.16.def5e85 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.15.a24f5ff lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.891.647580e lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.889.d503e42 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.883.f5f063b lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.884.4bd86e6 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.869.9609b39 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.856.8c0fec5 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.809.bdfa8c3 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.785.05d4af9 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.744.99f67fc lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.720.44fbabd lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.713.e5c3150 lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.681.7c84f4a lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.663.ceecdee lib/rails_connector/fop_on_rails/document/tables.rb
infopark_rails_connector-6.8.0.beta.200.650.7c93155 lib/rails_connector/fop_on_rails/document/tables.rb