Class: CLIMarkdown::MDTableCleanup
- Inherits:
-
Object
- Object
- CLIMarkdown::MDTableCleanup
- Defined in:
- lib/mdless/tables.rb
Constant Summary collapse
- PAD_CHAR =
"\u00A0"
Instance Method Summary collapse
- #column_width(idx) ⇒ Object
- #column_widths ⇒ Object
- #header_separator_row ⇒ Object
-
#initialize(input) ⇒ MDTableCleanup
constructor
A new instance of MDTableCleanup.
- #pad(string, alignment, length) ⇒ Object
- #parse ⇒ Object
- #separator(length, alignment) ⇒ Object
- #table ⇒ Object
- #table_border ⇒ Object
- #to_md ⇒ Object
Constructor Details
#initialize(input) ⇒ MDTableCleanup
Returns a new instance of MDTableCleanup.
5 6 7 |
# File 'lib/mdless/tables.rb', line 5 def initialize(input) @string = input end |
Instance Method Details
#column_width(idx) ⇒ Object
62 63 64 65 |
# File 'lib/mdless/tables.rb', line 62 def column_width(idx) @widths ||= column_widths @widths[idx] end |
#column_widths ⇒ Object
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/mdless/tables.rb', line 67 def column_widths @widths = [] @format_row.length.times do @widths.push(0) end table.each do |row| @format_row.each_with_index do |_, i| length = row[i].strip.length @widths[i] = length if length > @widths[i] end end @widths end |
#header_separator_row ⇒ Object
110 111 112 113 114 115 116 |
# File 'lib/mdless/tables.rb', line 110 def header_separator_row output = [] @format_row.each_with_index do |column, i| output.push separator(column_width(i), column) end "|#{output.join('|')}|" end |
#pad(string, alignment, length) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/mdless/tables.rb', line 83 def pad(string, alignment, length) case alignment when :center string.strip.center(length, PAD_CHAR) when :right string.strip.rjust(length, PAD_CHAR) when :left string.strip.ljust(length, PAD_CHAR) else string.strip.ljust(length, PAD_CHAR) end end |
#parse ⇒ Object
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/mdless/tables.rb', line 9 def parse @format_row = [] @table = [] fmt = [] cols = 0 rows = @string.split(/\r?\n/) rows.each do |row| row.strip! row.sub!(/^\s*\|?/,'').sub!(/\|?\s*$/,'') row_array = row.split(/\|/) row_array.map! { |cell| cell.strip } if row =~ /^[\|:\- ]+$/ fmt = row_array else @table.push row_array end cols = row_array.length if row_array.length > cols end fmt.each_with_index do |cell, i| cell.strip! f = case cell when /^:.*?:$/ :center when /[^:]+:$/ :right else :just end @format_row.push(f) end if @format_row.length < cols (cols - @format_row.length).times do @format_row.push(:left) end end @table.map! do |row| if row.length < cols (cols - row.length).times do row.push("") end end row end @table end |
#separator(length, alignment) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/mdless/tables.rb', line 96 def separator(length, alignment) out = ''.ljust(length, '-') case alignment when :left ":#{out}-" when :right "-#{out}:" when :center ":#{out}:" else "-#{out}-" end end |
#table ⇒ Object
58 59 60 |
# File 'lib/mdless/tables.rb', line 58 def table @table ||= parse end |
#table_border ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/mdless/tables.rb', line 118 def table_border output = [] @format_row.each_with_index do |column, i| output.push separator(column_width(i), column) end "+#{output.join('+').gsub(/:/,'-')}+" end |
#to_md ⇒ Object
126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/mdless/tables.rb', line 126 def to_md output = [] t = table.clone t.each do |row| new_row = row.map.with_index { |cell, i| pad(cell, @format_row[i], column_width(i)) }.join(' | ') output.push("| #{new_row} |") end output.insert(1, header_separator_row) output.insert(0, table_border) output.push(table_border) output.join("\n") end |