maruku 0.6.1 → 0.7.0.beta1

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 (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
-