module Ghostwriter::Writer::TableWriter

Methods for processing tables

Public Instance Methods

add_table_header_underline(table, column_sizes) click to toggle source
# File lib/ghostwriter/writer.rb, line 179
def add_table_header_underline(table, column_sizes)
   table.search('./thead').each do |thead|
      lines         = column_sizes.collect { |len| @table_row * (len + 2) }
      underline_row = "#{ table_corner }#{ lines.join(@table_corner) }#{ @table_corner }"

      thead.replace("#{ thead.inner_html }#{ underline_row }\n")
   end
end
calculate_column_sizes(table) click to toggle source
# File lib/ghostwriter/writer.rb, line 169
def calculate_column_sizes(table)
   column_sizes = table.search('tr').collect do |row|
      row.search('th', 'td').collect do |node|
         node.text.length
      end
   end

   column_sizes.transpose.collect(&:max)
end
replace_table_nodes(row, column_sizes) click to toggle source
# File lib/ghostwriter/writer.rb, line 188
def replace_table_nodes(row, column_sizes)
   row.search('th', 'td').each_with_index do |node, i|
      new_content = node.text.ljust(column_sizes[i] + 1)

      node.replace("#{ @table_column } #{ new_content }")
   end
end
replace_tables(doc) click to toggle source
# File lib/ghostwriter/writer.rb, line 150
def replace_tables(doc)
   doc.css('table').each do |table|
      # remove whitespace between nodes
      table.search('//text()[normalize-space()=""]').remove

      column_sizes = calculate_column_sizes(table)

      table.search('./thead/tr', './tbody/tr', './tr').each do |row|
         replace_table_nodes(row, column_sizes)

         row.replace("#{ row.inner_html }#{ @table_column }\n")
      end

      add_table_header_underline(table, column_sizes)

      table.replace("\n#{ table.inner_html }\n")
   end
end