minidown 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/.travis.yml +9 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +73 -0
  7. data/Rakefile +4 -0
  8. data/bin/minidown +33 -0
  9. data/lib/minidown.rb +13 -0
  10. data/lib/minidown/document.rb +142 -0
  11. data/lib/minidown/element.rb +40 -0
  12. data/lib/minidown/elements.rb +15 -0
  13. data/lib/minidown/elements/block_element.rb +37 -0
  14. data/lib/minidown/elements/code_block_element.rb +44 -0
  15. data/lib/minidown/elements/dividing_line_element.rb +11 -0
  16. data/lib/minidown/elements/html_element.rb +22 -0
  17. data/lib/minidown/elements/indent_code_element.rb +23 -0
  18. data/lib/minidown/elements/line_element.rb +28 -0
  19. data/lib/minidown/elements/list_element.rb +36 -0
  20. data/lib/minidown/elements/list_group_element.rb +87 -0
  21. data/lib/minidown/elements/order_list_element.rb +20 -0
  22. data/lib/minidown/elements/paragraph_element.rb +56 -0
  23. data/lib/minidown/elements/raw_html_element.rb +11 -0
  24. data/lib/minidown/elements/table_element.rb +80 -0
  25. data/lib/minidown/elements/text_element.rb +198 -0
  26. data/lib/minidown/elements/unorder_list_element.rb +31 -0
  27. data/lib/minidown/html_helper.rb +18 -0
  28. data/lib/minidown/parser.rb +19 -0
  29. data/lib/minidown/utils.rb +28 -0
  30. data/lib/minidown/version.rb +3 -0
  31. data/minidown.gemspec +26 -0
  32. data/spec/blank_line_spec.rb +21 -0
  33. data/spec/code_block_spec.rb +182 -0
  34. data/spec/dividing_line_spec.rb +35 -0
  35. data/spec/h1_and_h2_spec.rb +55 -0
  36. data/spec/indent_block_spec.rb +17 -0
  37. data/spec/li_spec.rb +354 -0
  38. data/spec/minidown_spec.rb +12 -0
  39. data/spec/paragraph_spec.rb +17 -0
  40. data/spec/raw_html_spec.rb +43 -0
  41. data/spec/spec_helper.rb +2 -0
  42. data/spec/start_with_gt_spec.rb +70 -0
  43. data/spec/start_with_shape_spec.rb +42 -0
  44. data/spec/table_spec.rb +63 -0
  45. data/spec/task_list_spec.rb +18 -0
  46. data/spec/text_element_spec.rb +317 -0
  47. metadata +175 -0
