mdless 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 18a843ef78c0e58862a1f83169447bbd48be24bb
4
- data.tar.gz: e54b45a682cbcb09b5640666c6f1bd9640093db8
3
+ metadata.gz: 4fcccb4da5a1692b5452b814fd4741b7ab95b2e9
4
+ data.tar.gz: 6225634e845e46cfd9bebd9f0726454d379bce6a
5
5
  SHA512:
6
- metadata.gz: cadebc38a068ff7681852c5208d972fafe4d623bf2015ffce03171b85ec453440c27e55cc809f38e6407da6bbf61675118341bc3edef515fe31fc25649057e2b
7
- data.tar.gz: a0715246a5e6fe0788866a409bdad42b56270828f6ae754d0147443701b10709db7126eb63247ab48766ffdb98a642924c2c1b9b43d287a544b46a98c8fe48b8
6
+ metadata.gz: be0b61b2ef4802e06dc425acd67bc7280207880ffc3b87676631e21f4575023d6c588b3438e6640e7cb633f7b0475520f4d3439d8c5fe56b2e9cba42517474b5
7
+ data.tar.gz: 2f1be952a4c5f84a54b1a7cb9170095522363c1cc4e91b2168298c71f4db3c5129d8d90c99086ae5f4b1af77082931cb55c7db945ddef18dd1146f520b3c83e2
@@ -113,6 +113,7 @@ module CLIMarkdown
113
113
  rescue
114
114
  input = IO.read(file)
115
115
  end
116
+ input.gsub!(/\r?\n/,"\n")
116
117
  if @options[:list]
117
118
  list_headers(input)
118
119
  else
@@ -127,6 +128,7 @@ module CLIMarkdown
127
128
  rescue
128
129
  input = STDIN.read
129
130
  end
131
+ input.gsub!(/\r?\n/,"\n")
130
132
  if @options[:list]
131
133
  list_headers(input)
132
134
  else
@@ -206,7 +208,7 @@ module CLIMarkdown
206
208
  }.join("\n")
207
209
  end
208
210
 
209
- def table_cleanup(input)
211
+ def cleanup_tables(input)
210
212
  in_table = false
211
213
  header_row = false
212
214
  all_content = []
@@ -224,7 +226,7 @@ module CLIMarkdown
224
226
  orig_table.push(line)
225
227
  else
226
228
  if in_table
227
- if this_table.length > 3
229
+ if this_table.length > 2
228
230
  # if there's no header row, add one, cleanup requires it
229
231
  unless header_row
230
232
  cells = this_table[0].sub(/^\|/,'').scan(/.*?\|/).length
@@ -232,14 +234,15 @@ module CLIMarkdown
232
234
  this_table.insert(1, cell_row)
233
235
  end
234
236
 
235
- table = this_table.join("\n")
237
+ table = this_table.join("\n").strip
236
238
  begin
237
- res = clean_table(table)
239
+ formatted = MDTableFormatter.new(table)
240
+ res = formatted.to_md
238
241
  res = color_table(res)
239
242
  rescue
240
243
  res = orig_table.join("\n")
241
244
  end
242
- all_content.push("\n" + res)
245
+ all_content.push(res)
243
246
  else
244
247
  all_content.push(orig_table.join("\n"))
245
248
  end
@@ -255,27 +258,7 @@ module CLIMarkdown
255
258
  end
256
259
 
257
260
  def clean_table(input)
258
- dir = File.dirname(__FILE__)
259
- lib = File.expand_path(dir + '/../../lib')
260
- script = File.join(lib, 'helpers/formattables.py')
261
261
 
262
- if File.exists?(script) and File.executable?(script)
263
- begin
264
-
265
- res, s = Open3.capture2(script, :stdin_data=>input.strip)
266
-
267
- if s.success?
268
- res
269
- else
270
- input
271
- end
272
- rescue => e
273
- @log.error(e)
274
- input
275
- end
276
- else
277
- input
278
- end
279
262
  end
280
263
 
281
264
  def clean_markers(input)
@@ -738,7 +721,7 @@ module CLIMarkdown
738
721
  Process.exit
739
722
  end
740
723
 
741
- out = table_cleanup(out)
724
+ out = cleanup_tables(out)
742
725
  out = clean_markers(out)
