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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/MIT-LICENSE.txt +20 -0
- data/bin/maruku +153 -152
- data/bin/marutex +2 -29
- data/data/entities.xml +261 -0
- data/docs/math.md +14 -18
- data/lib/maruku.rb +65 -77
- data/lib/maruku/attributes.rb +109 -214
- data/lib/maruku/defaults.rb +45 -67
- data/lib/maruku/document.rb +43 -0
- data/lib/maruku/element.rb +112 -0
- data/lib/maruku/errors.rb +71 -0
- data/lib/maruku/ext/div.rb +105 -113
- data/lib/maruku/ext/fenced_code.rb +97 -0
- data/lib/maruku/ext/math.rb +22 -26
- data/lib/maruku/ext/math/elements.rb +20 -26
- data/lib/maruku/ext/math/mathml_engines/blahtex.rb +92 -104
- data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +33 -26
- data/lib/maruku/ext/math/mathml_engines/none.rb +11 -19
- data/lib/maruku/ext/math/mathml_engines/ritex.rb +2 -4
- data/lib/maruku/ext/math/parsing.rb +107 -113
- data/lib/maruku/ext/math/to_html.rb +184 -187
- data/lib/maruku/ext/math/to_latex.rb +30 -21
- data/lib/maruku/helpers.rb +158 -257
- data/lib/maruku/html.rb +254 -0
- data/lib/maruku/input/charsource.rb +272 -319
- data/lib/maruku/input/extensions.rb +62 -63
- data/lib/maruku/input/html_helper.rb +220 -189
- data/lib/maruku/input/linesource.rb +90 -110
- data/lib/maruku/input/mdline.rb +129 -0
- data/lib/maruku/input/parse_block.rb +618 -612
- data/lib/maruku/input/parse_doc.rb +145 -215
- data/lib/maruku/input/parse_span.rb +658 -0
- data/lib/maruku/input/rubypants.rb +200 -128
- data/lib/maruku/inspect_element.rb +60 -0
- data/lib/maruku/maruku.rb +10 -31
- data/lib/maruku/output/entity_table.rb +33 -0
- data/lib/maruku/output/s5/fancy.rb +462 -462
- data/lib/maruku/output/s5/to_s5.rb +115 -135
- data/lib/maruku/output/to_html.rb +898 -983
- data/lib/maruku/output/to_latex.rb +561 -560
- data/lib/maruku/output/to_markdown.rb +207 -162
- data/lib/maruku/output/to_s.rb +11 -52
- data/lib/maruku/string_utils.rb +129 -179
- data/lib/maruku/toc.rb +185 -196
- data/lib/maruku/version.rb +33 -38
- data/spec/block_docs/abbrev.md +776 -0
- data/{tests/unittest → spec/block_docs}/abbreviations.md +11 -20
- data/{tests/unittest → spec/block_docs}/alt.md +2 -14
- data/{tests/unittest/pending → spec/block_docs}/amps.md +1 -13
- data/{tests/unittest → spec/block_docs}/attributes/att2.md +0 -12
- data/{tests/unittest → spec/block_docs}/attributes/att3.md +2 -14
- data/{tests/unittest → spec/block_docs}/attributes/attributes.md +12 -16
- data/{tests/unittest → spec/block_docs}/attributes/circular.md +0 -12
- data/{tests/unittest → spec/block_docs}/attributes/default.md +1 -13
- data/{tests/unittest → spec/block_docs}/blank.md +0 -12
- data/{tests/unittest → spec/block_docs}/blanks_in_code.md +16 -15
- data/{tests/unittest/loss.md → spec/block_docs/bug_def.md} +6 -18
- data/{tests/unittest → spec/block_docs}/bug_table.md +3 -15
- data/{tests/unittest → spec/block_docs}/code.md +7 -14
- data/{tests/unittest → spec/block_docs}/code2.md +4 -14
- data/{tests/unittest → spec/block_docs}/code3.md +12 -16
- data/{tests/unittest → spec/block_docs}/data_loss.md +2 -14
- data/{tests/unittest → spec/block_docs}/divs/div1.md +0 -12
- data/{tests/unittest → spec/block_docs}/divs/div2.md +0 -12
- data/{tests/unittest → spec/block_docs}/divs/div3_nest.md +3 -15
- data/{tests/unittest → spec/block_docs}/easy.md +1 -13
- data/spec/block_docs/email.md +29 -0
- data/{tests/unittest/pending → spec/block_docs}/empty_cells.md +3 -15
- data/{tests/unittest → spec/block_docs}/encoding/iso-8859-1.md +1 -14
- data/{tests/unittest → spec/block_docs}/encoding/utf-8.md +0 -12
- data/{tests/unittest → spec/block_docs}/entities.md +27 -29
- data/{tests/unittest/notyet → spec/block_docs}/escape.md +2 -14
- data/{tests/unittest → spec/block_docs}/escaping.md +11 -22
- data/{tests/unittest → spec/block_docs}/extra_dl.md +2 -13
- data/{tests/unittest → spec/block_docs}/extra_header_id.md +14 -20
- data/{tests/unittest → spec/block_docs}/extra_table1.md +3 -15
- data/spec/block_docs/fenced_code_blocks.md +66 -0
- data/spec/block_docs/fenced_code_blocks_highlighted.md +18 -0
- data/{tests/unittest → spec/block_docs}/footnotes.md +12 -24
- data/spec/block_docs/footnotes2.md +78 -0
- data/spec/block_docs/hard.md +25 -0
- data/spec/block_docs/header_after_par.md +62 -0
- data/{tests/unittest → spec/block_docs}/headers.md +10 -18
- data/{tests/unittest → spec/block_docs}/hex_entities.md +7 -18
- data/{tests/unittest → spec/block_docs}/hrule.md +5 -12
- data/{tests/unittest → spec/block_docs}/html3.md +1 -13
- data/{tests/unittest → spec/block_docs}/html4.md +2 -14
- data/{tests/unittest → spec/block_docs}/html5.md +2 -14
- data/spec/block_docs/html_block_in_para.md +22 -0
- data/spec/block_docs/html_inline.md +25 -0
- data/spec/block_docs/html_trailing.md +31 -0
- data/spec/block_docs/ie.md +62 -0
- data/spec/block_docs/iframe.md +29 -0
- data/{tests/unittest → spec/block_docs}/images.md +22 -28
- data/{tests/unittest → spec/block_docs}/images2.md +7 -17
- data/{tests/unittest → spec/block_docs}/inline_html.md +37 -67
- data/{tests/unittest → spec/block_docs}/inline_html2.md +1 -13
- data/spec/block_docs/inline_html_beginning.md +10 -0
- data/spec/block_docs/issue20.md +9 -0
- data/spec/block_docs/issue26.md +22 -0
- data/spec/block_docs/issue29.md +9 -0
- data/spec/block_docs/issue30.md +30 -0
- data/spec/block_docs/issue31.md +25 -0
- data/spec/block_docs/issue40.md +40 -0
- data/spec/block_docs/issue64.md +55 -0
- data/spec/block_docs/issue67.md +19 -0
- data/spec/block_docs/issue70.md +11 -0
- data/spec/block_docs/issue72.md +17 -0
- data/spec/block_docs/issue74.md +38 -0
- data/spec/block_docs/issue79.md +15 -0
- data/spec/block_docs/issue83.md +13 -0
- data/spec/block_docs/issue85.md +25 -0
- data/spec/block_docs/issue88.md +19 -0
- data/spec/block_docs/issue89.md +12 -0
- data/spec/block_docs/issue90.md +38 -0
- data/{tests/unittest/pending → spec/block_docs}/link.md +21 -18
- data/{tests/unittest → spec/block_docs}/links.md +33 -32
- data/spec/block_docs/links2.md +21 -0
- data/{tests/unittest → spec/block_docs}/list1.md +0 -12
- data/{tests/unittest → spec/block_docs}/list12.md +2 -14
- data/{tests/unittest → spec/block_docs}/list2.md +2 -14
- data/spec/block_docs/list_multipara.md +42 -0
- data/{tests/unittest → spec/block_docs}/lists.md +28 -29
- data/{tests/unittest → spec/block_docs}/lists10.md +2 -14
- data/spec/block_docs/lists11.md +23 -0
- data/spec/block_docs/lists12.md +43 -0
- data/spec/block_docs/lists13.md +55 -0
- data/spec/block_docs/lists14.md +61 -0
- data/spec/block_docs/lists15.md +36 -0
- data/spec/block_docs/lists6.md +88 -0
- data/spec/block_docs/lists7b.md +58 -0
- data/spec/block_docs/lists9.md +53 -0
- data/{tests/unittest → spec/block_docs}/lists_after_paragraph.md +19 -25
- data/spec/block_docs/lists_blank.md +35 -0
- data/{tests/unittest/list3.md → spec/block_docs/lists_blockquote_code.md} +2 -14
- data/{tests/unittest/list4.md → spec/block_docs/lists_need_blank_line.md} +50 -21
- data/spec/block_docs/lists_nested.md +44 -0
- data/spec/block_docs/lists_nested_blankline.md +28 -0
- data/spec/block_docs/lists_nested_deep.md +43 -0
- data/{tests/unittest → spec/block_docs}/lists_ol.md +37 -54
- data/spec/block_docs/lists_paraindent.md +47 -0
- data/spec/block_docs/lists_tab.md +54 -0
- data/spec/block_docs/loss.md +17 -0
- data/spec/block_docs/math-blahtex/equations.md +30 -0
- data/spec/block_docs/math-blahtex/inline.md +48 -0
- data/spec/block_docs/math-blahtex/math2.md +45 -0
- data/spec/block_docs/math-blahtex/table.md +25 -0
- data/spec/block_docs/math/embedded_invalid_svg.md +79 -0
- data/spec/block_docs/math/embedded_svg.md +97 -0
- data/spec/block_docs/math/equations.md +44 -0
- data/{tests/unittest → spec/block_docs}/math/inline.md +7 -19
- data/spec/block_docs/math/math2.md +45 -0
- data/{tests/unittest → spec/block_docs}/math/notmath.md +0 -12
- data/spec/block_docs/math/raw_mathml.md +87 -0
- data/spec/block_docs/math/table.md +25 -0
- data/{tests/unittest → spec/block_docs}/math/table2.md +5 -17
- data/{tests/unittest → spec/block_docs}/misc_sw.md +181 -118
- data/{tests/unittest → spec/block_docs}/olist.md +6 -18
- data/{tests/unittest → spec/block_docs}/one.md +0 -12
- data/{tests/unittest → spec/block_docs}/paragraph.md +0 -12
- data/{tests/unittest → spec/block_docs}/paragraph_rules/dont_merge_ref.md +4 -12
- data/{tests/unittest → spec/block_docs}/paragraph_rules/tab_is_blank.md +0 -12
- data/{tests/unittest → spec/block_docs}/paragraphs.md +1 -13
- data/{tests/unittest → spec/block_docs}/recover/recover_links.md +4 -16
- data/{tests/unittest/pending/ref.md → spec/block_docs/ref_with_period.md} +7 -16
- data/spec/block_docs/ref_with_title.md +22 -0
- data/{tests/unittest → spec/block_docs}/references/long_example.md +16 -23
- data/{tests/unittest → spec/block_docs}/references/spaces_and_numbers.md +0 -12
- data/{tests/unittest → spec/block_docs}/smartypants.md +24 -31
- data/{tests/unittest → spec/block_docs}/syntax_hl.md +13 -17
- data/{tests/unittest → spec/block_docs}/table_attributes.md +2 -14
- data/spec/block_docs/tables.md +58 -0
- data/{tests/unittest → spec/block_docs}/test.md +1 -13
- data/{tests/unittest/notyet → spec/block_docs}/ticks.md +1 -13
- data/spec/block_docs/toc.md +87 -0
- data/{tests/unittest/notyet → spec/block_docs}/triggering.md +14 -25
- data/{tests/unittest → spec/block_docs}/underscore_in_words.md +0 -12
- data/{tests/unittest → spec/block_docs}/wrapping.md +4 -16
- data/spec/block_docs/xml.md +33 -0
- data/{tests/unittest → spec/block_docs}/xml2.md +0 -12
- data/spec/block_docs/xml3.md +24 -0
- data/{tests/unittest → spec/block_docs}/xml_instruction.md +9 -20
- data/spec/block_spec.rb +110 -0
- data/spec/cli_spec.rb +8 -0
- data/spec/span_spec.rb +256 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/to_html_utf8_spec.rb +13 -0
- metadata +205 -243
- metadata.gz.sig +3 -0
- data/Rakefile +0 -48
- data/bin/marudown +0 -29
- data/bin/marutest +0 -345
- data/docs/changelog.md +0 -334
- data/lib/maruku/errors_management.rb +0 -92
- data/lib/maruku/ext/math/latex_fix.rb +0 -12
- data/lib/maruku/input/parse_span_better.rb +0 -746
- data/lib/maruku/input/type_detection.rb +0 -147
- data/lib/maruku/output/to_latex_entities.rb +0 -367
- data/lib/maruku/output/to_latex_strings.rb +0 -64
- data/lib/maruku/structures.rb +0 -167
- data/lib/maruku/structures_inspect.rb +0 -87
- data/lib/maruku/structures_iterators.rb +0 -61
- data/lib/maruku/tests/benchmark.rb +0 -82
- data/lib/maruku/tests/new_parser.rb +0 -373
- data/lib/maruku/tests/tests.rb +0 -136
- data/lib/maruku/usage/example1.rb +0 -33
- data/tests/bugs/code_in_links.md +0 -101
- data/tests/bugs/complex_escaping.md +0 -38
- data/tests/math/syntax.md +0 -46
- data/tests/math_usage/document.md +0 -13
- data/tests/others/abbreviations.md +0 -11
- data/tests/others/blank.md +0 -4
- data/tests/others/code.md +0 -5
- data/tests/others/code2.md +0 -8
- data/tests/others/code3.md +0 -16
- data/tests/others/email.md +0 -4
- data/tests/others/entities.md +0 -19
- data/tests/others/escaping.md +0 -16
- data/tests/others/extra_dl.md +0 -101
- data/tests/others/extra_header_id.md +0 -13
- data/tests/others/extra_table1.md +0 -40
- data/tests/others/footnotes.md +0 -17
- data/tests/others/headers.md +0 -10
- data/tests/others/hrule.md +0 -10
- data/tests/others/images.md +0 -20
- data/tests/others/inline_html.md +0 -42
- data/tests/others/links.md +0 -38
- data/tests/others/list1.md +0 -4
- data/tests/others/list2.md +0 -5
- data/tests/others/list3.md +0 -8
- data/tests/others/lists.md +0 -32
- data/tests/others/lists_after_paragraph.md +0 -44
- data/tests/others/lists_ol.md +0 -39
- data/tests/others/misc_sw.md +0 -105
- data/tests/others/one.md +0 -1
- data/tests/others/paragraphs.md +0 -13
- data/tests/others/sss06.md +0 -352
- data/tests/others/test.md +0 -4
- data/tests/s5/s5profiling.md +0 -48
- data/tests/unittest/bug_def.md +0 -28
- data/tests/unittest/email.md +0 -32
- data/tests/unittest/html2.md +0 -34
- data/tests/unittest/ie.md +0 -61
- data/tests/unittest/links2.md +0 -34
- data/tests/unittest/lists11.md +0 -28
- data/tests/unittest/lists6.md +0 -53
- data/tests/unittest/lists9.md +0 -76
- data/tests/unittest/math/equations.md +0 -86
- data/tests/unittest/math/math2.md +0 -57
- data/tests/unittest/math/table.md +0 -37
- data/tests/unittest/notyet/header_after_par.md +0 -70
- data/tests/unittest/red_tests/abbrev.md +0 -1388
- data/tests/unittest/red_tests/lists7.md +0 -68
- data/tests/unittest/red_tests/lists7b.md +0 -128
- data/tests/unittest/red_tests/lists8.md +0 -76
- data/tests/unittest/red_tests/xml.md +0 -70
- data/tests/unittest/xml3.md +0 -38
- data/tests/utf8-files/simple.md +0 -1
- data/unit_test_block.sh +0 -5
- 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
|
-
["\\", ['!', md_im_link(['a'],'url') ], 'Escaping images'],
|
201
|
-
|
202
|
-
["", [md_im_image(['a'],'url')], 'Image no title'],
|
203
|
-
["" ],
|
204
|
-
["![a] ( url )" ],
|
205
|
-
["![a] ( url)" ],
|
206
|
-
|
207
|
-
["", [md_im_image(['a'],'url','ti"tle')], 'Image with title'],
|
208
|
-
['' ],
|
209
|
-
|
210
|
-
["" ],
|
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;;&",[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
|
-
['', [md_im_image(['a'],'url','ti"tle')],
|
259
|
-
"Image with quotes"],
|
260
|
-
['' ],
|
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)
|
data/lib/maruku/tests/tests.rb
DELETED
@@ -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
|
-
|