patcito-maruku 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +23 -0
- data/LICENSE +340 -0
- data/README.md +73 -0
- data/bin/maruku +196 -0
- data/bin/marutex +4 -0
- data/data/entities.xml +261 -0
- data/docs/changelog.md +334 -0
- data/docs/div_syntax.md +36 -0
- data/docs/entity_test.md +23 -0
- data/docs/markdown_syntax.md +899 -0
- data/docs/maruku.md +346 -0
- data/docs/math.md +194 -0
- data/docs/other_stuff.md +51 -0
- data/docs/proposal.md +309 -0
- data/docs/website/src/bluecloth.md +25 -0
- data/docs/website/src/download.md +31 -0
- data/docs/website/src/maruku.md +261 -0
- data/docs/website/src/proposal.md +271 -0
- data/lib/maruku.rb +132 -0
- data/lib/maruku/attributes.rb +138 -0
- data/lib/maruku/defaults.rb +69 -0
- data/lib/maruku/errors.rb +89 -0
- data/lib/maruku/ext/div.rb +121 -0
- data/lib/maruku/ext/fenced_code.rb +78 -0
- data/lib/maruku/ext/math.rb +37 -0
- data/lib/maruku/ext/math/elements.rb +21 -0
- data/lib/maruku/ext/math/latex_fix.rb +12 -0
- data/lib/maruku/ext/math/mathml_engines/blahtex.rb +93 -0
- data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +39 -0
- data/lib/maruku/ext/math/mathml_engines/none.rb +21 -0
- data/lib/maruku/ext/math/mathml_engines/ritex.rb +24 -0
- data/lib/maruku/ext/math/parsing.rb +125 -0
- data/lib/maruku/ext/math/to_html.rb +237 -0
- data/lib/maruku/ext/math/to_latex.rb +36 -0
- data/lib/maruku/ext/yaml.rb +43 -0
- data/lib/maruku/helpers.rb +214 -0
- data/lib/maruku/input/charsource.rb +326 -0
- data/lib/maruku/input/extensions.rb +69 -0
- data/lib/maruku/input/html_helper.rb +189 -0
- data/lib/maruku/input/linesource.rb +111 -0
- data/lib/maruku/input/parse_block.rb +608 -0
- data/lib/maruku/input/parse_doc.rb +240 -0
- data/lib/maruku/input/parse_span_better.rb +746 -0
- data/lib/maruku/input/rubypants.rb +225 -0
- data/lib/maruku/input/type_detection.rb +147 -0
- data/lib/maruku/input_textile2/t2_parser.rb +163 -0
- data/lib/maruku/maruku.rb +31 -0
- data/lib/maruku/output/s5/fancy.rb +756 -0
- data/lib/maruku/output/s5/to_s5.rb +138 -0
- data/lib/maruku/output/to_html.rb +994 -0
- data/lib/maruku/output/to_latex.rb +580 -0
- data/lib/maruku/output/to_latex_entities.rb +101 -0
- data/lib/maruku/output/to_latex_strings.rb +64 -0
- data/lib/maruku/output/to_markdown.rb +164 -0
- data/lib/maruku/output/to_s.rb +54 -0
- data/lib/maruku/string_utils.rb +185 -0
- data/lib/maruku/structures.rb +143 -0
- data/lib/maruku/structures_inspect.rb +51 -0
- data/lib/maruku/structures_iterators.rb +48 -0
- data/lib/maruku/textile2.rb +1 -0
- data/lib/maruku/toc.rb +214 -0
- data/lib/maruku/usage/example1.rb +33 -0
- data/lib/maruku/version +0 -0
- data/lib/maruku/version.rb +54 -0
- data/spec/block_docs/abbreviations.md +52 -0
- data/spec/block_docs/alt.md +17 -0
- data/spec/block_docs/attributes/att2.md +20 -0
- data/spec/block_docs/attributes/att3.md +28 -0
- data/spec/block_docs/attributes/attributes.md +57 -0
- data/spec/block_docs/attributes/circular.md +26 -0
- data/spec/block_docs/attributes/default.md +22 -0
- data/spec/block_docs/blank.md +24 -0
- data/spec/block_docs/blanks_in_code.md +75 -0
- data/spec/block_docs/bug_def.md +16 -0
- data/spec/block_docs/bug_table.md +46 -0
- data/spec/block_docs/code.md +34 -0
- data/spec/block_docs/code2.md +28 -0
- data/spec/block_docs/code3.md +71 -0
- data/spec/block_docs/data_loss.md +25 -0
- data/spec/block_docs/divs/div1.md +167 -0
- data/spec/block_docs/divs/div2.md +21 -0
- data/spec/block_docs/divs/div3_nest.md +45 -0
- data/spec/block_docs/easy.md +15 -0
- data/spec/block_docs/email.md +20 -0
- data/spec/block_docs/encoding/iso-8859-1.md +23 -0
- data/spec/block_docs/encoding/utf-8.md +18 -0
- data/spec/block_docs/entities.md +94 -0
- data/spec/block_docs/escaping.md +67 -0
- data/spec/block_docs/extra_dl.md +52 -0
- data/spec/block_docs/extra_header_id.md +63 -0
- data/spec/block_docs/extra_table1.md +37 -0
- data/spec/block_docs/footnotes.md +97 -0
- data/spec/block_docs/headers.md +37 -0
- data/spec/block_docs/hex_entities.md +37 -0
- data/spec/block_docs/hrule.md +39 -0
- data/spec/block_docs/html2.md +22 -0
- data/spec/block_docs/html3.md +31 -0
- data/spec/block_docs/html4.md +25 -0
- data/spec/block_docs/html5.md +23 -0
- data/spec/block_docs/ie.md +49 -0
- data/spec/block_docs/images.md +90 -0
- data/spec/block_docs/images2.md +31 -0
- data/spec/block_docs/inline_html.md +152 -0
- data/spec/block_docs/inline_html2.md +21 -0
- data/spec/block_docs/links.md +152 -0
- data/spec/block_docs/links2.md +22 -0
- data/spec/block_docs/list1.md +46 -0
- data/spec/block_docs/list12.md +28 -0
- data/spec/block_docs/list2.md +56 -0
- data/spec/block_docs/list3.md +64 -0
- data/spec/block_docs/list4.md +89 -0
- data/spec/block_docs/lists.md +192 -0
- data/spec/block_docs/lists10.md +34 -0
- data/spec/block_docs/lists11.md +23 -0
- data/spec/block_docs/lists6.md +41 -0
- data/spec/block_docs/lists9.md +64 -0
- data/spec/block_docs/lists_after_paragraph.md +208 -0
- data/spec/block_docs/lists_ol.md +262 -0
- data/spec/block_docs/loss.md +16 -0
- data/spec/block_docs/math/equations.md +45 -0
- data/spec/block_docs/math/inline.md +46 -0
- data/spec/block_docs/math/math2.md +45 -0
- data/spec/block_docs/math/notmath.md +25 -0
- data/spec/block_docs/math/table.md +25 -0
- data/spec/block_docs/math/table2.md +42 -0
- data/spec/block_docs/misc_sw.md +525 -0
- data/spec/block_docs/notyet/escape.md +21 -0
- data/spec/block_docs/notyet/header_after_par.md +58 -0
- data/spec/block_docs/notyet/ticks.md +18 -0
- data/spec/block_docs/notyet/triggering.md +157 -0
- data/spec/block_docs/olist.md +45 -0
- data/spec/block_docs/one.md +15 -0
- data/spec/block_docs/paragraph.md +16 -0
- data/spec/block_docs/paragraph_rules/dont_merge_ref.md +42 -0
- data/spec/block_docs/paragraph_rules/tab_is_blank.md +24 -0
- data/spec/block_docs/paragraphs.md +46 -0
- data/spec/block_docs/pending/amps.md +15 -0
- data/spec/block_docs/pending/empty_cells.md +37 -0
- data/spec/block_docs/pending/link.md +72 -0
- data/spec/block_docs/pending/ref.md +21 -0
- data/spec/block_docs/recover/recover_links.md +15 -0
- data/spec/block_docs/red_tests/abbrev.md +679 -0
- data/spec/block_docs/red_tests/lists7.md +32 -0
- data/spec/block_docs/red_tests/lists7b.md +65 -0
- data/spec/block_docs/red_tests/lists8.md +42 -0
- data/spec/block_docs/red_tests/ref.md +23 -0
- data/spec/block_docs/red_tests/xml.md +35 -0
- data/spec/block_docs/references/long_example.md +71 -0
- data/spec/block_docs/references/spaces_and_numbers.md +15 -0
- data/spec/block_docs/smartypants.md +114 -0
- data/spec/block_docs/syntax_hl.md +52 -0
- data/spec/block_docs/table_attributes.md +34 -0
- data/spec/block_docs/test.md +19 -0
- data/spec/block_docs/underscore_in_words.md +15 -0
- data/spec/block_docs/wrapping.md +67 -0
- data/spec/block_docs/xml2.md +19 -0
- data/spec/block_docs/xml3.md +26 -0
- data/spec/block_docs/xml_instruction.md +52 -0
- data/spec/block_spec.rb +49 -0
- data/spec/span_spec.rb +254 -0
- data/spec/spec_helper.rb +6 -0
- metadata +247 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
Write a comment here
|
2
|
+
*** Parameters: ***
|
3
|
+
{} # params
|
4
|
+
*** Markdown input: ***
|
5
|
+
|
6
|
+
h | h
|
7
|
+
----------|--
|
8
|
+
{:t} c1 | c2
|
9
|
+
{: summary="Table summary" .class1 style="color:red" border=3 width="50%" frame=lhs rules=cols cellspacing=2em cellpadding=4px}
|
10
|
+
|
11
|
+
{:t: scope="row"}
|
12
|
+
*** Output of inspect ***
|
13
|
+
md_el(:document,[
|
14
|
+
md_el(:table,[
|
15
|
+
md_el(:head_cell,["h"],{},[]),
|
16
|
+
md_el(:head_cell,["h"],{},[]),
|
17
|
+
md_el(:cell,[" c1"],{},[[:ref, "t"]]),
|
18
|
+
md_el(:cell,["c2"],{},[])
|
19
|
+
],{:align=>[:left, :left]},[["summary", "Table summary"], [:class, "class1"], ["style", "color:red"], ["border", "3"], ["width", "50%"], ["frame", "lhs"], ["rules", "cols"], ["cellspacing", "2em"], ["cellpadding", "4px"]]),
|
20
|
+
md_el(:ald,[],{:ald=>[["scope", "row"]],:ald_id=>"t"},[])
|
21
|
+
],{},[])
|
22
|
+
*** Output of to_html ***
|
23
|
+
<table class='class1' cellspacing='2em' rules='cols' border='3' frame='lhs' summary='Table summary' cellpadding='4px' width='50%' style='color:red'><thead><tr><th>h</th><th>h</th></tr></thead><tbody><tr><th scope='row' style='text-align: left;'> c1</th><td style='text-align: left;'>c2</td>
|
24
|
+
</tr></tbody></table>
|
25
|
+
*** Output of to_latex ***
|
26
|
+
\begin{tabular}{l|l}
|
27
|
+
h&h\\
|
28
|
+
\hline
|
29
|
+
c1&c2\\
|
30
|
+
\end{tabular}
|
31
|
+
*** Output of to_md ***
|
32
|
+
hh c1c2
|
33
|
+
*** Output of to_s ***
|
34
|
+
hh c1c2
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Write a comment abouth the test here.
|
2
|
+
*** Parameters: ***
|
3
|
+
{}
|
4
|
+
*** Markdown input: ***
|
5
|
+
|
6
|
+
$ python
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
*** Output of inspect ***
|
11
|
+
md_el(:document,[md_el(:code,[],{:raw_code=>" $ python "},[])],{},[])
|
12
|
+
*** Output of to_html ***
|
13
|
+
<pre><code> $ python </code></pre>
|
14
|
+
*** Output of to_latex ***
|
15
|
+
\begin{verbatim} $ python \end{verbatim}
|
16
|
+
*** Output of to_md ***
|
17
|
+
|
18
|
+
*** Output of to_s ***
|
19
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Note that Markdown.pl gives incorrect result here.
|
2
|
+
*** Parameters: ***
|
3
|
+
{} # params
|
4
|
+
*** Markdown input: ***
|
5
|
+
Ok, this_was a_really_old bug
|
6
|
+
*** Output of inspect ***
|
7
|
+
md_el(:document,[md_par(["Ok, this_was a_really_old bug"])],{},[])
|
8
|
+
*** Output of to_html ***
|
9
|
+
<p>Ok, this_was a_really_old bug</p>
|
10
|
+
*** Output of to_latex ***
|
11
|
+
Ok, this\_was a\_really\_old bug
|
12
|
+
*** Output of to_md ***
|
13
|
+
Ok, this_was a_really_old bug
|
14
|
+
*** Output of to_s ***
|
15
|
+
Ok, this_was a_really_old bug
|
@@ -0,0 +1,67 @@
|
|
1
|
+
Write a comment abouth the test here.
|
2
|
+
*** Parameters: ***
|
3
|
+
{}
|
4
|
+
*** Markdown input: ***
|
5
|
+
Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:
|
6
|
+
Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.
|
7
|
+
|
8
|
+
* Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
|
9
|
+
Lorem ipsum Break:
|
10
|
+
Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
|
11
|
+
* Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
|
12
|
+
|
13
|
+
*** Output of inspect ***
|
14
|
+
md_el(:document,[
|
15
|
+
md_par([
|
16
|
+
"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:",
|
17
|
+
md_el(:linebreak,[],{},[]),
|
18
|
+
"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet."
|
19
|
+
]),
|
20
|
+
md_el(:ul,[
|
21
|
+
md_el(:li_span,[
|
22
|
+
"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:",
|
23
|
+
md_el(:linebreak,[],{},[]),
|
24
|
+
"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet"
|
25
|
+
],{:want_my_paragraph=>false},[]),
|
26
|
+
md_el(:li_span,[
|
27
|
+
"Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet"
|
28
|
+
],{:want_my_paragraph=>false},[])
|
29
|
+
],{},[])
|
30
|
+
],{},[])
|
31
|
+
*** Output of to_html ***
|
32
|
+
<p>Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:<br />Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.</p>
|
33
|
+
|
34
|
+
<ul>
|
35
|
+
<li>Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:<br />Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet</li>
|
36
|
+
|
37
|
+
<li>Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet</li>
|
38
|
+
</ul>
|
39
|
+
*** Output of to_latex ***
|
40
|
+
Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:\newline Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.
|
41
|
+
|
42
|
+
\begin{itemize}%
|
43
|
+
\item Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:\newline Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
|
44
|
+
\item Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
|
45
|
+
|
46
|
+
\end{itemize}
|
47
|
+
*** Output of to_md ***
|
48
|
+
Lorem ipsum dolor amet. Lorem ipsum
|
49
|
+
dolor amet. Lorem ipsum dolor amet.
|
50
|
+
Lorem ipsum dolor amet. Lorem ipsum
|
51
|
+
dolor amet. Lorem ipsum dolor amet.
|
52
|
+
Lorem ipsum dolor amet. Break:
|
53
|
+
Lorem ipsum dolor amet. Lorem ipsum
|
54
|
+
dolor amet. Lorem ipsum dolor amet.
|
55
|
+
Lorem ipsum dolor amet.
|
56
|
+
|
57
|
+
-orem ipsum dolor amet. Lorem ipsum
|
58
|
+
dolor amet. Lorem ipsum dolor amet.
|
59
|
+
Lorem ipsum dolor amet Lorem ipsum
|
60
|
+
Break:
|
61
|
+
Lorem ipsum dolor amet. Lorem ipsum
|
62
|
+
dolor amet. Lorem ipsum dolor amet
|
63
|
+
-orem ipsum dolor amet. Lorem ipsum
|
64
|
+
dolor amet. Lorem ipsum dolor amet.
|
65
|
+
Lorem ipsum dolor amet
|
66
|
+
*** Output of to_s ***
|
67
|
+
Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor ametLorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
|
@@ -0,0 +1,19 @@
|
|
1
|
+
Write a comment here
|
2
|
+
*** Parameters: ***
|
3
|
+
{}
|
4
|
+
*** Markdown input: ***
|
5
|
+
<!--
|
6
|
+
<
|
7
|
+
-->
|
8
|
+
*** Output of inspect ***
|
9
|
+
md_el(:document,[md_html("<!--\n<\n-->")],{},[])
|
10
|
+
*** Output of to_html ***
|
11
|
+
<!--
|
12
|
+
<
|
13
|
+
-->
|
14
|
+
*** Output of to_latex ***
|
15
|
+
|
16
|
+
*** Output of to_md ***
|
17
|
+
|
18
|
+
*** Output of to_s ***
|
19
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
Write a comment here
|
2
|
+
*** Parameters: ***
|
3
|
+
{}
|
4
|
+
*** Markdown input: ***
|
5
|
+
<table markdown='1'>
|
6
|
+
Blah
|
7
|
+
<thead>
|
8
|
+
<td>*em*</td>
|
9
|
+
</thead>
|
10
|
+
</table>
|
11
|
+
|
12
|
+
*** Output of inspect ***
|
13
|
+
md_el(:document,[
|
14
|
+
md_html("<table markdown='1'>\n\tBlah\n\t<thead>\n\t\t<td>*em*</td>\n\t</thead>\n</table>")
|
15
|
+
],{},[])
|
16
|
+
*** Output of to_html ***
|
17
|
+
<table>Blah<thead>
|
18
|
+
<td><em>em</em></td>
|
19
|
+
</thead>
|
20
|
+
</table>
|
21
|
+
*** Output of to_latex ***
|
22
|
+
|
23
|
+
*** Output of to_md ***
|
24
|
+
|
25
|
+
*** Output of to_s ***
|
26
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
Directives should be preserved.
|
2
|
+
*** Parameters: ***
|
3
|
+
{}
|
4
|
+
*** Markdown input: ***
|
5
|
+
|
6
|
+
<? noTarget?>
|
7
|
+
<?php ?>
|
8
|
+
<?xml ?>
|
9
|
+
<?mrk ?>
|
10
|
+
|
11
|
+
Targets <? noTarget?> <?php ?> <?xml ?> <?mrk ?>
|
12
|
+
|
13
|
+
Inside: <?mrk puts "Inside: Hello" ?> last
|
14
|
+
|
15
|
+
|
16
|
+
*** Output of inspect ***
|
17
|
+
md_el(:document,[
|
18
|
+
md_el(:xml_instr,[],{:code=>" noTarget",:target=>""},[]),
|
19
|
+
md_el(:xml_instr,[],{:code=>"",:target=>"php"},[]),
|
20
|
+
md_el(:xml_instr,[],{:code=>"",:target=>"xml"},[]),
|
21
|
+
md_el(:xml_instr,[],{:code=>"",:target=>"mrk"},[]),
|
22
|
+
md_par([
|
23
|
+
"Targets ",
|
24
|
+
md_el(:xml_instr,[],{:code=>"noTarget",:target=>""},[]),
|
25
|
+
" ",
|
26
|
+
md_el(:xml_instr,[],{:code=>"",:target=>"php"},[]),
|
27
|
+
" ",
|
28
|
+
md_el(:xml_instr,[],{:code=>"",:target=>"xml"},[]),
|
29
|
+
" ",
|
30
|
+
md_el(:xml_instr,[],{:code=>"",:target=>"mrk"},[])
|
31
|
+
]),
|
32
|
+
md_par([
|
33
|
+
"Inside: ",
|
34
|
+
md_el(:xml_instr,[],{:code=>"puts \"Inside: Hello\"",:target=>"mrk"},[]),
|
35
|
+
" last"
|
36
|
+
])
|
37
|
+
],{},[])
|
38
|
+
*** Output of to_html ***
|
39
|
+
<? noTarget?><?php ?><?xml ?><?mrk ?>
|
40
|
+
<p>Targets <? noTarget?> <?php ?> <?xml ?> <?mrk ?></p>
|
41
|
+
|
42
|
+
<p>Inside: <?mrk puts "Inside: Hello"?> last</p>
|
43
|
+
*** Output of to_latex ***
|
44
|
+
Targets
|
45
|
+
|
46
|
+
Inside: last
|
47
|
+
*** Output of to_md ***
|
48
|
+
Targets
|
49
|
+
|
50
|
+
Inside: last
|
51
|
+
*** Output of to_s ***
|
52
|
+
Targets Inside: last
|
data/spec/block_spec.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
METHODS = [:to_html, :to_latex, :to_md, :to_s]
|
4
|
+
|
5
|
+
describe "A Maruku document" do
|
6
|
+
before(:all) do
|
7
|
+
@old_stderr = $stderr
|
8
|
+
$stderr = StringIO.new
|
9
|
+
end
|
10
|
+
|
11
|
+
after(:all) do
|
12
|
+
$stderr = @old_stderr
|
13
|
+
end
|
14
|
+
|
15
|
+
Dir[File.dirname(__FILE__) + "/block_docs/**/*.md"].each do |md|
|
16
|
+
describe " for the #{md} file" do
|
17
|
+
input = File.read(md).split(/\n\*{3}[^*\n]+\*{3}\n/m)
|
18
|
+
input = ["Write a comment here", "{}", input.first] if input.size == 1
|
19
|
+
comment = input.shift
|
20
|
+
params = eval(input.shift)
|
21
|
+
markdown = input.shift
|
22
|
+
ast = input.shift
|
23
|
+
|
24
|
+
before(:each) do
|
25
|
+
pending if md =~ Regexp.new("^" + Regexp.quote(File.dirname(__FILE__) + "/block_docs/red_tests"))
|
26
|
+
|
27
|
+
$already_warned_itex2mml = false
|
28
|
+
@doc = Maruku.new(markdown, params)
|
29
|
+
@expected = METHODS.zip(input).inject({}) {|h, (k, v)| h[k] = v.strip; h}
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should read in the output of #inspect as the same document" do
|
33
|
+
Maruku.new.instance_eval(@doc.inspect).should == @doc
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should read in the given AST as the same document" do
|
37
|
+
Maruku.new.instance_eval(ast).should == @doc
|
38
|
+
end
|
39
|
+
|
40
|
+
METHODS.each do |m|
|
41
|
+
it "should have the expected ##{m} output" do
|
42
|
+
res = @doc.send(m).strip
|
43
|
+
pending "install itex2mml" if m == :to_html && $already_warned_itex2mml
|
44
|
+
res.should == @expected[m]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/spec/span_spec.rb
ADDED
@@ -0,0 +1,254 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/spec_helper"
|
2
|
+
|
3
|
+
EXPECTATIONS = Maruku.new.instance_eval do
|
4
|
+
[
|
5
|
+
["", [], 'Empty string gives empty list'],
|
6
|
+
["a", ["a"], 'Easy char'],
|
7
|
+
[" a", ["a"], 'First space in the paragraph is ignored'],
|
8
|
+
["a\n \n", ["a"], 'Last spaces in the paragraphs are ignored'],
|
9
|
+
[' ', [], 'One char => nothing'],
|
10
|
+
[' ', [], 'Two chars => nothing'],
|
11
|
+
['a b', ['a b'], 'Spaces are compressed'],
|
12
|
+
['a b', ['a b'], 'Newlines are spaces'],
|
13
|
+
["a\nb", ['a b'], 'Newlines are spaces'],
|
14
|
+
["a\n b", ['a b'], 'Compress newlines 1'],
|
15
|
+
["a \nb", ['a b'], 'Compress newlines 2'],
|
16
|
+
[" \nb", ['b'], 'Compress newlines 3'],
|
17
|
+
["\nb", ['b'], 'Compress newlines 4'],
|
18
|
+
["b\n", ['b'], 'Compress newlines 5'],
|
19
|
+
["\n", [], 'Compress newlines 6'],
|
20
|
+
["\n\n\n", [], 'Compress newlines 7'],
|
21
|
+
|
22
|
+
[nil, :raise, "Should throw on nil input"],
|
23
|
+
|
24
|
+
# Code blocks
|
25
|
+
["`" , :raise, 'Unclosed single ticks'],
|
26
|
+
["``" , :raise, 'Unclosed double ticks'],
|
27
|
+
["`a`" , [md_code('a')], 'Simple inline code'],
|
28
|
+
["`` ` ``" , [md_code('`')], ],
|
29
|
+
["`` \\` ``" , [md_code('\\`')], ],
|
30
|
+
["``a``" , [md_code('a')], ],
|
31
|
+
["`` a ``" , [md_code('a')], ],
|
32
|
+
|
33
|
+
# Newlines
|
34
|
+
["a \n", ['a',md_el(:linebreak)], 'Two spaces give br.'],
|
35
|
+
["a \n", ['a'], 'Newlines 2'],
|
36
|
+
[" \n", [md_el(:linebreak)], 'Newlines 3'],
|
37
|
+
[" \n \n", [md_el(:linebreak),md_el(:linebreak)],'Newlines 3'],
|
38
|
+
[" \na \n", [md_el(:linebreak),'a',md_el(:linebreak)],'Newlines 3'],
|
39
|
+
|
40
|
+
# Inline HTML
|
41
|
+
["a < b", ['a < b'], '< can be on itself'],
|
42
|
+
["<hr>", [md_html('<hr />')], 'HR will be sanitized'],
|
43
|
+
["<hr/>", [md_html('<hr />')], 'Closed tag is ok'],
|
44
|
+
["<hr />", [md_html('<hr />')], 'Closed tag is ok 2'],
|
45
|
+
["<hr/>a", [md_html('<hr />'),'a'], 'Closed tag is ok 2'],
|
46
|
+
["<em></em>a", [md_html('<em></em>'),'a'], 'Inline HTML 1'],
|
47
|
+
["<em>e</em>a", [md_html('<em>e</em>'),'a'], 'Inline HTML 2'],
|
48
|
+
["a<em>e</em>b", ['a',md_html('<em>e</em>'),'b'], 'Inline HTML 3'],
|
49
|
+
["<em>e</em>a<em>f</em>",
|
50
|
+
[md_html('<em>e</em>'),'a',md_html('<em>f</em>')],
|
51
|
+
'Inline HTML 4'],
|
52
|
+
["<em>e</em><em>f</em>a",
|
53
|
+
[md_html('<em>e</em>'),md_html('<em>f</em>'),'a'],
|
54
|
+
'Inline HTML 5'],
|
55
|
+
|
56
|
+
["<img src='a' />", [md_html("<img src='a' />")], 'Attributes'],
|
57
|
+
["<img src='a'/>"],
|
58
|
+
|
59
|
+
# emphasis
|
60
|
+
["**", :raise, 'Unclosed double **'],
|
61
|
+
["\\*", ['*'], 'Escaping of *'],
|
62
|
+
["a *b* ", ['a ', md_em('b')], 'Emphasis 1'],
|
63
|
+
["a *b*", ['a ', md_em('b')], 'Emphasis 2'],
|
64
|
+
["a * b", ['a * b'], 'Emphasis 3'],
|
65
|
+
["a * b*", :raise, 'Unclosed emphasis'],
|
66
|
+
# same with underscore
|
67
|
+
["__", :raise, 'Unclosed double __'],
|
68
|
+
["\\_", ['_'], 'Escaping of _'],
|
69
|
+
["a _b_ ", ['a ', md_em('b')], 'Emphasis 4'],
|
70
|
+
["a _b_", ['a ', md_em('b')], 'Emphasis 5'],
|
71
|
+
["a _ b", ['a _ b'], 'Emphasis 6'],
|
72
|
+
["a _ b_", :raise, 'Unclosed emphasis'],
|
73
|
+
["_b_", [md_em('b')], 'Emphasis 7'],
|
74
|
+
["_b_ _c_", [md_em('b'),' ',md_em('c')], 'Emphasis 8'],
|
75
|
+
["_b__c_", [md_em('b'),md_em('c')], 'Emphasis 9'],
|
76
|
+
# underscores in word
|
77
|
+
["mod_ruby", ['mod_ruby'], 'Word with underscore'],
|
78
|
+
# strong
|
79
|
+
["**a*", :raise, 'Unclosed double ** 2'],
|
80
|
+
["\\**a*", ['*', md_em('a')], 'Escaping of *'],
|
81
|
+
["a **b** ", ['a ', md_strong('b')], 'Emphasis 1'],
|
82
|
+
["a **b**", ['a ', md_strong('b')], 'Emphasis 2'],
|
83
|
+
["a ** b", ['a ** b'], 'Emphasis 3'],
|
84
|
+
["a ** b**", :raise, 'Unclosed emphasis'],
|
85
|
+
["**b****c**", [md_strong('b'),md_strong('c')], 'Emphasis 9'],
|
86
|
+
# strong (with underscore)
|
87
|
+
["__a_", :raise, 'Unclosed double __ 2'],
|
88
|
+
|
89
|
+
# ["\\__a_", ['_', md_em('a')], 'Escaping of _'],
|
90
|
+
["a __b__ ", ['a ', md_strong('b')], 'Emphasis 1'],
|
91
|
+
["a __b__", ['a ', md_strong('b')], 'Emphasis 2'],
|
92
|
+
["a __ b", ['a __ b'], 'Emphasis 3'],
|
93
|
+
["a __ b__", :raise, 'Unclosed emphasis'],
|
94
|
+
["__b____c__", [md_strong('b'),md_strong('c')], 'Emphasis 9'],
|
95
|
+
# extra strong
|
96
|
+
["***a**", :raise, 'Unclosed triple *** '],
|
97
|
+
["\\***a**", ['*', md_strong('a')], 'Escaping of *'],
|
98
|
+
["a ***b*** ", ['a ', md_emstrong('b')], 'Strong elements'],
|
99
|
+
["a ***b***", ['a ', md_emstrong('b')]],
|
100
|
+
["a *** b", ['a *** b']],
|
101
|
+
["a ** * b", ['a ** * b']],
|
102
|
+
["***b******c***", [md_emstrong('b'),md_emstrong('c')]],
|
103
|
+
["a *** b***", :raise, 'Unclosed emphasis'],
|
104
|
+
# same with underscores
|
105
|
+
["___a__", :raise, 'Unclosed triple *** '],
|
106
|
+
# ["\\___a__", ['_', md_strong('a')], 'Escaping of _'],
|
107
|
+
["a ___b___ ", ['a ', md_emstrong('b')], 'Strong elements'],
|
108
|
+
["a ___b___", ['a ', md_emstrong('b')]],
|
109
|
+
["a ___ b", ['a ___ b']],
|
110
|
+
["a __ _ b", ['a __ _ b']],
|
111
|
+
["___b______c___", [md_emstrong('b'),md_emstrong('c')]],
|
112
|
+
["a ___ b___", :raise, 'Unclosed emphasis'],
|
113
|
+
# mixing is bad
|
114
|
+
["*a_", :raise, 'Mixing is bad'],
|
115
|
+
["_a*", :raise],
|
116
|
+
["**a__", :raise],
|
117
|
+
["__a**", :raise],
|
118
|
+
["___a***", :raise],
|
119
|
+
["***a___", :raise],
|
120
|
+
# links of the form [text][ref]
|
121
|
+
["\\[a]", ["[a]"], 'Escaping 1'],
|
122
|
+
["\\[a\\]", ["[a]"], 'Escaping 2'],
|
123
|
+
# This is valid in the new Markdown version
|
124
|
+
# ["[a]", ["a"], 'Not a link'],
|
125
|
+
["[a]", [ md_link(["a"],'a')], 'Empty link'],
|
126
|
+
["[a][]", ],
|
127
|
+
["[a][]b", [ md_link(["a"],'a'),'b'], 'Empty link'],
|
128
|
+
["[a\\]][]", [ md_link(["a]"],'a')], 'Escape inside link (throw ?] away)'],
|
129
|
+
|
130
|
+
["[a", :raise, 'Link not closed'],
|
131
|
+
["[a][", :raise, 'Ref not closed'],
|
132
|
+
|
133
|
+
# links of the form [text](url)
|
134
|
+
["\\[a](b)", ["[a](b)"], 'Links'],
|
135
|
+
["[a](url)c", [md_im_link(['a'],'url'),'c'], 'url'],
|
136
|
+
["[a]( url )c" ],
|
137
|
+
["[a] ( url )c" ],
|
138
|
+
["[a] ( url)c" ],
|
139
|
+
|
140
|
+
["[a](ur:/l/ 'Title')", [md_im_link(['a'],'ur:/l/','Title')],
|
141
|
+
'url and title'],
|
142
|
+
["[a] ( ur:/l/ \"Title\")" ],
|
143
|
+
["[a] ( ur:/l/ \"Title\")" ],
|
144
|
+
["[a]( ur:/l/ Title)", :raise, "Must quote title" ],
|
145
|
+
|
146
|
+
["[a](url 'Tit\\\"l\\\\e')", [md_im_link(['a'],'url','Tit"l\\e')],
|
147
|
+
'url and title escaped'],
|
148
|
+
["[a] ( url \"Tit\\\"l\\\\e\")" ],
|
149
|
+
["[a] ( url \"Tit\\\"l\\\\e\" )" ],
|
150
|
+
['[a] ( url "Tit\\"l\\\\e" )' ],
|
151
|
+
["[a]()", [md_im_link(['a'],'')], 'No URL is OK'],
|
152
|
+
|
153
|
+
["[a](\"Title\")", :raise, "No url specified" ],
|
154
|
+
["[a](url \"Title)", :raise, "Unclosed quotes" ],
|
155
|
+
["[a](url \"Title\\\")", :raise],
|
156
|
+
["[a](url \"Title\" ", :raise],
|
157
|
+
|
158
|
+
["[a](url \'Title\")", :raise, "Mixing is bad" ],
|
159
|
+
["[a](url \"Title\')"],
|
160
|
+
|
161
|
+
["[a](/url)", [md_im_link(['a'],'/url')], 'Funny chars in url'],
|
162
|
+
["[a](#url)", [md_im_link(['a'],'#url')]],
|
163
|
+
["[a](</script?foo=1&bar=2>)", [md_im_link(['a'],'/script?foo=1&bar=2')]],
|
164
|
+
|
165
|
+
|
166
|
+
# Images
|
167
|
+
["\\![a](url)", ['!', md_im_link(['a'],'url') ], 'Escaping images'],
|
168
|
+
|
169
|
+
["![a](url)", [md_im_image(['a'],'url')], 'Image no title'],
|
170
|
+
["![a]( url )" ],
|
171
|
+
["![a] ( url )" ],
|
172
|
+
["![a] ( url)" ],
|
173
|
+
|
174
|
+
["![a](url 'ti\"tle')", [md_im_image(['a'],'url','ti"tle')], 'Image with title'],
|
175
|
+
['![a]( url "ti\\"tle")' ],
|
176
|
+
|
177
|
+
["![a](url", :raise, 'Invalid images'],
|
178
|
+
["![a( url )" ],
|
179
|
+
["![a] ('url )" ],
|
180
|
+
|
181
|
+
["![a][imref]", [md_image(['a'],'imref')], 'Image with ref'],
|
182
|
+
["![a][ imref]"],
|
183
|
+
["![a][ imref ]"],
|
184
|
+
["![a][\timref\t]"],
|
185
|
+
|
186
|
+
|
187
|
+
['<http://example.com/?foo=1&bar=2>',
|
188
|
+
[md_url('http://example.com/?foo=1&bar=2')], 'Immediate link'],
|
189
|
+
['a<http://example.com/?foo=1&bar=2>b',
|
190
|
+
['a',md_url('http://example.com/?foo=1&bar=2'),'b'] ],
|
191
|
+
['<andrea@censi.org>',
|
192
|
+
[md_email('andrea@censi.org')], 'Email address'],
|
193
|
+
['<mailto:andrea@censi.org>'],
|
194
|
+
["Developmen <http://rubyforge.org/projects/maruku/>",
|
195
|
+
["Developmen ", md_url("http://rubyforge.org/projects/maruku/")]],
|
196
|
+
["a<!-- -->b", ['a',md_html('<!-- -->'),'b'],
|
197
|
+
'HTML Comment'],
|
198
|
+
|
199
|
+
["a<!--", :raise, 'Bad HTML Comment'],
|
200
|
+
["a<!-- ", :raise, 'Bad HTML Comment'],
|
201
|
+
|
202
|
+
["<?xml <?!--!`3 ?>", [md_xml_instr('xml','<?!--!`3')], 'XML processing instruction'],
|
203
|
+
["<? <?!--!`3 ?>", [md_xml_instr('','<?!--!`3')] ],
|
204
|
+
|
205
|
+
["<? ", :raise, 'Bad Server directive'],
|
206
|
+
|
207
|
+
["a <b", :raise, 'Bad HTML 1'],
|
208
|
+
["<b", :raise, 'Bad HTML 2'],
|
209
|
+
["<b!", :raise, 'Bad HTML 3'],
|
210
|
+
['`<div>`, `<table>`, `<pre>`, `<p>`',
|
211
|
+
[md_code('<div>'),', ',md_code('<table>'),', ',
|
212
|
+
md_code('<pre>'),', ',md_code('<p>')],
|
213
|
+
'Multiple HTML tags'],
|
214
|
+
|
215
|
+
["&andrea", ["&andrea"], 'Parsing of entities'],
|
216
|
+
# no escaping is allowed
|
217
|
+
# ["\\&andrea;", ["&andrea;"]],
|
218
|
+
["l&andrea;", ["l", md_entity('andrea')] ],
|
219
|
+
["&&andrea;", ["&", md_entity('andrea')] ],
|
220
|
+
["&123;;&",[md_entity('123'),';',md_entity('amp')]],
|
221
|
+
|
222
|
+
["a\nThe [syntax page] [s] provides",
|
223
|
+
['a The ', md_link(['syntax page'],'s'), ' provides'], 'Regression'],
|
224
|
+
|
225
|
+
['![a](url "ti"tle")', [md_im_image(['a'],'url','ti"tle')],
|
226
|
+
"Image with quotes"],
|
227
|
+
['![a](url \'ti"tle\')' ],
|
228
|
+
|
229
|
+
['[bar](/url/ "Title with "quotes" inside")',
|
230
|
+
[md_im_link(["bar"],'/url/', 'Title with "quotes" inside')],
|
231
|
+
"Link with quotes"],
|
232
|
+
]
|
233
|
+
end
|
234
|
+
|
235
|
+
EXPECTATIONS.each_cons(2) {|l, r| r[1] ||= l[1]}
|
236
|
+
|
237
|
+
describe "The Maruku span parser" do
|
238
|
+
before(:each) do
|
239
|
+
@doc = Maruku.new
|
240
|
+
@doc.attributes[:on_error] = :raise
|
241
|
+
end
|
242
|
+
|
243
|
+
EXPECTATIONS.each do |md, res, comment|
|
244
|
+
if res == :raise
|
245
|
+
it "should raise an error for \"#{md}\"" do
|
246
|
+
lambda {@doc.parse_span_better(md)}.should raise_error(Maruku::Exception)
|
247
|
+
end
|
248
|
+
else
|
249
|
+
it "should parse \"#{md}\" as #{res.inspect}" do
|
250
|
+
@doc.parse_span_better(md).should == res
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|