maruku 0.6.1 → 0.7.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (263) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/MIT-LICENSE.txt +20 -0
  5. data/bin/maruku +153 -152
  6. data/bin/marutex +2 -29
  7. data/data/entities.xml +261 -0
  8. data/docs/math.md +14 -18
  9. data/lib/maruku.rb +65 -77
  10. data/lib/maruku/attributes.rb +109 -214
  11. data/lib/maruku/defaults.rb +45 -67
  12. data/lib/maruku/document.rb +43 -0
  13. data/lib/maruku/element.rb +112 -0
  14. data/lib/maruku/errors.rb +71 -0
  15. data/lib/maruku/ext/div.rb +105 -113
  16. data/lib/maruku/ext/fenced_code.rb +97 -0
  17. data/lib/maruku/ext/math.rb +22 -26
  18. data/lib/maruku/ext/math/elements.rb +20 -26
  19. data/lib/maruku/ext/math/mathml_engines/blahtex.rb +92 -104
  20. data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +33 -26
  21. data/lib/maruku/ext/math/mathml_engines/none.rb +11 -19
  22. data/lib/maruku/ext/math/mathml_engines/ritex.rb +2 -4
  23. data/lib/maruku/ext/math/parsing.rb +107 -113
  24. data/lib/maruku/ext/math/to_html.rb +184 -187
  25. data/lib/maruku/ext/math/to_latex.rb +30 -21
  26. data/lib/maruku/helpers.rb +158 -257
  27. data/lib/maruku/html.rb +254 -0
  28. data/lib/maruku/input/charsource.rb +272 -319
  29. data/lib/maruku/input/extensions.rb +62 -63
  30. data/lib/maruku/input/html_helper.rb +220 -189
  31. data/lib/maruku/input/linesource.rb +90 -110
  32. data/lib/maruku/input/mdline.rb +129 -0
  33. data/lib/maruku/input/parse_block.rb +618 -612
  34. data/lib/maruku/input/parse_doc.rb +145 -215
  35. data/lib/maruku/input/parse_span.rb +658 -0
  36. data/lib/maruku/input/rubypants.rb +200 -128
  37. data/lib/maruku/inspect_element.rb +60 -0
  38. data/lib/maruku/maruku.rb +10 -31
  39. data/lib/maruku/output/entity_table.rb +33 -0
  40. data/lib/maruku/output/s5/fancy.rb +462 -462
  41. data/lib/maruku/output/s5/to_s5.rb +115 -135
  42. data/lib/maruku/output/to_html.rb +898 -983
  43. data/lib/maruku/output/to_latex.rb +561 -560
  44. data/lib/maruku/output/to_markdown.rb +207 -162
  45. data/lib/maruku/output/to_s.rb +11 -52
  46. data/lib/maruku/string_utils.rb +129 -179
  47. data/lib/maruku/toc.rb +185 -196
  48. data/lib/maruku/version.rb +33 -38
  49. data/spec/block_docs/abbrev.md +776 -0
  50. data/{tests/unittest → spec/block_docs}/abbreviations.md +11 -20
  51. data/{tests/unittest → spec/block_docs}/alt.md +2 -14
  52. data/{tests/unittest/pending → spec/block_docs}/amps.md +1 -13
  53. data/{tests/unittest → spec/block_docs}/attributes/att2.md +0 -12
  54. data/{tests/unittest → spec/block_docs}/attributes/att3.md +2 -14
  55. data/{tests/unittest → spec/block_docs}/attributes/attributes.md +12 -16
  56. data/{tests/unittest → spec/block_docs}/attributes/circular.md +0 -12
  57. data/{tests/unittest → spec/block_docs}/attributes/default.md +1 -13
  58. data/{tests/unittest → spec/block_docs}/blank.md +0 -12
  59. data/{tests/unittest → spec/block_docs}/blanks_in_code.md +16 -15
  60. data/{tests/unittest/loss.md → spec/block_docs/bug_def.md} +6 -18
  61. data/{tests/unittest → spec/block_docs}/bug_table.md +3 -15
  62. data/{tests/unittest → spec/block_docs}/code.md +7 -14
  63. data/{tests/unittest → spec/block_docs}/code2.md +4 -14
  64. data/{tests/unittest → spec/block_docs}/code3.md +12 -16
  65. data/{tests/unittest → spec/block_docs}/data_loss.md +2 -14
  66. data/{tests/unittest → spec/block_docs}/divs/div1.md +0 -12
  67. data/{tests/unittest → spec/block_docs}/divs/div2.md +0 -12
  68. data/{tests/unittest → spec/block_docs}/divs/div3_nest.md +3 -15
  69. data/{tests/unittest → spec/block_docs}/easy.md +1 -13
  70. data/spec/block_docs/email.md +29 -0
  71. data/{tests/unittest/pending → spec/block_docs}/empty_cells.md +3 -15
  72. data/{tests/unittest → spec/block_docs}/encoding/iso-8859-1.md +1 -14
  73. data/{tests/unittest → spec/block_docs}/encoding/utf-8.md +0 -12
  74. data/{tests/unittest → spec/block_docs}/entities.md +27 -29
  75. data/{tests/unittest/notyet → spec/block_docs}/escape.md +2 -14
  76. data/{tests/unittest → spec/block_docs}/escaping.md +11 -22
  77. data/{tests/unittest → spec/block_docs}/extra_dl.md +2 -13
  78. data/{tests/unittest → spec/block_docs}/extra_header_id.md +14 -20
  79. data/{tests/unittest → spec/block_docs}/extra_table1.md +3 -15
  80. data/spec/block_docs/fenced_code_blocks.md +66 -0
  81. data/spec/block_docs/fenced_code_blocks_highlighted.md +18 -0
  82. data/{tests/unittest → spec/block_docs}/footnotes.md +12 -24
  83. data/spec/block_docs/footnotes2.md +78 -0
  84. data/spec/block_docs/hard.md +25 -0
  85. data/spec/block_docs/header_after_par.md +62 -0
  86. data/{tests/unittest → spec/block_docs}/headers.md +10 -18
  87. data/{tests/unittest → spec/block_docs}/hex_entities.md +7 -18
  88. data/{tests/unittest → spec/block_docs}/hrule.md +5 -12
  89. data/{tests/unittest → spec/block_docs}/html3.md +1 -13
  90. data/{tests/unittest → spec/block_docs}/html4.md +2 -14
  91. data/{tests/unittest → spec/block_docs}/html5.md +2 -14
  92. data/spec/block_docs/html_block_in_para.md +22 -0
  93. data/spec/block_docs/html_inline.md +25 -0
  94. data/spec/block_docs/html_trailing.md +31 -0
  95. data/spec/block_docs/ie.md +62 -0
  96. data/spec/block_docs/iframe.md +29 -0
  97. data/{tests/unittest → spec/block_docs}/images.md +22 -28
  98. data/{tests/unittest → spec/block_docs}/images2.md +7 -17
  99. data/{tests/unittest → spec/block_docs}/inline_html.md +37 -67
  100. data/{tests/unittest → spec/block_docs}/inline_html2.md +1 -13
  101. data/spec/block_docs/inline_html_beginning.md +10 -0
  102. data/spec/block_docs/issue20.md +9 -0
  103. data/spec/block_docs/issue26.md +22 -0
  104. data/spec/block_docs/issue29.md +9 -0
  105. data/spec/block_docs/issue30.md +30 -0
  106. data/spec/block_docs/issue31.md +25 -0
  107. data/spec/block_docs/issue40.md +40 -0
  108. data/spec/block_docs/issue64.md +55 -0
  109. data/spec/block_docs/issue67.md +19 -0
  110. data/spec/block_docs/issue70.md +11 -0
  111. data/spec/block_docs/issue72.md +17 -0
  112. data/spec/block_docs/issue74.md +38 -0
  113. data/spec/block_docs/issue79.md +15 -0
  114. data/spec/block_docs/issue83.md +13 -0
  115. data/spec/block_docs/issue85.md +25 -0
  116. data/spec/block_docs/issue88.md +19 -0
  117. data/spec/block_docs/issue89.md +12 -0
  118. data/spec/block_docs/issue90.md +38 -0
  119. data/{tests/unittest/pending → spec/block_docs}/link.md +21 -18
  120. data/{tests/unittest → spec/block_docs}/links.md +33 -32
  121. data/spec/block_docs/links2.md +21 -0
  122. data/{tests/unittest → spec/block_docs}/list1.md +0 -12
  123. data/{tests/unittest → spec/block_docs}/list12.md +2 -14
  124. data/{tests/unittest → spec/block_docs}/list2.md +2 -14
  125. data/spec/block_docs/list_multipara.md +42 -0
  126. data/{tests/unittest → spec/block_docs}/lists.md +28 -29
  127. data/{tests/unittest → spec/block_docs}/lists10.md +2 -14
  128. data/spec/block_docs/lists11.md +23 -0
  129. data/spec/block_docs/lists12.md +43 -0
  130. data/spec/block_docs/lists13.md +55 -0
  131. data/spec/block_docs/lists14.md +61 -0
  132. data/spec/block_docs/lists15.md +36 -0
  133. data/spec/block_docs/lists6.md +88 -0
  134. data/spec/block_docs/lists7b.md +58 -0
  135. data/spec/block_docs/lists9.md +53 -0
  136. data/{tests/unittest → spec/block_docs}/lists_after_paragraph.md +19 -25
  137. data/spec/block_docs/lists_blank.md +35 -0
  138. data/{tests/unittest/list3.md → spec/block_docs/lists_blockquote_code.md} +2 -14
  139. data/{tests/unittest/list4.md → spec/block_docs/lists_need_blank_line.md} +50 -21
  140. data/spec/block_docs/lists_nested.md +44 -0
  141. data/spec/block_docs/lists_nested_blankline.md +28 -0
  142. data/spec/block_docs/lists_nested_deep.md +43 -0
  143. data/{tests/unittest → spec/block_docs}/lists_ol.md +37 -54
  144. data/spec/block_docs/lists_paraindent.md +47 -0
  145. data/spec/block_docs/lists_tab.md +54 -0
  146. data/spec/block_docs/loss.md +17 -0
  147. data/spec/block_docs/math-blahtex/equations.md +30 -0
  148. data/spec/block_docs/math-blahtex/inline.md +48 -0
  149. data/spec/block_docs/math-blahtex/math2.md +45 -0
  150. data/spec/block_docs/math-blahtex/table.md +25 -0
  151. data/spec/block_docs/math/embedded_invalid_svg.md +79 -0
  152. data/spec/block_docs/math/embedded_svg.md +97 -0
  153. data/spec/block_docs/math/equations.md +44 -0
  154. data/{tests/unittest → spec/block_docs}/math/inline.md +7 -19
  155. data/spec/block_docs/math/math2.md +45 -0
  156. data/{tests/unittest → spec/block_docs}/math/notmath.md +0 -12
  157. data/spec/block_docs/math/raw_mathml.md +87 -0
  158. data/spec/block_docs/math/table.md +25 -0
  159. data/{tests/unittest → spec/block_docs}/math/table2.md +5 -17
  160. data/{tests/unittest → spec/block_docs}/misc_sw.md +181 -118
  161. data/{tests/unittest → spec/block_docs}/olist.md +6 -18
  162. data/{tests/unittest → spec/block_docs}/one.md +0 -12
  163. data/{tests/unittest → spec/block_docs}/paragraph.md +0 -12
  164. data/{tests/unittest → spec/block_docs}/paragraph_rules/dont_merge_ref.md +4 -12
  165. data/{tests/unittest → spec/block_docs}/paragraph_rules/tab_is_blank.md +0 -12
  166. data/{tests/unittest → spec/block_docs}/paragraphs.md +1 -13
  167. data/{tests/unittest → spec/block_docs}/recover/recover_links.md +4 -16
  168. data/{tests/unittest/pending/ref.md → spec/block_docs/ref_with_period.md} +7 -16
  169. data/spec/block_docs/ref_with_title.md +22 -0
  170. data/{tests/unittest → spec/block_docs}/references/long_example.md +16 -23
  171. data/{tests/unittest → spec/block_docs}/references/spaces_and_numbers.md +0 -12
  172. data/{tests/unittest → spec/block_docs}/smartypants.md +24 -31
  173. data/{tests/unittest → spec/block_docs}/syntax_hl.md +13 -17
  174. data/{tests/unittest → spec/block_docs}/table_attributes.md +2 -14
  175. data/spec/block_docs/tables.md +58 -0
  176. data/{tests/unittest → spec/block_docs}/test.md +1 -13
  177. data/{tests/unittest/notyet → spec/block_docs}/ticks.md +1 -13
  178. data/spec/block_docs/toc.md +87 -0
  179. data/{tests/unittest/notyet → spec/block_docs}/triggering.md +14 -25
  180. data/{tests/unittest → spec/block_docs}/underscore_in_words.md +0 -12
  181. data/{tests/unittest → spec/block_docs}/wrapping.md +4 -16
  182. data/spec/block_docs/xml.md +33 -0
  183. data/{tests/unittest → spec/block_docs}/xml2.md +0 -12
  184. data/spec/block_docs/xml3.md +24 -0
  185. data/{tests/unittest → spec/block_docs}/xml_instruction.md +9 -20
  186. data/spec/block_spec.rb +110 -0
  187. data/spec/cli_spec.rb +8 -0
  188. data/spec/span_spec.rb +256 -0
  189. data/spec/spec_helper.rb +2 -0
  190. data/spec/to_html_utf8_spec.rb +13 -0
  191. metadata +205 -243
  192. metadata.gz.sig +3 -0
  193. data/Rakefile +0 -48
  194. data/bin/marudown +0 -29
  195. data/bin/marutest +0 -345
  196. data/docs/changelog.md +0 -334
  197. data/lib/maruku/errors_management.rb +0 -92
  198. data/lib/maruku/ext/math/latex_fix.rb +0 -12
  199. data/lib/maruku/input/parse_span_better.rb +0 -746
  200. data/lib/maruku/input/type_detection.rb +0 -147
  201. data/lib/maruku/output/to_latex_entities.rb +0 -367
  202. data/lib/maruku/output/to_latex_strings.rb +0 -64
  203. data/lib/maruku/structures.rb +0 -167
  204. data/lib/maruku/structures_inspect.rb +0 -87
  205. data/lib/maruku/structures_iterators.rb +0 -61
  206. data/lib/maruku/tests/benchmark.rb +0 -82
  207. data/lib/maruku/tests/new_parser.rb +0 -373
  208. data/lib/maruku/tests/tests.rb +0 -136
  209. data/lib/maruku/usage/example1.rb +0 -33
  210. data/tests/bugs/code_in_links.md +0 -101
  211. data/tests/bugs/complex_escaping.md +0 -38
  212. data/tests/math/syntax.md +0 -46
  213. data/tests/math_usage/document.md +0 -13
  214. data/tests/others/abbreviations.md +0 -11
  215. data/tests/others/blank.md +0 -4
  216. data/tests/others/code.md +0 -5
  217. data/tests/others/code2.md +0 -8
  218. data/tests/others/code3.md +0 -16
  219. data/tests/others/email.md +0 -4
  220. data/tests/others/entities.md +0 -19
  221. data/tests/others/escaping.md +0 -16
  222. data/tests/others/extra_dl.md +0 -101
  223. data/tests/others/extra_header_id.md +0 -13
  224. data/tests/others/extra_table1.md +0 -40
  225. data/tests/others/footnotes.md +0 -17
  226. data/tests/others/headers.md +0 -10
  227. data/tests/others/hrule.md +0 -10
  228. data/tests/others/images.md +0 -20
  229. data/tests/others/inline_html.md +0 -42
  230. data/tests/others/links.md +0 -38
  231. data/tests/others/list1.md +0 -4
  232. data/tests/others/list2.md +0 -5
  233. data/tests/others/list3.md +0 -8
  234. data/tests/others/lists.md +0 -32
  235. data/tests/others/lists_after_paragraph.md +0 -44
  236. data/tests/others/lists_ol.md +0 -39
  237. data/tests/others/misc_sw.md +0 -105
  238. data/tests/others/one.md +0 -1
  239. data/tests/others/paragraphs.md +0 -13
  240. data/tests/others/sss06.md +0 -352
  241. data/tests/others/test.md +0 -4
  242. data/tests/s5/s5profiling.md +0 -48
  243. data/tests/unittest/bug_def.md +0 -28
  244. data/tests/unittest/email.md +0 -32
  245. data/tests/unittest/html2.md +0 -34
  246. data/tests/unittest/ie.md +0 -61
  247. data/tests/unittest/links2.md +0 -34
  248. data/tests/unittest/lists11.md +0 -28
  249. data/tests/unittest/lists6.md +0 -53
  250. data/tests/unittest/lists9.md +0 -76
  251. data/tests/unittest/math/equations.md +0 -86
  252. data/tests/unittest/math/math2.md +0 -57
  253. data/tests/unittest/math/table.md +0 -37
  254. data/tests/unittest/notyet/header_after_par.md +0 -70
  255. data/tests/unittest/red_tests/abbrev.md +0 -1388
  256. data/tests/unittest/red_tests/lists7.md +0 -68
  257. data/tests/unittest/red_tests/lists7b.md +0 -128
  258. data/tests/unittest/red_tests/lists8.md +0 -76
  259. data/tests/unittest/red_tests/xml.md +0 -70
  260. data/tests/unittest/xml3.md +0 -38
  261. data/tests/utf8-files/simple.md +0 -1
  262. data/unit_test_block.sh +0 -5
  263. data/unit_test_span.sh +0 -3