743
726
  out = out.gsub(/\n+{2,}/m,"\n\n") + "\n#{xc}\n\n"
744
727
 
@@ -0,0 +1,130 @@
1
+ module CLIMarkdown
2
+ class MDTableFormatter
3
+
4
+ def initialize(string)
5
+ @doc = string
6
+ @format_row = []
7
+ parse
8
+ end
9
+
10
+ def parse
11
+ @table = []
12
+ format = []
13
+ cols = 0
14
+ rows = @doc.split(/\r?\n/)
15
+ rows.each do |row|
16
+ row.strip!
17
+ row.sub!(/^\s*\|?/,'').sub!(/\|?\s*$/,'')
18
+ row_array = row.split(/\|/)
19
+ row_array.map! { |cell| cell.strip }
20
+ if row =~ /^[\|:\- ]+$/
21
+ format = row_array
22
+ else
23
+ @table.push row_array
24
+ end
25
+ cols = row_array.length if row_array.length > cols
26
+ end
27
+
28
+ format.each_with_index {|cell, i|
29
+ f = 'left'
30
+ if cell =~ /^:.*?:$/
31
+ f = 'center'
32
+ elsif cell =~ /:$/
33
+ f = 'right'
34
+ else
35
+ f = 'just'
36
+ end
37
+ @format_row.push(f)
38
+ }
39
+
40
+ if @format_row.length < cols
41
+ (cols - @format_row.length).times do
42
+ @format_row.push('left')
43
+ end
44
+ end
45
+
46
+ @table.map! do |row|
47
+ if row.length < cols
48
+ (cols - row.length).times do
49
+ row.push("")
50
+ end
51
+ end
52
+ row
53
+ end
54
+ @table
55
+ end
56
+
57
+ def table
58
+ @table ||= parse
59
+ end
60
+
61
+ def column_width(i)
62
+ @widths ||= column_widths
63
+ @widths[i]
64
+ end
65
+
66
+ def column_widths
67
+ @widths = []
68
+ @format_row.length.times do
69
+ @widths.push(0)
70
+ end
71
+
72
+ table.each do |row|
73
+ @format_row.each_with_index do |cell, i|
74
+ length = row[i].strip.length
75
+ @widths[i] = length if length > @widths[i]
76
+ end
77
+ end
78
+
79
+ @widths
80
+ end
81
+
82
+ def pad(string,type,length)
83
+ string.strip!
84
+ if type == 'center'
85
+ string.center(length, ' ')
86
+ elsif type == 'right'
87
+ string.rjust(length, ' ')
88
+ elsif type == 'left'
89
+ string.ljust(length, ' ')
90
+ else
91
+ string.ljust(length, ' ')
92
+ end
93
+ end
94
+
95
+ def separator(length, alignment)
96
+ out = "".ljust(length,'-')
97
+ case alignment
98
+ when 'left'
99
+ out = ':' + out + '-'
100
+ when 'right'
101
+ out = '-' + out + ':'
102
+ when 'center'
103
+ out = ":#{out}:"
104
+ else
105
+ out = "-#{out}-"
106
+ end
107
+ out
108
+ end
109
+
110
+ def header_separator_row
111
+ output = []
112
+ @format_row.each_with_index do |column, i|
113
+ output.push separator(column_width(i), column)
114
+ end
115
+ "|#{output.join('|')}|"
116
+ end
117
+
118
+ def to_md
119
+ output = []
120
+ t = table.clone
121
+
122
+ t.each_with_index do |row, index|
123
+ row.map!.with_index { |cell, i| cell = pad(cell, @format_row[i], column_width(i)) }
124
+ output.push("| #{row.join(' | ').lstrip} |")
125
+ end
126
+ output.insert(1, header_separator_row)
127
+ output.join("\n")
128
+ end
129
+ end
130
+ end
@@ -1,3 +1,3 @@
1
1
  module CLIMarkdown
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
data/lib/mdless.rb CHANGED
@@ -5,6 +5,7 @@ require 'fileutils'
5
5
  require 'logger'
6
6
  require 'mdless/version.rb'
7
7
  require 'mdless/colors'
8
+ require 'mdless/tables'
8
9
  require 'mdless/converter'
9
10
 
