kramdown 0.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of kramdown might be problematic. Click here for more details.

Files changed (201) hide show
  1. data/AUTHORS +1 -0
  2. data/COPYING +24 -0
  3. data/ChangeLog +1416 -0
  4. data/GPL +674 -0
  5. data/README +20 -0
  6. data/Rakefile +300 -0
  7. data/VERSION +1 -0
  8. data/benchmark/benchmark.rb +33 -0
  9. data/benchmark/mdbasics.text +306 -0
  10. data/benchmark/mdsyntax.text +888 -0
  11. data/benchmark/testing.sh +9 -0
  12. data/benchmark/timing.sh +10 -0
  13. data/bin/kramdown +26 -0
  14. data/doc/default.css +293 -0
  15. data/doc/default.template +78 -0
  16. data/doc/index.page +89 -0
  17. data/doc/installation.page +90 -0
  18. data/doc/news.feed +10 -0
  19. data/doc/news.page +27 -0
  20. data/doc/quickref.page +474 -0
  21. data/doc/syntax.page +1089 -0
  22. data/doc/tests.page +44 -0
  23. data/doc/virtual +2 -0
  24. data/lib/kramdown.rb +23 -0
  25. data/lib/kramdown/converter.rb +215 -0
  26. data/lib/kramdown/document.rb +150 -0
  27. data/lib/kramdown/error.rb +27 -0
  28. data/lib/kramdown/extension.rb +73 -0
  29. data/lib/kramdown/parser.rb +1056 -0
  30. data/lib/kramdown/parser/registry.rb +62 -0
  31. data/setup.rb +1585 -0
  32. data/test/run_tests.rb +58 -0
  33. data/test/test_files.rb +39 -0
  34. data/test/testcases/block/01_blank_line/spaces.html +1 -0
  35. data/test/testcases/block/01_blank_line/spaces.text +3 -0
  36. data/test/testcases/block/01_blank_line/tabs.html +1 -0
  37. data/test/testcases/block/01_blank_line/tabs.text +6 -0
  38. data/test/testcases/block/02_eob/beginning.html +1 -0
  39. data/test/testcases/block/02_eob/beginning.text +3 -0
  40. data/test/testcases/block/02_eob/end.html +1 -0
  41. data/test/testcases/block/02_eob/end.text +3 -0
  42. data/test/testcases/block/02_eob/middle.html +1 -0
  43. data/test/testcases/block/02_eob/middle.text +5 -0
  44. data/test/testcases/block/03_paragraph/indented.html +18 -0
  45. data/test/testcases/block/03_paragraph/indented.text +19 -0
  46. data/test/testcases/block/03_paragraph/no_newline_at_end.html +5 -0
  47. data/test/testcases/block/03_paragraph/no_newline_at_end.text +5 -0
  48. data/test/testcases/block/03_paragraph/one_para.html +1 -0
  49. data/test/testcases/block/03_paragraph/one_para.text +1 -0
  50. data/test/testcases/block/03_paragraph/two_para.html +4 -0
  51. data/test/testcases/block/03_paragraph/two_para.text +4 -0
  52. data/test/testcases/block/04_header/atx_header.html +26 -0
  53. data/test/testcases/block/04_header/atx_header.text +24 -0
  54. data/test/testcases/block/04_header/atx_header_no_newline_at_end.html +1 -0
  55. data/test/testcases/block/04_header/atx_header_no_newline_at_end.text +1 -0
  56. data/test/testcases/block/04_header/setext_header.html +25 -0
  57. data/test/testcases/block/04_header/setext_header.text +27 -0
  58. data/test/testcases/block/04_header/setext_header_no_newline_at_end.html +1 -0
  59. data/test/testcases/block/04_header/setext_header_no_newline_at_end.text +2 -0
  60. data/test/testcases/block/04_header/with_auto_ids.html +17 -0
  61. data/test/testcases/block/04_header/with_auto_ids.options +1 -0
  62. data/test/testcases/block/04_header/with_auto_ids.text +19 -0
  63. data/test/testcases/block/05_blockquote/indented.html +25 -0
  64. data/test/testcases/block/05_blockquote/indented.text +14 -0
  65. data/test/testcases/block/05_blockquote/nested.html +9 -0
  66. data/test/testcases/block/05_blockquote/nested.text +5 -0
  67. data/test/testcases/block/05_blockquote/no_newline_at_end.html +4 -0
  68. data/test/testcases/block/05_blockquote/no_newline_at_end.text +2 -0
  69. data/test/testcases/block/05_blockquote/only_first_quoted.html +8 -0
  70. data/test/testcases/block/05_blockquote/only_first_quoted.text +4 -0
  71. data/test/testcases/block/05_blockquote/with_code_blocks.html +15 -0
  72. data/test/testcases/block/05_blockquote/with_code_blocks.text +11 -0
  73. data/test/testcases/block/06_codeblock/error.html +4 -0
  74. data/test/testcases/block/06_codeblock/error.text +4 -0
  75. data/test/testcases/block/06_codeblock/no_newline_at_end.html +2 -0
  76. data/test/testcases/block/06_codeblock/no_newline_at_end.text +1 -0
  77. data/test/testcases/block/06_codeblock/normal.html +13 -0
  78. data/test/testcases/block/06_codeblock/normal.text +10 -0
  79. data/test/testcases/block/06_codeblock/tilde_syntax.html +7 -0
  80. data/test/testcases/block/06_codeblock/tilde_syntax.text +9 -0
  81. data/test/testcases/block/06_codeblock/whitespace.html +3 -0
  82. data/test/testcases/block/06_codeblock/whitespace.text +3 -0
  83. data/test/testcases/block/06_codeblock/with_blank_line.html +13 -0
  84. data/test/testcases/block/06_codeblock/with_blank_line.text +11 -0
  85. data/test/testcases/block/06_codeblock/with_eob_marker.html +6 -0
  86. data/test/testcases/block/06_codeblock/with_eob_marker.text +5 -0
  87. data/test/testcases/block/07_horizontal_rule/error.html +7 -0
  88. data/test/testcases/block/07_horizontal_rule/error.text +7 -0
  89. data/test/testcases/block/07_horizontal_rule/normal.html +19 -0
  90. data/test/testcases/block/07_horizontal_rule/normal.text +19 -0
  91. data/test/testcases/block/08_list/escaping.html +17 -0
  92. data/test/testcases/block/08_list/escaping.text +17 -0
  93. data/test/testcases/block/08_list/list_and_hr.html +9 -0
  94. data/test/testcases/block/08_list/list_and_hr.text +5 -0
  95. data/test/testcases/block/08_list/list_and_others.html +38 -0
  96. data/test/testcases/block/08_list/list_and_others.text +25 -0
  97. data/test/testcases/block/08_list/mixed.html +111 -0
  98. data/test/testcases/block/08_list/mixed.text +66 -0
  99. data/test/testcases/block/08_list/nested.html +17 -0
  100. data/test/testcases/block/08_list/nested.text +7 -0
  101. data/test/testcases/block/08_list/other_first_element.html +39 -0
  102. data/test/testcases/block/08_list/other_first_element.text +18 -0
  103. data/test/testcases/block/08_list/simple_ol.html +19 -0
  104. data/test/testcases/block/08_list/simple_ol.text +13 -0
  105. data/test/testcases/block/08_list/simple_ul.html +61 -0
  106. data/test/testcases/block/08_list/simple_ul.text +43 -0
  107. data/test/testcases/block/08_list/single_item.html +3 -0
  108. data/test/testcases/block/08_list/single_item.text +1 -0
  109. data/test/testcases/block/08_list/special_cases.html +29 -0
  110. data/test/testcases/block/08_list/special_cases.text +19 -0
  111. data/test/testcases/block/09_html/auto_parse_block_html.html +17 -0
  112. data/test/testcases/block/09_html/auto_parse_block_html.options +1 -0
  113. data/test/testcases/block/09_html/auto_parse_block_html.text +14 -0
  114. data/test/testcases/block/09_html/comment.html +12 -0
  115. data/test/testcases/block/09_html/comment.text +12 -0
  116. data/test/testcases/block/09_html/filtered_html.html +1 -0
  117. data/test/testcases/block/09_html/filtered_html.options +1 -0
  118. data/test/testcases/block/09_html/filtered_html.text +1 -0
  119. data/test/testcases/block/09_html/html_and_codeblocks.html +15 -0
  120. data/test/testcases/block/09_html/html_and_codeblocks.options +1 -0
  121. data/test/testcases/block/09_html/html_and_codeblocks.text +13 -0
  122. data/test/testcases/block/09_html/invalid_html_1.html +5 -0
  123. data/test/testcases/block/09_html/invalid_html_1.text +5 -0
  124. data/test/testcases/block/09_html/invalid_html_2.html +6 -0
  125. data/test/testcases/block/09_html/invalid_html_2.text +5 -0
  126. data/test/testcases/block/09_html/parse_as_raw.html +26 -0
  127. data/test/testcases/block/09_html/parse_as_raw.text +16 -0
  128. data/test/testcases/block/09_html/parse_as_span.html +12 -0
  129. data/test/testcases/block/09_html/parse_as_span.text +7 -0
  130. data/test/testcases/block/09_html/processing_instruction.html +12 -0
  131. data/test/testcases/block/09_html/processing_instruction.text +12 -0
  132. data/test/testcases/block/09_html/simple.html +78 -0
  133. data/test/testcases/block/09_html/simple.text +56 -0
  134. data/test/testcases/block/10_ald/simple.html +2 -0
  135. data/test/testcases/block/10_ald/simple.text +8 -0
  136. data/test/testcases/block/11_ial/simple.html +17 -0
  137. data/test/testcases/block/11_ial/simple.text +25 -0
  138. data/test/testcases/block/12_extension/comment.html +5 -0
  139. data/test/testcases/block/12_extension/comment.text +11 -0
  140. data/test/testcases/block/12_extension/ignored.html +6 -0
  141. data/test/testcases/block/12_extension/ignored.text +11 -0
  142. data/test/testcases/block/12_extension/kdoptions.html +15 -0
  143. data/test/testcases/block/12_extension/kdoptions.text +18 -0
  144. data/test/testcases/block/12_extension/kdoptions2.html +10 -0
  145. data/test/testcases/block/12_extension/kdoptions2.text +5 -0
  146. data/test/testcases/block/12_extension/nokramdown.html +6 -0
  147. data/test/testcases/block/12_extension/nokramdown.text +11 -0
  148. data/test/testcases/span/01_link/empty.html +3 -0
  149. data/test/testcases/span/01_link/empty.text +3 -0
  150. data/test/testcases/span/01_link/image_in_a.html +5 -0
  151. data/test/testcases/span/01_link/image_in_a.text +5 -0
  152. data/test/testcases/span/01_link/imagelinks.html +12 -0
  153. data/test/testcases/span/01_link/imagelinks.text +14 -0
  154. data/test/testcases/span/01_link/inline.html +40 -0
  155. data/test/testcases/span/01_link/inline.text +42 -0
  156. data/test/testcases/span/01_link/link_defs.html +8 -0
  157. data/test/testcases/span/01_link/link_defs.text +22 -0
  158. data/test/testcases/span/01_link/links_with_angle_brackets.html +3 -0
  159. data/test/testcases/span/01_link/links_with_angle_brackets.text +3 -0
  160. data/test/testcases/span/01_link/reference.html +32 -0
  161. data/test/testcases/span/01_link/reference.text +42 -0
  162. data/test/testcases/span/02_emphasis/empty.html +3 -0
  163. data/test/testcases/span/02_emphasis/empty.text +3 -0
  164. data/test/testcases/span/02_emphasis/errors.html +9 -0
  165. data/test/testcases/span/02_emphasis/errors.text +9 -0
  166. data/test/testcases/span/02_emphasis/nesting.html +34 -0
  167. data/test/testcases/span/02_emphasis/nesting.text +30 -0
  168. data/test/testcases/span/02_emphasis/normal.html +42 -0
  169. data/test/testcases/span/02_emphasis/normal.text +42 -0
  170. data/test/testcases/span/03_codespan/empty.html +5 -0
  171. data/test/testcases/span/03_codespan/empty.text +5 -0
  172. data/test/testcases/span/03_codespan/errors.html +1 -0
  173. data/test/testcases/span/03_codespan/errors.text +1 -0
  174. data/test/testcases/span/03_codespan/normal.html +16 -0
  175. data/test/testcases/span/03_codespan/normal.text +16 -0
  176. data/test/testcases/span/04_footnote/definitions.html +14 -0
  177. data/test/testcases/span/04_footnote/definitions.text +18 -0
  178. data/test/testcases/span/04_footnote/footnote_nr.html +12 -0
  179. data/test/testcases/span/04_footnote/footnote_nr.options +1 -0
  180. data/test/testcases/span/04_footnote/footnote_nr.text +4 -0
  181. data/test/testcases/span/04_footnote/markers.html +46 -0
  182. data/test/testcases/span/04_footnote/markers.text +26 -0
  183. data/test/testcases/span/05_html/normal.html +17 -0
  184. data/test/testcases/span/05_html/normal.text +17 -0
  185. data/test/testcases/span/autolinks/url_links.html +9 -0
  186. data/test/testcases/span/autolinks/url_links.text +9 -0
  187. data/test/testcases/span/escaped_chars/normal.html +33 -0
  188. data/test/testcases/span/escaped_chars/normal.text +33 -0
  189. data/test/testcases/span/ial/simple.html +5 -0
  190. data/test/testcases/span/ial/simple.text +5 -0
  191. data/test/testcases/span/line_breaks/normal.html +11 -0
  192. data/test/testcases/span/line_breaks/normal.text +11 -0
  193. data/test/testcases/span/text_substitutions/entities.html +4 -0
  194. data/test/testcases/span/text_substitutions/entities.text +4 -0
  195. data/test/testcases/span/text_substitutions/greaterthan.html +1 -0
  196. data/test/testcases/span/text_substitutions/greaterthan.text +1 -0
  197. data/test/testcases/span/text_substitutions/lowerthan.html +1 -0
  198. data/test/testcases/span/text_substitutions/lowerthan.text +1 -0
  199. data/test/testcases/span/text_substitutions/typography.html +3 -0
  200. data/test/testcases/span/text_substitutions/typography.text +3 -0
  201. metadata +259 -0
