def _tableish(html, row_selector, column_selectors)
doc = Nokogiri::HTML(html)
spans = nil
max_cols = 0
rows = doc.search(row_selector).map do |row|
cells = case(column_selectors)
when String
row.search(column_selectors)
when Proc
column_selectors.call(row)
end
max_cols = [max_cols, cells.length].max
spans ||= Array.new(max_cols, 1)
cell_index = 0
cells = (0...spans.length).inject([]) do |array, n|
span = spans[n]
cell = if span > 1
row_span, col_span = 1, 1
nil
else
cell = cells[cell_index]
row_span, col_span = _parse_spans(cell)
if col_span > 1
((n + 1)...(n + col_span)).each do |m|
spans[m] = row_span + 1
end
end
cell_index +=1
cell
end
spans[n] = row_span > 1 ? row_span : ([span - 1, 1].max)
array << case cell
when String then cell.strip
when nil then ''
else cell.text.strip
end
array
end
cells
end
end