10
11
  module CLIMarkdown
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mdless
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Terpstra
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-20 00:00:00.000000000 Z
11
+ date: 2015-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -69,10 +69,10 @@ extra_rdoc_files:
69
69
  files:
70
70
  - README.md
71
71
  - bin/mdless
72
- - lib/helpers/formattables.py
73
72
  - lib/mdless.rb
74
73
  - lib/mdless/colors.rb
75
74
  - lib/mdless/converter.rb
75
+ - lib/mdless/tables.rb
76
76
  - lib/mdless/version.rb
77
77
  homepage: http://brettterpstra.com/project/mdless/
78
78
  licenses:
@@ -1,105 +0,0 @@
1
- #!/usr/bin/python
2
-
3
- import sys
4
- import re
5
-
6
- def just(string, type, n):
7
- "Justify a string to length n according to type."
8
-
9
- if type == '::':
10
- return string.center(n)
11
- elif type == '-:':
12
- return string.rjust(n)
13
- elif type == ':-':
14
- return string.ljust(n)
15
- else:
16
- return string
17
-
18
-
19
- def normtable(text):
20
- "Aligns the vertical bars in a text table."
21
-
22
- # Start by turning the text into a list of lines.
23
- lines = text.splitlines()
24
- rows = len(lines)
25
-
26
- # Figure out the cell formatting.
27
- # First, find the separator line.
28
- for i in range(rows):
29
- if set(lines[i]).issubset('|:.-'):
30
- formatline = lines[i]
31
- formatrow = i
32
- break
33
-
34
- # Delete the separator line from the content.
35
- del lines[formatrow]
36
-
37
- # Determine how each column is to be justified.
38
- formatline = formatline.strip(' ')
39
- if formatline[0] == '|': formatline = formatline[1:]
40
- if formatline[-1] == '|': formatline = formatline[:-1]
41
- fstrings = formatline.split('|')
42
- justify = []
43
- for cell in fstrings:
44
- ends = cell[0] + cell[-1]
45
- if ends == '::':
46
- justify.append('::')
47
- elif ends == '-:':
48
- justify.append('-:')
49
- else:
50
- justify.append(':-')
51
-
52
- # Assume the number of columns in the separator line is the number
53
- # for the entire table.
54
- columns = len(justify)
55
-
56
- # Extract the content into a matrix.
57
- content = []
58
- for line in lines:
59
- line = line.strip(' ')
60
- if line[0] == '|': line = line[1:]
61
- if line[-1] == '|': line = line[:-1]
62
- cells = line.split('|')
63
- # Put exactly one space at each end as "bumpers."
64
- linecontent = [ ' ' + x.strip() + ' ' for x in cells ]
65
- content.append(linecontent)
66
-
67
- # Append cells to rows that don't have enough.
68
- rows = len(content)
69
- for i in range(rows):
70
- while len(content[i]) < columns:
71
- content[i].append('')
72
-
73
- # Get the width of the content in each column. The minimum width will
74
- # be 2, because that's the shortest length of a formatting string and
75
- # because that matches an empty column with "bumper" spaces.
76
- widths = [2] * columns
77
- for row in content:
78
- for i in range(columns):
79
- widths[i] = max(len(row[i]), widths[i])
80
-
81
- # Add whitespace to make all the columns the same width and
82
- formatted = []
83
- for row in content:
84
- formatted.append('|' + '|'.join([ just(s, t, n) for (s, t, n) in zip(row, justify, widths) ]) + '|')
85
-
86
- # Recreate the format line with the appropriate column widths.
87
- formatline = '|' + '|'.join([ s[0] + '-'*(n-2) + s[-1] for (s, n) in zip(justify, widths) ]) + '|'
88
-
89
- # Insert the formatline back into the table.
90
- formatted.insert(formatrow, formatline)
91
-
92
- # Return the formatted table.
93
- return '\n'.join(formatted)
94
-
95
- space_cleaner = r'''(?s)[ \t]*(?P<value>[\|:])[ \t]*'''
96
-
97
- def whitespaceProcess(group_object):
98
- return group_object.group('value')
99
-
100
-
101
- # Read the input, process, and print.
102
- unformatted = sys.stdin.read()
103
- unformatted = re.sub(space_cleaner, whitespaceProcess, unformatted, flags=re.DOTALL)
104
-
105
- print normtable(unformatted)