@@ -0,0 +1,58 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ $:.unshift File.dirname(__FILE__) + '/../lib'
24
+ require 'kramdown'
25
+ require 'test/unit/assertions'
26
+ require 'yaml'
27
+
28
+ include Test::Unit::Assertions
29
+
30
+ arg = ARGV[0] || File.join(File.dirname(__FILE__), 'testcases')
31
+
32
+ arg = if File.directory?(arg)
33
+ File.join(arg, '**/*.text')
34
+ else
35
+ arg + '.text'
36
+ end
37
+
38
+ width = ((size = %x{stty size 2>/dev/null}).length > 0 ? size.split.last.to_i : 72) rescue 72
39
+ width -= 8
40
+ fwidth = 0
41
+ Dir[arg].each {|f| fwidth = [fwidth, f.length + 10].max }.each do |file|
42
+ print(('Testing ' + file + ' ').ljust([fwidth, width].min))
43
+ $stdout.flush
44
+
45
+ html_file = file.sub('.text', '.html')
46
+ opts_file = file.sub('.text', '.options')
47
+ options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {}
48
+ doc = Kramdown::Document.new(File.read(file), options)
49
+ begin
50
+ assert_equal(File.read(html_file), doc.to_html)
51
+ puts 'PASSED'
52
+ rescue Exception => e
53
+ puts ' FAILED'
54
+ puts $!.message if $VERBOSE
55
+ puts $!.backtrace if $DEBUG
56
+ end
57
+ puts "Warnings:\n" + doc.warnings.join("\n") if !doc.warnings.empty? && $VERBOSE
58
+ end
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ #--
4
+ # Copyright (C) 2009 Thomas Leitner <t_leitner@gmx.at>
5
+ #
6
+ # This file is part of kramdown.
7
+ #
8
+ # kramdown is free software: you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation, either version 3 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
20
+ #++
21
+ #
22
+
23
+ require 'test/unit'
24
+ require 'kramdown'
25
+ require 'yaml'
26
+
27
+ class TestFiles < Test::Unit::TestCase
28
+
29
+ Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |file|
30
+ define_method('test_' + file.tr('.', '_')) do
31
+ html_file = file.sub('.text', '.html')
32
+ opts_file = file.sub('.text', '.options')
33
+ options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {}
34
+ doc = Kramdown::Document.new(File.read(file), options)
35
+ assert_equal(File.read(html_file), doc.to_html, "Failed test #{file}")
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,18 @@
1
+ <p>This is a para.</p>
2
+
3
+ <p>This is a para.</p>
4
+
5
+ <p>This is a para.</p>
6
+
7
+ <p>This is a para.</p>
8
+
9
+ <pre><code>This is a code block.
10
+ </code></pre>
11
+
12
+ <p>And this is another.</p>
13
+
14
+ <p>A para
15
+ with
16
+ mixed
17
+ indents.
18
+ and with much indent</p>
@@ -0,0 +1,19 @@
1
+ This is a para.
2
+
3
+ This is a para.
4
+
5
+ This is a para.
6
+
7
+ This is a para.
8
+
9
+ This is a code block.
10
+
11
+
12
+
13
+ And this is another.
14
+
15
+ A para
16
+ with
17
+ mixed
18
+ indents.
19
+ and with much indent
@@ -0,0 +1,5 @@
1
+ <p>One paragraph
2
+ over
3
+ multiple lines.</p>
4
+
5
+ <p>Second one without newline.</p>
@@ -0,0 +1,5 @@
1
+ One paragraph
2
+ over
3
+ multiple lines.
4
+
5
+ Second one without newline.
@@ -0,0 +1 @@
1
+ <p>This is just a normal paragraph.</p>
@@ -0,0 +1 @@
1
+ This is just a normal paragraph.
@@ -0,0 +1,4 @@
1
+ <p>This is just a normal paragraph.
2
+ That goes on to the second line.</p>
3
+
4
+ <p>Another paragraph.</p>
@@ -0,0 +1,4 @@
1
+ This is just a normal paragraph.
2
+ That goes on to the second line.
3
+
4
+ Another paragraph.
@@ -0,0 +1,26 @@
1
+ <h1>This is a header</h1>
2
+
3
+ <h2>This is a header</h2>
4
+
5
+ <h3>This is a header</h3>
6
+
7
+ <h4>This is a header</h4>
8
+
9
+ <h5>This is a header</h5>
10
+
11
+ <h6>This is a header</h6>
12
+
13
+ <h2>Header</h2>
14
+ <blockquote>
15
+ <p>blockquote</p>
16
+ </blockquote>
17
+
18
+ <h6>header</h6>
19
+ <p>paragraph</p>
20
+
21
+ <blockquote>
22
+ <p>blockquote</p>
23
+ </blockquote>
24
+ <p>### not a header</p>
25
+
26
+ <h3>Last</h3>
@@ -0,0 +1,24 @@
1
+ # This is a header
2
+
3
+ ## This is a header
4
+
5
+ ### This is a header
6
+
7
+ #### This is a header
8
+
9
+ ##### This is a header
10
+
11
+ ###### This is a header
12
+
13
+
14
+
15
+ ##Header #####
16
+ > blockquote
17
+
18
+ ###### header
19
+ paragraph
20
+
21
+ > blockquote
22
+ ### not a header
23
+
24
+ ### Last
@@ -0,0 +1,25 @@
1
+ <h2>test</h2>
2
+
3
+ <h1>test2</h1>
4
+
5
+ <h2>test</h2>
6
+ <p>para</p>
7
+
8
+ <pre><code> header
9
+ </code></pre>
10
+ <p>=</p>
11
+
12
+ <p>=</p>
13
+
14
+ <p>This is a para.
15
+ With two lines.
16
+ And not a header.
17
+ =================</p>
18
+
19
+ <blockquote>
20
+ <p>Blockquote.</p>
21
+ </blockquote>
22
+ <p>Not a Header</p>
23
+ <hr />
24
+
25
+ <h2>header</h2>
@@ -0,0 +1,27 @@
1
+ test
2
+ -
3
+
4
+ test2
5
+ =========
6
+
7
+ test
8
+ -
9
+ para
10
+
11
+ header
12
+ =
13
+
14
+
15
+ =
16
+
17
+ This is a para.
18
+ With two lines.
19
+ And not a header.
20
+ =================
21
+
22
+ > Blockquote.
23
+ Not a Header
24
+ ---
25
+
26
+ header
27
+ ------
@@ -0,0 +1,17 @@
1
+ <h1 id="this-is-a-header">This is a header</h1>
2
+
3
+ <h2 id="another-one-1-here">12. Another one-1-here</h2>
4
+
5
+ <h3 id="do--it-now">Do ^&amp; it now</h3>
6
+
7
+ <h1 id="hallo">Hallo</h1>
8
+
9
+ <h2 id="not-now">Not now</h2>
10
+
11
+ <h1 id="hallo-1">Hallo</h1>
12
+
13
+ <h1 id="section">23232</h1>
14
+
15
+ <h1 id="section-1">33333</h1>
16
+
17
+ <h2 id="hallo-2">hallO</h2>
@@ -0,0 +1,19 @@
1
+ # This is a header
2
+
3
+ ## 12. Another one-1-here
4
+
5
+ ### Do ^& it now
6
+
7
+ Hallo
8
+ =====
9
+
10
+ Not now
11
+ -------
12
+
13
+ # Hallo
14
+
15
+ # 23232
16
+
17
+ # 33333
18
+
19
+ ## hallO
@@ -0,0 +1,25 @@
1
+ <blockquote>
2
+ <p>A normal blockquote.</p>
3
+ </blockquote>
4
+
5
+ <blockquote>
6
+ <p>A normal blockquote.</p>
7
+ </blockquote>
8
+
9
+ <blockquote>
10
+ <p>A normal blockquote.</p>
11
+ </blockquote>
12
+
13
+ <blockquote>
14
+ <p>A normal blockquote.</p>
15
+ </blockquote>
16
+
17
+ <pre><code>&gt; A codeblock
18
+ </code></pre>
19
+
20
+ <blockquote>
21
+ <p>Blockquote
22
+ with
23
+ mixed
24
+ indents.</p>
25
+ </blockquote>
@@ -0,0 +1,14 @@
1
+ > A normal blockquote.
2
+
3
+ > A normal blockquote.
4
+
5
+ > A normal blockquote.
6
+
7
+ > A normal blockquote.
8
+
9
+ > A codeblock
10
+
11
+ > Blockquote
12
+ > with
13
+ >mixed
14
+ > indents.
@@ -0,0 +1,9 @@
1
+ <blockquote>
2
+ <p>foo</p>
3
+
4
+ <blockquote>
5
+ <p>bar
6
+ baz</p>
7
+ </blockquote>
8
+ <p>foo</p>
9
+ </blockquote>
@@ -0,0 +1,5 @@
1
+ > foo
2
+ >
3
+ > > bar
4
+ >> baz
5
+ > foo
@@ -0,0 +1,4 @@
1
+ <blockquote>
2
+ <p>This is a block quote
3
+ with no newline.</p>
4
+ </blockquote>