@@ -1,373 +0,0 @@
1
- #--
2
- # Copyright (C) 2006 Andrea Censi <andrea (at) rubyforge.org>
3
- #
4
- # This file is part of Maruku.
5
- #
6
- # Maruku is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation; either version 2 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Maruku is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with Maruku; if not, write to the Free Software
18
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
- #++
20
-
21
-
22
- require 'maruku'
23
- require 'maruku/ext/math'
24
-
25
- module MaRuKu; module Tests
26
- # 5 accented letters in italian, encoded as UTF-8
27
- AccIta8 = "\303\240\303\250\303\254\303\262\303\271"
28
-
29
- # Same letters, written in ISO-8859-1 (one byte per letter)
30
- AccIta1 = "\340\350\354\362\371"
31
-
32
- # The word MA-RU-KU, written in katakana using UTF-8
33
- Maruku8 = "\343\203\236\343\203\253\343\202\257"
34
-
35
- def test_span_parser(verbose, break_on_first_error, quiet)
36
- good_cases = [
37
-
38
- ["", [], 'Empty string gives empty list'],
39
- ["a", ["a"], 'Easy char'],
40
- [" a", ["a"], 'First space in the paragraph is ignored'],
41
- ["a\n \n", ["a"], 'Last spaces in the paragraphs are ignored'],
42
- [' ', [], 'One char => nothing'],
43
- [' ', [], 'Two chars => nothing'],
44
- ['a b', ['a b'], 'Spaces are compressed'],
45
- ['a b', ['a b'], 'Newlines are spaces'],
46
- ["a\nb", ['a b'], 'Newlines are spaces'],
47
- ["a\n b", ['a b'], 'Compress newlines 1'],
48
- ["a \nb", ['a b'], 'Compress newlines 2'],
49
- [" \nb", ['b'], 'Compress newlines 3'],
50
- ["\nb", ['b'], 'Compress newlines 4'],
51
- ["b\n", ['b'], 'Compress newlines 5'],
52
- ["\n", [], 'Compress newlines 6'],
53
- ["\n\n\n", [], 'Compress newlines 7'],
54
-
55
- [nil, :throw, "Should throw on nil input"],
56
-
57
- # Code blocks
58
- ["`" , :throw, 'Unclosed single ticks'],
59
- ["``" , :throw, 'Unclosed double ticks'],
60
- ["`a`" , [md_code('a')], 'Simple inline code'],
61
- ["`` ` ``" , [md_code('`')], ],
62
- ["`` \\` ``" , [md_code('\\`')], ],
63
- ["``a``" , [md_code('a')], ],
64
- ["`` a ``" , [md_code('a')], ],
65
-
66
- # Newlines
67
- ["a \n", ['a',md_el(:linebreak)], 'Two spaces give br.'],
68
- ["a \n", ['a'], 'Newlines 2'],
69
- [" \n", [md_el(:linebreak)], 'Newlines 3'],
70
- [" \n \n", [md_el(:linebreak),md_el(:linebreak)],'Newlines 3'],
71
- [" \na \n", [md_el(:linebreak),'a',md_el(:linebreak)],'Newlines 3'],
72
-
73
- # Inline HTML
74
- ["a < b", ['a < b'], '< can be on itself'],
75
- ["<hr>", [md_html('<hr />')], 'HR will be sanitized'],
76
- ["<hr/>", [md_html('<hr />')], 'Closed tag is ok'],
77
- ["<hr />", [md_html('<hr />')], 'Closed tag is ok 2'],
78
- ["<hr/>a", [md_html('<hr />'),'a'], 'Closed tag is ok 2'],
79
- ["<em></em>a", [md_html('<em></em>'),'a'], 'Inline HTML 1'],
80
- ["<em>e</em>a", [md_html('<em>e</em>'),'a'], 'Inline HTML 2'],
81
- ["a<em>e</em>b", ['a',md_html('<em>e</em>'),'b'], 'Inline HTML 3'],
82
- ["<em>e</em>a<em>f</em>",
83
- [md_html('<em>e</em>'),'a',md_html('<em>f</em>')],
84
- 'Inline HTML 4'],
85
- ["<em>e</em><em>f</em>a",
86
- [md_html('<em>e</em>'),md_html('<em>f</em>'),'a'],
87
- 'Inline HTML 5'],
88
-
89
- ["<img src='a' />", [md_html("<img src='a' />")], 'Attributes'],
90
- ["<img src='a'/>"],
91
-
92
- # emphasis
93
- ["**", :throw, 'Unclosed double **'],
94
- ["\\*", ['*'], 'Escaping of *'],
95
- ["a *b* ", ['a ', md_em('b')], 'Emphasis 1'],
96
- ["a *b*", ['a ', md_em('b')], 'Emphasis 2'],
97
- ["a * b", ['a * b'], 'Emphasis 3'],
98
- ["a * b*", :throw, 'Unclosed emphasis'],
99
- # same with underscore
100
- ["__", :throw, 'Unclosed double __'],
101
- ["\\_", ['_'], 'Escaping of _'],
102
- ["a _b_ ", ['a ', md_em('b')], 'Emphasis 4'],
103
- ["a _b_", ['a ', md_em('b')], 'Emphasis 5'],
104
- ["a _ b", ['a _ b'], 'Emphasis 6'],
105
- ["a _ b_", :throw, 'Unclosed emphasis'],
106
- ["_b_", [md_em('b')], 'Emphasis 7'],
107
- ["_b_ _c_", [md_em('b'),' ',md_em('c')], 'Emphasis 8'],
108
- ["_b__c_", [md_em('b'),md_em('c')], 'Emphasis 9'],
109
- # underscores in word
110
- ["mod_ruby", ['mod_ruby'], 'Word with underscore'],
111
- # strong
112
- ["**a*", :throw, 'Unclosed double ** 2'],
113
- ["\\**a*", ['*', md_em('a')], 'Escaping of *'],
114
- ["a **b** ", ['a ', md_strong('b')], 'Emphasis 1'],
115
- ["a **b**", ['a ', md_strong('b')], 'Emphasis 2'],
116
- ["a ** b", ['a ** b'], 'Emphasis 3'],
117
- ["a ** b**", :throw, 'Unclosed emphasis'],
118
- ["**b****c**", [md_strong('b'),md_strong('c')], 'Emphasis 9'],
119
- # strong (with underscore)
120
- ["__a_", :throw, 'Unclosed double __ 2'],
121
-
122
- # ["\\__a_", ['_', md_em('a')], 'Escaping of _'],
123
- ["a __b__ ", ['a ', md_strong('b')], 'Emphasis 1'],
124
- ["a __b__", ['a ', md_strong('b')], 'Emphasis 2'],
125
- ["a __ b", ['a __ b'], 'Emphasis 3'],
126
- ["a __ b__", :throw, 'Unclosed emphasis'],
127
- ["__b____c__", [md_strong('b'),md_strong('c')], 'Emphasis 9'],
128
- # extra strong
129
- ["***a**", :throw, 'Unclosed triple *** '],
130
- ["\\***a**", ['*', md_strong('a')], 'Escaping of *'],
131
- ["a ***b*** ", ['a ', md_emstrong('b')], 'Strong elements'],
132
- ["a ***b***", ['a ', md_emstrong('b')]],
133
- ["a *** b", ['a *** b']],
134
- ["a ** * b", ['a ** * b']],
135
- ["***b******c***", [md_emstrong('b'),md_emstrong('c')]],
136
- ["a *** b***", :throw, 'Unclosed emphasis'],
137
- # same with underscores
138
- ["___a__", :throw, 'Unclosed triple *** '],
139
- # ["\\___a__", ['_', md_strong('a')], 'Escaping of _'],
140
- ["a ___b___ ", ['a ', md_emstrong('b')], 'Strong elements'],
141
- ["a ___b___", ['a ', md_emstrong('b')]],
142
- ["a ___ b", ['a ___ b']],
143
- ["a __ _ b", ['a __ _ b']],
144
- ["___b______c___", [md_emstrong('b'),md_emstrong('c')]],
145
- ["a ___ b___", :throw, 'Unclosed emphasis'],
146
- # mixing is bad
147
- ["*a_", :throw, 'Mixing is bad'],
148
- ["_a*", :throw],
149
- ["**a__", :throw],
150
- ["__a**", :throw],
151
- ["___a***", :throw],
152
- ["***a___", :throw],
153
- # links of the form [text][ref]
154
- ["\\[a]", ["[a]"], 'Escaping 1'],
155
- ["\\[a\\]", ["[a]"], 'Escaping 2'],
156
- # This is valid in the new Markdown version
157
- # ["[a]", ["a"], 'Not a link'],
158
- ["[a]", [ md_link(["a"],'a')], 'Empty link'],
159
- ["[a][]", ],
160
- ["[a][]b", [ md_link(["a"],'a'),'b'], 'Empty link'],
161
- ["[a\\]][]", [ md_link(["a]"],'a')], 'Escape inside link (throw ?] away)'],
162
-
163
- ["[a", :throw, 'Link not closed'],
164
- ["[a][", :throw, 'Ref not closed'],
165
-
166
- # links of the form [text](url)
167
- ["\\[a](b)", ["[a](b)"], 'Links'],
168
- ["[a](url)c", [md_im_link(['a'],'url'),'c'], 'url'],
169
- ["[a]( url )c" ],
170
- ["[a] ( url )c" ],
171
- ["[a] ( url)c" ],
172
-
173
- ["[a](ur:/l/ 'Title')", [md_im_link(['a'],'ur:/l/','Title')],
174
- 'url and title'],
175
- ["[a] ( ur:/l/ \"Title\")" ],
176
- ["[a] ( ur:/l/ \"Title\")" ],
177
- ["[a]( ur:/l/ Title)", :throw, "Must quote title" ],
178
-
179
- ["[a](url 'Tit\\\"l\\\\e')", [md_im_link(['a'],'url','Tit"l\\e')],
180
- 'url and title escaped'],
181
- ["[a] ( url \"Tit\\\"l\\\\e\")" ],
182
- ["[a] ( url \"Tit\\\"l\\\\e\" )" ],
183
- ['[a] ( url "Tit\\"l\\\\e" )' ],
184
- ["[a]()", [md_im_link(['a'],'')], 'No URL is OK'],
185
-
186
- ["[a](\"Title\")", :throw, "No url specified" ],
187
- ["[a](url \"Title)", :throw, "Unclosed quotes" ],
188
- ["[a](url \"Title\\\")", :throw],
189
- ["[a](url \"Title\" ", :throw],
190
-
191
- ["[a](url \'Title\")", :throw, "Mixing is bad" ],
192
- ["[a](url \"Title\')"],
193
-
194
- ["[a](/url)", [md_im_link(['a'],'/url')], 'Funny chars in url'],
195
- ["[a](#url)", [md_im_link(['a'],'#url')]],
196
- ["[a](</script?foo=1&bar=2>)", [md_im_link(['a'],'/script?foo=1&bar=2')]],
197
-
198
-
199
- # Images
200
- ["\\![a](url)", ['!', md_im_link(['a'],'url') ], 'Escaping images'],
201
-
202
- ["![a](url)", [md_im_image(['a'],'url')], 'Image no title'],
203
- ["![a]( url )" ],
204
- ["![a] ( url )" ],
205
- ["![a] ( url)" ],
206
-
207
- ["![a](url 'ti\"tle')", [md_im_image(['a'],'url','ti"tle')], 'Image with title'],
208
- ['![a]( url "ti\\"tle")' ],
209
-
210
- ["![a](url", :throw, 'Invalid images'],
211
- ["![a( url )" ],
212
- ["![a] ('url )" ],
213
-
214
- ["![a][imref]", [md_image(['a'],'imref')], 'Image with ref'],
215
- ["![a][ imref]"],
216
- ["![a][ imref ]"],
217
- ["![a][\timref\t]"],
218
-
219
-
220
- ['<http://example.com/?foo=1&bar=2>',
221
- [md_url('http://example.com/?foo=1&bar=2')], 'Immediate link'],
222
- ['a<http://example.com/?foo=1&bar=2>b',
223
- ['a',md_url('http://example.com/?foo=1&bar=2'),'b'] ],
224
- ['<andrea@censi.org>',
225
- [md_email('andrea@censi.org')], 'Email address'],
226
- ['<mailto:andrea@censi.org>'],
227
- ["Developmen <http://rubyforge.org/projects/maruku/>",
228
- ["Developmen ", md_url("http://rubyforge.org/projects/maruku/")]],
229
- ["a<!-- -->b", ['a',md_html('<!-- -->'),'b'],
230
- 'HTML Comment'],
231
-
232
- ["a<!--", :throw, 'Bad HTML Comment'],
233
- ["a<!-- ", :throw, 'Bad HTML Comment'],
234
-
235
- ["<?xml <?!--!`3 ?>", [md_xml_instr('xml','<?!--!`3')], 'XML processing instruction'],
236
- ["<? <?!--!`3 ?>", [md_xml_instr('','<?!--!`3')] ],
237
-
238
- ["<? ", :throw, 'Bad Server directive'],
239
-
240
- ["a <b", :throw, 'Bad HTML 1'],
241
- ["<b", :throw, 'Bad HTML 2'],
242
- ["<b!", :throw, 'Bad HTML 3'],
243
- ['`<div>`, `<table>`, `<pre>`, `<p>`',
244
- [md_code('<div>'),', ',md_code('<table>'),', ',
245
- md_code('<pre>'),', ',md_code('<p>')],
246
- 'Multiple HTLM tags'],
247
-
248
- ["&andrea", ["&andrea"], 'Parsing of entities'],
249
- # no escaping is allowed
250
- # ["\\&andrea;", ["&andrea;"]],
251
- ["l&andrea;", ["l", md_entity('andrea')] ],
252
- ["&&andrea;", ["&", md_entity('andrea')] ],
253
- ["&123;;&amp;",[md_entity('123'),';',md_entity('amp')]],
254
-
255
- ["a\nThe [syntax page] [s] provides",
256
- ['a The ', md_link(['syntax page'],'s'), ' provides'], 'Regression'],
257
-
258
- ['![a](url "ti"tle")', [md_im_image(['a'],'url','ti"tle')],
259
- "Image with quotes"],
260
- ['![a](url \'ti"tle\')' ],
261
-
262
- ['[bar](/url/ "Title with "quotes" inside")',
263
- [md_im_link(["bar"],'/url/', 'Title with "quotes" inside')],
264
- "Link with quotes"],
265
-
266
- # We dropped this idea
267
- # ['$20,000 and $30,000', ['$20,000 and $30,000'], 'Math: spaces'],
268
- ['$20,000$', [md_inline_math('20,000')]],
269
- # ['$ 20,000$', ['$ 20,000$']],
270
- # ['$20,000 $ $20,000$', ['$20,000 $ ', md_inline_math('20,000')]],
271
- ["#{Maruku8}", [Maruku8], "Reading UTF-8"],
272
- # ["#{AccIta1}", [AccIta8], "Converting ISO-8859-1 to UTF-8",
273
- # {:encoding => 'iso-8859-1'}],
274
-
275
- ]
276
-
277
- good_cases = unit_tests_for_attribute_lists + good_cases
278
-
279
- count = 1; last_comment=""; last_expected=:throw
280
- good_cases.each do |t|
281
- if not t[1]
282
- t[1] = last_expected
283
- else
284
- last_expected = t[1]
285
- end
286
- if not t[2]
287
- t[2] = last_comment + " #{count+=1}"
288
- else
289
- last_comment = t[2]; count=1
290
- end
291
- end
292
-
293
-
294
-
295
- @verbose = verbose
296
- m = Maruku.new
297
- m.attributes[:on_error] = :raise
298
- Globals[:debug_keep_ials] = true
299
-
300
- num_ok = 0
301
- good_cases.each do |input, expected, comment|
302
- output = nil
303
- begin
304
- output = m.parse_span_better(input)
305
- #lines = Maruku.split_lines input
306
- #output = m.parse_lines_as_span(lines)
307
- rescue Exception => e
308
- if not expected == :throw
309
- ex = e.inspect+ "\n"+ e.backtrace.join("\n")
310
- s = comment+describe_difference(input, expected, output)
311
-
312
- print_status(comment,'CRASHED :-(', ex+s)
313
- raise e if @break_on_first_error
314
- else
315
- quiet || print_status(comment,'OK')
316
- num_ok += 1
317
- end
318
- end
319
-
320
- if not expected == :throw
321
- if not (expected == output)
322
- s = comment+describe_difference(input, expected, output)
323
- print_status(comment, 'FAILED', s)
324
- break if break_on_first_error
325
- else
326
- num_ok += 1
327
- quiet || print_status(comment, 'OK')
328
- end
329
- else # I expected a raise
330
- if output
331
- s = comment+describe_difference(input, expected, output)
332
-
333
- print_status(comment, 'FAILED (no throw)', s)
334
- break if break_on_first_error
335
- end
336
- end
337
- end # do
338
- if num_ok != good_cases.size
339
- return false
340
- else
341
- return true
342
- end
343
- end
344
-
345
- PAD=40
346
- def print_status(comment, status, verbose_text=nil)
347
- if comment.size < PAD
348
- comment = comment + (" "*(PAD-comment.size))
349
- end
350
- puts "- #{comment} #{status}"
351
- if @verbose and verbose_text
352
- puts verbose_text
353
- end
354
- end
355
-
356
-
357
- def describe_difference(input, expected, output)
358
- "\nInput:\n #{input.inspect}" +
359
- "\nExpected:\n #{expected.inspect}" +
360
- "\nOutput:\n #{output.inspect}\n"
361
- end
362
- end end
363
-
364
- class Maruku
365
- include MaRuKu::Tests
366
- end
367
-
368
- verbose = ARGV.include? 'v'
369
- break_on_first = ARGV.include? 'b'
370
- quiet = ARGV.include? 'q'
371
- ok = Maruku.new.test_span_parser(verbose, break_on_first, quiet)
372
-
373
- exit (ok ? 0 : 1)
@@ -1,136 +0,0 @@
1
- #--
2
- # Copyright (C) 2006 Andrea Censi <andrea (at) rubyforge.org>
3
- #
4
- # This file is part of Maruku.
5
- #
6
- # Maruku is free software; you can redistribute it and/or modify
7
- # it under the terms of the GNU General Public License as published by
8
- # the Free Software Foundation; either version 2 of the License, or
9
- # (at your option) any later version.
10
- #
11
- # Maruku is distributed in the hope that it will be useful,
12
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- # GNU General Public License for more details.
15
- #
16
- # You should have received a copy of the GNU General Public License
17
- # along with Maruku; if not, write to the Free Software
18
- # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
- #++
20
-
21
-
22
- require 'maruku'
23
-
24
- class Maruku
25
-
26
-
27
- def Maruku.failed(test, doc, s)
28
- raise "Test failed: #{s}\n*****\n#{test}\n*****\n"+
29
- "#{doc.inspect}\n*****\n{doc.to_html}"
30
- end
31
-
32
- def Maruku.metaTests
33
- ref = {:id => 'id1', :class => ['class1','class2'],
34
- :style=> 'Style is : important = for all } things'}
35
-
36
-
37
- tests = MetaTests.split('***')
38
- for test in tests
39
- #puts "Test: #{test.inspect}"
40
- doc = Maruku.new(test)
41
-
42
- doc.children.size == 1 ||
43
- failed(test, doc, "children != 1")
44
-
45
-
46
- h = doc.children[0]
47
-
48
- h.node_type==:header ||
49
- failed(test, doc, "child not header")
50
-
51
- # puts doc.inspect
52
- # puts doc.to_html
53
- end
54
- end
55
-
56
- MetaTests = <<EOF
57
-
58
- # Head # {ref1 ref2 ref3}
59
-
60
- {ref1}: id: id1; class: class1
61
- {ref2}: class: class2
62
- {ref3}: style: "Style is : important = for all } things"
63
-
64
- ***
65
-
66
- # Head # {ref1 ref3 ref2}
67
-
68
- {ref1}: id: id1; class: class1
69
- {ref2}: class: class2
70
- {ref3}: style: "Style is : important = for all } things"
71
-
72
- ***
73
-
74
- # Head # {ref1 ref2 ref3}
75
-
76
- {ref1}: id= id1; class=class1
77
- {ref2}: class=class2
78
- {ref3}: style="Style is : important = for all } things"
79
-
80
- ***
81
-
82
- # Head # {ref1 ref2 ref3}
83
-
84
- {ref1}: id=id1 class=class1
85
- {ref2}: class=class2
86
- {ref3}: style="Style is : important = for all } things"
87
-
88
- ***
89
- # Head # {ref1 ref2 ref3}
90
-
91
- {ref1}: id:id1 class:class1
92
- {ref2}: class : class2
93
- {ref3}: style = "Style is : important = for all } things"
94
-
95
- ***
96
- # Head # {ref1 ref2 ref3}
97
-
98
- {ref1}: id:id1 class:class1
99
- {ref2}: class : class2
100
- {ref3}: style = "Style is : important = for all } things"
101
-
102
- ***
103
-
104
- # Head # {#id1 .class1 ref2 ref3}
105
-
106
- {ref2}: class : class2
107
- {ref3}: style = "Style is : important = for all } things"
108
-
109
- ***
110
-
111
- # Head # { #id1 .class1 ref2 ref3 }
112
-
113
- {ref2}: class : class2
114
- {ref3}: style = "Style is : important = for all } things"
115
-
116
- ***
117
-
118
- # Head # { id=id1 class=class1 ref2 ref3 }
119
-
120
- {ref2}: class : class2
121
- {ref3}: style = "Style is : important = for all } things"
122
-
123
- ***
124
-
125
- # Head # { id:id1 class="class1" class:"class2" style="Style is : important = for all } things"}
126
-
127
- EOF
128
-
129
- end
130
-
131
- if File.basename($0) == 'tests.rb'
132
- Maruku.metaTests
133
-
134
- end
135
-
136
-