@@ -0,0 +1,354 @@
1
+ require 'spec_helper'
2
+
3
+ describe Minidown do
4
+ describe 'ul' do
5
+ it 'should basic parse correct' do
6
+ %w{* + -}.each do |s|
7
+ str = "#{s} ul"
8
+ Minidown.render(str).should == '<ul><li>ul</li></ul>'
9
+ str = " #{s} ul"
10
+ Minidown.render(str).should == '<ul><li>ul</li></ul>'
11
+ str = "#{s} li1\n#{s} li2\n#{s} li3"
12
+ Minidown.render(str).should == '<ul><li>li1</li><li>li2</li><li>li3</li></ul>'
13
+ end
14
+ end
15
+
16
+ it 'should not parse' do
17
+ %w{* + -}.each do |s|
18
+ str = "#{s}ul"
19
+ Minidown.render(str).should == "<p>#{str}</p>"
20
+ end
21
+ end
22
+
23
+ it 'escape' do
24
+ %w{* + -}.each do |s|
25
+ str = "\\#{s} li"
26
+ Minidown.render(str).should == "<p>#{str.gsub("\\", '')}</p>"
27
+ str = "#{s}\\ li"
28
+ Minidown.render(str).should == "<p>#{str}</p>"
29
+ end
30
+ end
31
+
32
+ it 'auto new line' do
33
+ str = '+ li1
34
+ newline
35
+ - li2
36
+ newline'
37
+ Minidown.render(str).should == "<ul><li><p>li1</p>\n<p>newline</p></li><li>li2\nnewline</li></ul>"
38
+ end
39
+
40
+ it '<p> in li' do
41
+ str = '* li1
42
+ newline
43
+
44
+ * li2
45
+ newline'
46
+ Minidown.render(str).should == "<ul><li><p>li1<br>newline</p></li><li><p>li2<br>newline</p></li></ul>"
47
+ end
48
+
49
+ it 'should parse' do
50
+ str = 'line
51
+ * li2'
52
+ Minidown.render(str).should == "<p>line</p><ul><li>li2</li></ul>"
53
+ end
54
+
55
+ it 'two ul' do
56
+ str = '- li1
57
+ newline
58
+
59
+
60
+ * li2
61
+ newline'
62
+ Minidown.render(str).should == '<ul><li><p>li1<br>newline</p></li><li><p>li2<br>newline</p></li></ul>'
63
+ end
64
+
65
+ it 'can work with indent' do
66
+ str =<<HERE
67
+ * here a line
68
+ noindent
69
+ HERE
70
+ Minidown.render(str).should == "<ul><li>here a line\nnoindent</li></ul>"
71
+
72
+ str =<<HERE
73
+ * here a line
74
+ noindent
75
+ HERE
76
+ Minidown.render(str).should == "<ul><li><p>here a line</p>\n<p>noindent</p></li></ul>"
77
+ end
78
+
79
+ it 'can work with block' do
80
+ str =<<HERE
81
+ * A list item with a blockquote:
82
+
83
+ > This is a blockquote
84
+ > inside a list item.
85
+ HERE
86
+ Minidown.render(str).should == "<ul><li>A list item with a blockquote:\n<blockquote><p>This is a blockquote</p><p>inside a list item.</p></blockquote></li></ul>"
87
+ end
88
+
89
+ it 'can not work with block without indent' do
90
+ str =<<HERE
91
+ * A list item with a blockquote:
92
+
93
+ > This is a blockquote
94
+ > inside a list item.
95
+ HERE
96
+ Minidown.render(str).should == "<ul><li>A list item with a blockquote:</li></ul><blockquote><p>This is a blockquote</p><p>inside a list item.</p></blockquote>"
97
+ end
98
+
99
+ it 'newline' do
100
+ str =<<HERE
101
+ * A list
102
+
103
+ Newline
104
+ HERE
105
+ Minidown.render(str).should == "<ul><li>A list</li></ul><p>Newline</p>"
106
+ end
107
+
108
+ it 'should parse correct' do
109
+ str = '* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
110
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
111
+ viverra nec, fringilla in, laoreet vitae, risus.
112
+ * Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
113
+ Suspendisse id sem consectetuer libero luctus adipiscing.
114
+ ---
115
+ Hi.'
116
+ Minidown.render(str).should == "<ul><li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\n<p>Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,</p>\n<p>viverra nec, fringilla in, laoreet vitae, risus.</p></li><li><p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit.</p>\n<p>Suspendisse id sem consectetuer libero luctus adipiscing.</p></li></ul><hr><p>Hi.</p>"
117
+ end
118
+
119
+ it 'list with indent' do
120
+ str ='* first
121
+ start with
122
+ #and indent'
123
+ Minidown.render(str).should == "<ul><li>first\nstart with</li></ul><h1>and indent</h1>"
124
+ end
125
+
126
+ it 'nested should parse correct' do
127
+ str = '* 1
128
+ * 2
129
+ * 3
130
+ * 4
131
+ * 5
132
+ * 6
133
+ * 7'
134
+ Minidown.render(str).should == '<ul><li>1
135
+ <ul><li>2 </li><li>3</li></ul></li><li>4
136
+ <ul><li>5</li><li>6</li><li>7</li></ul></li></ul>'
137
+ end
138
+ end
139
+
140
+ describe 'ol' do
141
+ before :each do
142
+ @random_nums = 5.times.map{rand 42..4242}
143
+ end
144
+
145
+ it 'should basic parse correct' do
146
+ 5.times.map{(42..4242).to_a.sample 3}.each do |n, n2, n3|
147
+ str = "#{n}. ol"
148
+ Minidown.render(str).should == '<ol><li>ol</li></ol>'
149
+ str = "#{n}. li1\n#{n2}. li2\n#{n3}. li3"
150
+ Minidown.render(str).should == '<ol><li>li1</li><li>li2</li><li>li3</li></ol>'
151
+ end
152
+ end
153
+
154
+ it 'should not parse' do
155
+ @random_nums.each do |s|
156
+ str = "#{s}ol"
157
+ Minidown.render(str).should == "<p>#{str}</p>"
158
+ str = " #{s} ol"
159
+ Minidown.render(str).should == "<p>#{str}</p>"
160
+ end
161
+ end
162
+
163
+ it 'escape' do
164
+ @random_nums.each do |s|
165
+ str = "\\#{s}. li"
166
+ Minidown.render(str).should == "<p>#{str}</p>"
167
+ str = "#{s}.\\ li"
168
+ Minidown.render(str).should == "<p>#{str}</p>"
169
+ str = "#{s}\\. li"
170
+ Minidown.render(str).should == "<p>#{s}. li</p>"
171
+ end
172
+ end
173
+
174
+ it 'auto new line' do
175
+ str = '1. li1
176
+ newline
177
+ 2. li2
178
+ newline'
179
+ Minidown.render(str).should == "<ol><li><p>li1</p>\n<p>newline</p></li><li>li2\nnewline</li></ol>"
180
+ end
181
+
182
+ it '<p> in li' do
183
+ str = '1. li1
184
+ newline
185
+
186
+ 2. li2
187
+ newline'
188
+ Minidown.render(str).should == '<ol><li><p>li1<br>newline</p></li><li><p>li2<br>newline</p></li></ol>'
189
+ end
190
+
191
+ it 'should not parse' do
192
+ str = 'line
193
+ 1. li2'
194
+ Minidown.render(str).should == "<p>line</p><ol><li>li2</li></ol>"
195
+ end
196
+
197
+ it 'two line' do
198
+ str = '1. li1
199
+ newline
200
+
201
+
202
+ 2. li2
203
+ newline'
204
+ Minidown.render(str).should == '<ol><li><p>li1<br>newline</p></li><li><p>li2<br>newline</p></li></ol>'
205
+ end
206
+
207
+ it 'can work with indent' do
208
+ str =<<HERE
209
+ 1. here a line
210
+ noindent
211
+ HERE
212
+ Minidown.render(str).should == "<ol><li>here a line\nnoindent</li></ol>"
213
+
214
+ str =<<HERE
215
+ 1. here a line
216
+ noindent
217
+ HERE
218
+ Minidown.render(str).should == "<ol><li><p>here a line</p>\n<p>noindent</p></li></ol>"
219
+ end
220
+
221
+ it 'can work with block' do
222
+ str =<<HERE
223
+ 1. A list item with a blockquote:
224
+
225
+ > This is a blockquote
226
+ > inside a list item.
227
+ HERE
228
+ Minidown.render(str).should == "<ol><li>A list item with a blockquote:\n<blockquote><p>This is a blockquote</p><p>inside a list item.</p></blockquote></li></ol>"
229
+ end
230
+
231
+ it 'can not work with block without indent' do
232
+ str =<<HERE
233
+ 1. A list item with a blockquote:
234
+
235
+ > This is a blockquote
236
+ > inside a list item.
237
+ HERE
238
+ Minidown.render(str).should == "<ol><li>A list item with a blockquote:</li></ol><blockquote><p>This is a blockquote</p><p>inside a list item.</p></blockquote>"
239
+ end
240
+
241
+ it 'newline' do
242
+ str =<<HERE
243
+ 1. A list
244
+
245
+ Newline
246
+ HERE
247
+ Minidown.render(str).should == "<ol><li>A list</li></ol><p>Newline</p>"
248
+ end
249
+
250
+ it 'should parse correct' do
251
+ str = '1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
252
+ Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
253
+ viverra nec, fringilla in, laoreet vitae, risus.
254
+ 2. Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
255
+ Suspendisse id sem consectetuer libero luctus adipiscing.
256
+ ---
257
+ Hi.'
258
+ Minidown.render(str).should == "<ol><li><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>\n<p>Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,</p>\n<p>viverra nec, fringilla in, laoreet vitae, risus.</p></li><li><p>Donec sit amet nisl. Aliquam semper ipsum sit amet velit.</p>\n<p>Suspendisse id sem consectetuer libero luctus adipiscing.</p></li></ol><hr><p>Hi.</p>"
259
+ end
260
+
261
+ it 'list with indent' do
262
+ str ='1. first
263
+ start with
264
+ #and indent'
265
+ Minidown.render(str).should == "<ol><li>first\nstart with</li></ol><h1>and indent</h1>"
266
+ end
267
+
268
+ it 'nested should parse correct' do
269
+ str = '1. 1
270
+ 2. 2
271
+ 3. 3
272
+ 4. 4
273
+ 5. 5
274
+ 6. 6
275
+ 7. 7'
276
+ Minidown.render(str).should == '<ol><li>1
277
+ <ol><li>2 </li><li>3</li></ol></li><li>4
278
+ <ol><li>5</li><li>6</li><li>7</li></ol></li></ol>'
279
+ end
280
+ end
281
+
282
+ describe 'other case' do
283
+ it 'should parse nest ul' do
284
+ str = '+ ul 1
285
+ + ul 2
286
+ + ul 3
287
+ + ul 4
288
+ + ul 5
289
+ + ul 6'
290
+ Minidown.render(str).should == '<ul><li>ul 1</li><li>ul 2
291
+ <ul><li>ul 3</li><li>ul 4
292
+ <ul><li>ul 5</li></ul></li><li>ul 6</li></ul></li></ul>'
293
+ end
294
+
295
+ it 'should parse nest ol' do
296
+ str = '1. ol 1
297
+ 2. ol 2
298
+ 1. ol 3
299
+ 123. ol 4
300
+ 2. ol 5
301
+ 3. ol 6'
302
+ Minidown.render(str).should == '<ol><li>ol 1</li><li>ol 2
303
+ <ol><li>ol 3</li><li>ol 4
304
+ <ol><li>ol 5</li></ol></li><li>ol 6</li></ol></li></ol>'
305
+ end
306
+
307
+ it 'should parse correct' do
308
+ str = '+ ul 1
309
+ + ul 2
310
+ + ul 3
311
+ + ul 4
312
+ + ul 5
313
+ + ul 6
314
+
315
+ 1. ul a
316
+ 1. ul b
317
+ 1. ul c
318
+ 1. ul d'
319
+ Minidown.render(str).should == '<ul><li>ul 1</li><li>ul 2
320
+ <ul><li>ul 3</li><li>ul 4
321
+ <ul><li>ul 5</li></ul></li><li>ul 6</li></ul></li></ul><ol><li>ul a</li><li>ul b</li><li>ul c</li><li>ul d</li></ol>'
322
+ end
323
+
324
+ it 'mixed list should parsed correct' do
325
+ str = '* ul1
326
+ 1. ol
327
+ 2. ol
328
+ 3. ol
329
+
330
+ * ul2
331
+ * ul3
332
+ 1. ol
333
+ 2. ol
334
+ 3. ol
335
+ 4. ol
336
+ 5. ol
337
+
338
+ + ul4
339
+ + ul5
340
+ 1. ol
341
+ 2. ol
342
+ 3. ol'
343
+ Minidown.render(str).should == '<ul><li><p>ul1<br><ol><li>ol</li><li>ol</li><li>ol</li></ol></p></li><li><p>ul2</p></li><li><p>ul3<br><ol><li>ol</li><li>ol</li><li>ol</li><li>ol</li><li>ol</li></ol></p></li><li><p>ul4</p></li><li>ul5
344
+ <ol><li>ol</li><li>ol</li><li>ol</li></ol></li></ul>'
345
+ end
346
+
347
+ it 'list within block' do
348
+ str = '> block with list
349
+ - list within block
350
+ - list within block'
351
+ Minidown.render(str).should == '<blockquote><p>block with list</p><ul><li>list within block</li><li>list within block</li></ul></blockquote>'
352
+ end
353
+ end
354
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Minidown do
4
+ it 'Minidown.render should == Parser#render' do
5
+ Minidown.render("hello").should == Minidown::Parser.new.render("hello")
6
+ end
7
+
8
+ it 'allow options' do
9
+ options = {}
10
+ Minidown.render("hello", options).should == Minidown::Parser.new(options).render("hello")
11
+ end
12
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Minidown do
4
+ describe 'paragraph' do
5
+ it 'should correct' do
6
+ str = 'line1
7
+ line2
8
+
9
+ new paragraph
10
+ some space
11
+ same paragraph
12
+
13
+ new p'
14
+ Minidown.render(str).should == '<p>line1<br>line2</p><p>new paragraph<br> some space<br>same paragraph</p><p>new p</p>'
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe Minidown do
4
+ describe 'raw html spec' do
5
+ it 'should render correctly' do
6
+ Minidown.render('<a></a>').should == "<p><a></a></p>"
7
+ end
8
+
9
+ it 'should render mutilple line well' do
10
+ str = '<table>
11
+ <tr>
12
+ <td>first</td>
13
+ </tr>
14
+ <tr>
15
+ <td>second</td>
16
+ </tr>
17
+ </table>'
18
+ Minidown.render(str).should == "<p><table><tr><td>first</td></tr><tr><td>second</td></tr></table></p>"
19
+ end
20
+
21
+ it 'can be escaped' do
22
+ Minidown.render("\\<a\\>\\</a\\>\\\\<br\\\\>").should == "<p>&lt;a&gt;&lt;/a&gt;\\<br\\></p>"
23
+ end
24
+
25
+ it 'should allow mix with markdown' do
26
+ str = 'Table for two
27
+ -------------
28
+
29
+ <table>
30
+ <tr>
31
+ <th>ID</th><th>Name</th><th>Rank</th>
32
+ </tr>
33
+ <tr>
34
+ <td>1</td><td>Tom Preston-Werner</td><td>Awesome</td>
35
+ </tr>
36
+ <tr>
37
+ <td>2</td><td>Albert Einstein</td><td>Nearly as awesome</td>
38
+ </tr>
39
+ </table>'
40
+ Minidown.render(str).should == "<h2>Table for two</h2><p><table><tr><th>ID</th><th>Name</th><th>Rank</th></tr><tr><td>1</td><td>Tom Preston-Werner</td><td>Awesome</td></tr><tr><td>2</td><td>Albert Einstein</td><td>Nearly as awesome</td></tr></table></p>"
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,2 @@
1
+ require 'minidown'
2
+ require 'pry'
@@ -0,0 +1,70 @@
1
+ require 'spec_helper'
2
+
3
+ describe Minidown do
4
+ describe 'start with <' do
5
+ it 'should parse as blockquote' do
6
+ [">block", "> block", "> block", "> block"].each do |str|
7
+ Minidown.render(str).should == "<blockquote><p>#{str[1..-1].strip}</p></blockquote>"
8
+ end
9
+ end
10
+
11
+ it 'should parse correct' do
12
+ str =<<HERE
13
+ > here block
14
+ > here too
15
+ HERE
16
+ Minidown.render(str).should == '<blockquote><p>here block</p><p>here too</p></blockquote>'
17
+ end
18
+
19
+ it 'should parse region' do
20
+ str =<<HERE
21
+ > here block
22
+ here too
23
+ yes
24
+ all is block
25
+ bbbbbbbbb
26
+
27
+ newline
28
+ HERE
29
+ Minidown.render(str).should == '<blockquote><p>here block<br>here too<br> yes<br> all is block<br>bbbbbbbbb</p></blockquote><p>newline</p>'
30
+ end
31
+
32
+ it 'should parse nest' do
33
+ str =<<HERE
34
+ > here block
35
+ here too
36
+ > yes
37
+ all is block
38
+ >> two level
39
+ two too
40
+ > still level two
41
+ still in block
42
+
43
+ newline
44
+ HERE
45
+ Minidown.render(str).should == '<blockquote><p>here block<br> here too<br>yes<br> all is block</p><blockquote><p>two level<br>two too<br>still level two<br>still in block</p></blockquote></blockquote><p>newline</p>'
46
+ end
47
+ end
48
+
49
+ describe 'can use other syntax' do
50
+ it 'use with #' do
51
+ str = '> ## here h2'
52
+ Minidown.render(str).should == '<blockquote><h2>here h2</h2></blockquote>'
53
+ end
54
+
55
+ it 'should render mutil <p>' do
56
+ str = '>line1
57
+ line2
58
+ ###h3 ###
59
+ another p'
60
+ Minidown.render(str).should == '<blockquote><p>line1<br>line2</p><h3>h3</h3><p>another p</p></blockquote>'
61
+ end
62
+ end
63
+
64
+ describe 'should allow escape' do
65
+ it 'should render correct' do
66
+ str = '>\>block'
67
+ Minidown.render(str).should == '<blockquote><p>&gt;block</p></blockquote>'
68
+ end
69
+ end
70
+ end