minidown 2.1.1

Sign up to get free protection for your applications and to get access to all the features.
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