maruku 0.6.0 → 0.7.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE.txt +20 -0
  3. data/bin/maruku +153 -152
  4. data/bin/marutex +2 -29
  5. data/data/entities.xml +261 -0
  6. data/docs/markdown_syntax.md +9 -21
  7. data/docs/math.md +14 -18
  8. data/lib/maruku.rb +65 -78
  9. data/lib/maruku/attributes.rb +109 -214
  10. data/lib/maruku/defaults.rb +45 -67
  11. data/lib/maruku/document.rb +44 -0
  12. data/lib/maruku/element.rb +138 -0
  13. data/lib/maruku/errors.rb +80 -0
  14. data/lib/maruku/ext/div.rb +105 -113
  15. data/lib/maruku/ext/fenced_code.rb +97 -0
  16. data/lib/maruku/ext/math.rb +22 -26
  17. data/lib/maruku/ext/math/elements.rb +20 -26
  18. data/lib/maruku/ext/math/mathml_engines/blahtex.rb +92 -104
  19. data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +33 -26
  20. data/lib/maruku/ext/math/mathml_engines/none.rb +11 -19
  21. data/lib/maruku/ext/math/mathml_engines/ritex.rb +2 -4
  22. data/lib/maruku/ext/math/parsing.rb +121 -115
  23. data/lib/maruku/ext/math/to_html.rb +202 -187
  24. data/lib/maruku/ext/math/to_latex.rb +34 -21
  25. data/lib/maruku/helpers.rb +158 -257
  26. data/lib/maruku/html.rb +251 -0
  27. data/lib/maruku/input/charsource.rb +272 -319
  28. data/lib/maruku/input/extensions.rb +62 -63
  29. data/lib/maruku/input/html_helper.rb +233 -189
  30. data/lib/maruku/input/linesource.rb +90 -110
  31. data/lib/maruku/input/mdline.rb +131 -0
  32. data/lib/maruku/input/parse_block.rb +736 -613
  33. data/lib/maruku/input/parse_doc.rb +145 -217
  34. data/lib/maruku/input/parse_span.rb +740 -0
  35. data/lib/maruku/inspect_element.rb +60 -0
  36. data/lib/maruku/maruku.rb +14 -30
  37. data/lib/maruku/output/entity_table.rb +37 -0
  38. data/lib/maruku/output/s5/fancy.rb +462 -462
  39. data/lib/maruku/output/s5/to_s5.rb +115 -135
  40. data/lib/maruku/output/to_html.rb +907 -983
  41. data/lib/maruku/output/to_latex.rb +571 -563
  42. data/lib/maruku/output/to_markdown.rb +207 -162
  43. data/lib/maruku/output/to_s.rb +10 -52
  44. data/lib/maruku/string_utils.rb +129 -179
  45. data/lib/maruku/toc.rb +185 -196
  46. data/lib/maruku/version.rb +33 -38
  47. data/spec/block_docs/abbrev.md +776 -0
  48. data/{tests/unittest → spec/block_docs}/abbreviations.md +11 -20
  49. data/spec/block_docs/abbreviations2.md +27 -0
  50. data/{tests/unittest → spec/block_docs}/alt.md +2 -14
  51. data/{tests/unittest/pending → spec/block_docs}/amps.md +1 -13
  52. data/spec/block_docs/attribute_sanitize.md +22 -0
  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/spec/block_docs/atx_headers.md +22 -0
  59. data/spec/block_docs/auto_cdata.md +48 -0
  60. data/spec/block_docs/bad_cites.md +30 -0
  61. data/spec/block_docs/bad_divrefs.md +30 -0
  62. data/{tests/unittest → spec/block_docs}/blank.md +0 -12
  63. data/{tests/unittest → spec/block_docs}/blanks_in_code.md +16 -15
  64. data/spec/block_docs/block_quotes.md +66 -0
  65. data/{tests/unittest/loss.md → spec/block_docs/bug_def.md} +6 -18
  66. data/{tests/unittest → spec/block_docs}/bug_table.md +7 -19
  67. data/spec/block_docs/cites.md +37 -0
  68. data/{tests/unittest → spec/block_docs}/code.md +7 -14
  69. data/{tests/unittest → spec/block_docs}/code2.md +4 -14
  70. data/{tests/unittest → spec/block_docs}/code3.md +12 -16
  71. data/spec/block_docs/code4.md +79 -0
  72. data/{tests/unittest → spec/block_docs}/data_loss.md +2 -14
  73. data/spec/block_docs/div_without_newline.md +16 -0
  74. data/{tests/unittest → spec/block_docs}/divs/div1.md +0 -12
  75. data/{tests/unittest → spec/block_docs}/divs/div2.md +0 -12
  76. data/{tests/unittest → spec/block_docs}/divs/div3_nest.md +3 -15
  77. data/{tests/unittest → spec/block_docs}/easy.md +1 -13
  78. data/spec/block_docs/email.md +29 -0
  79. data/spec/block_docs/empty_cells.md +31 -0
  80. data/{tests/unittest → spec/block_docs}/encoding/iso-8859-1.md +1 -14
  81. data/{tests/unittest → spec/block_docs}/encoding/utf-8.md +0 -12
  82. data/{tests/unittest → spec/block_docs}/entities.md +33 -41
  83. data/{tests/unittest/notyet → spec/block_docs}/escape.md +2 -14
  84. data/{tests/unittest → spec/block_docs}/escaping.md +11 -22
  85. data/{tests/unittest → spec/block_docs}/extra_dl.md +2 -13
  86. data/{tests/unittest → spec/block_docs}/extra_header_id.md +14 -20
  87. data/{tests/unittest → spec/block_docs}/extra_table1.md +9 -21
  88. data/spec/block_docs/fenced_code_blocks.md +58 -0
  89. data/spec/block_docs/fenced_code_blocks_highlighted.md +17 -0
  90. data/{tests/unittest → spec/block_docs}/footnotes.md +12 -24
  91. data/spec/block_docs/footnotes2.md +82 -0
  92. data/spec/block_docs/hard.md +25 -0
  93. data/spec/block_docs/header_after_par.md +62 -0
  94. data/{tests/unittest → spec/block_docs}/headers.md +10 -18
  95. data/{tests/unittest → spec/block_docs}/hex_entities.md +7 -18
  96. data/{tests/unittest → spec/block_docs}/hrule.md +5 -12
  97. data/{tests/unittest → spec/block_docs}/html3.md +1 -13
  98. data/{tests/unittest → spec/block_docs}/html4.md +2 -14
  99. data/{tests/unittest → spec/block_docs}/html5.md +2 -14
  100. data/spec/block_docs/html_block_in_para.md +22 -0
  101. data/spec/block_docs/html_inline.md +25 -0
  102. data/spec/block_docs/html_trailing.md +31 -0
  103. data/spec/block_docs/ie.md +62 -0
  104. data/spec/block_docs/iframe.md +29 -0
  105. data/spec/block_docs/ignore_bad_header.md +9 -0
  106. data/{tests/unittest → spec/block_docs}/images.md +22 -28
  107. data/{tests/unittest → spec/block_docs}/images2.md +7 -17
  108. data/{tests/unittest → spec/block_docs}/inline_html.md +37 -67
  109. data/{tests/unittest → spec/block_docs}/inline_html2.md +1 -13
  110. data/spec/block_docs/inline_html_beginning.md +10 -0
  111. data/spec/block_docs/issue106.md +78 -0
  112. data/spec/block_docs/issue115.md +20 -0
  113. data/spec/block_docs/issue117.md +13 -0
  114. data/spec/block_docs/issue120.md +48 -0
  115. data/spec/block_docs/issue123.md +11 -0
  116. data/spec/block_docs/issue124.md +16 -0
  117. data/spec/block_docs/issue126.md +9 -0
  118. data/spec/block_docs/issue130.md +11 -0
  119. data/spec/block_docs/issue20.md +9 -0
  120. data/spec/block_docs/issue26.md +22 -0
  121. data/spec/block_docs/issue29.md +9 -0
  122. data/spec/block_docs/issue30.md +30 -0
  123. data/spec/block_docs/issue31.md +25 -0
  124. data/spec/block_docs/issue40.md +52 -0
  125. data/spec/block_docs/issue64.md +55 -0
  126. data/spec/block_docs/issue67.md +19 -0
  127. data/spec/block_docs/issue70.md +11 -0
  128. data/spec/block_docs/issue72.md +17 -0
  129. data/spec/block_docs/issue74.md +38 -0
  130. data/spec/block_docs/issue79.md +15 -0
  131. data/spec/block_docs/issue83.md +13 -0
  132. data/spec/block_docs/issue85.md +25 -0
  133. data/spec/block_docs/issue88.md +19 -0
  134. data/spec/block_docs/issue89.md +12 -0
  135. data/spec/block_docs/issue90.md +38 -0
  136. data/{tests/unittest/pending → spec/block_docs}/link.md +21 -18
  137. data/{tests/unittest → spec/block_docs}/links.md +33 -32
  138. data/spec/block_docs/links2.md +21 -0
  139. data/{tests/unittest → spec/block_docs}/list1.md +0 -12
  140. data/{tests/unittest → spec/block_docs}/list12.md +2 -14
  141. data/{tests/unittest → spec/block_docs}/list2.md +2 -14
  142. data/spec/block_docs/list_multipara.md +42 -0
  143. data/{tests/unittest → spec/block_docs}/lists.md +28 -29
  144. data/{tests/unittest → spec/block_docs}/lists10.md +2 -14
  145. data/spec/block_docs/lists11.md +23 -0
  146. data/spec/block_docs/lists12.md +43 -0
  147. data/spec/block_docs/lists13.md +55 -0
  148. data/spec/block_docs/lists14.md +61 -0
  149. data/spec/block_docs/lists15.md +36 -0
  150. data/spec/block_docs/lists6.md +88 -0
  151. data/spec/block_docs/lists7b.md +58 -0
  152. data/spec/block_docs/lists9.md +53 -0
  153. data/{tests/unittest → spec/block_docs}/lists_after_paragraph.md +19 -25
  154. data/spec/block_docs/lists_blank.md +35 -0
  155. data/{tests/unittest/list3.md → spec/block_docs/lists_blockquote_code.md} +2 -14
  156. data/{tests/unittest/list4.md → spec/block_docs/lists_need_blank_line.md} +44 -29
  157. data/spec/block_docs/lists_nested.md +44 -0
  158. data/spec/block_docs/lists_nested_blankline.md +34 -0
  159. data/spec/block_docs/lists_nested_deep.md +43 -0
  160. data/spec/block_docs/lists_ol.md +129 -0
  161. data/spec/block_docs/lists_ol2.md +147 -0
  162. data/spec/block_docs/lists_paraindent.md +42 -0
  163. data/spec/block_docs/lists_tab.md +54 -0
  164. data/spec/block_docs/loss.md +17 -0
  165. data/spec/block_docs/math-blahtex/equations.md +29 -0
  166. data/spec/block_docs/math-blahtex/inline.md +48 -0
  167. data/spec/block_docs/math-blahtex/math2.md +52 -0
  168. data/spec/block_docs/math-blahtex/table.md +25 -0
  169. data/spec/block_docs/math/embedded_invalid_svg.md +108 -0
  170. data/spec/block_docs/math/embedded_svg.md +136 -0
  171. data/spec/block_docs/math/equations.md +49 -0
  172. data/spec/block_docs/math/inline.md +46 -0
  173. data/spec/block_docs/math/math2.md +53 -0
  174. data/{tests/unittest → spec/block_docs}/math/notmath.md +0 -12
  175. data/spec/block_docs/math/raw_mathml.md +87 -0
  176. data/spec/block_docs/math/spaces_after_inline_math.md +17 -0
  177. data/spec/block_docs/math/table.md +25 -0
  178. data/{tests/unittest → spec/block_docs}/math/table2.md +11 -23
  179. data/{tests/unittest → spec/block_docs}/misc_sw.md +184 -121
  180. data/{tests/unittest → spec/block_docs}/olist.md +6 -18
  181. data/{tests/unittest → spec/block_docs}/one.md +0 -12
  182. data/{tests/unittest → spec/block_docs}/paragraph.md +0 -12
  183. data/{tests/unittest → spec/block_docs}/paragraph_rules/dont_merge_ref.md +4 -12
  184. data/{tests/unittest → spec/block_docs}/paragraph_rules/tab_is_blank.md +0 -12
  185. data/{tests/unittest → spec/block_docs}/paragraphs.md +1 -13
  186. data/{tests/unittest → spec/block_docs}/recover/recover_links.md +4 -16
  187. data/{tests/unittest/pending/ref.md → spec/block_docs/ref_with_period.md} +7 -16
  188. data/spec/block_docs/ref_with_title.md +22 -0
  189. data/{tests/unittest → spec/block_docs}/references/long_example.md +16 -23
  190. data/{tests/unittest → spec/block_docs}/references/spaces_and_numbers.md +0 -12
  191. data/{tests/unittest → spec/block_docs}/smartypants.md +24 -31
  192. data/{tests/unittest → spec/block_docs}/syntax_hl.md +13 -17
  193. data/{tests/unittest → spec/block_docs}/table_attributes.md +6 -20
  194. data/spec/block_docs/table_colspan.md +41 -0
  195. data/spec/block_docs/tables.md +47 -0
  196. data/spec/block_docs/tables2.md +74 -0
  197. data/{tests/unittest → spec/block_docs}/test.md +1 -13
  198. data/{tests/unittest/notyet → spec/block_docs}/ticks.md +1 -13
  199. data/spec/block_docs/toc.md +87 -0
  200. data/{tests/unittest/notyet → spec/block_docs}/triggering.md +14 -25
  201. data/{tests/unittest → spec/block_docs}/underscore_in_words.md +0 -12
  202. data/{tests/unittest → spec/block_docs}/wrapping.md +4 -16
  203. data/spec/block_docs/xml.md +33 -0
  204. data/spec/block_docs/xml3.md +24 -0
  205. data/spec/block_docs/xml_comments.md +32 -0
  206. data/{tests/unittest → spec/block_docs}/xml_instruction.md +9 -20
  207. data/spec/block_spec.rb +110 -0
  208. data/spec/cli_spec.rb +8 -0
  209. data/spec/span_spec.rb +263 -0
  210. data/spec/spec_helper.rb +3 -0
  211. data/spec/to_html_utf8_spec.rb +13 -0
  212. metadata +218 -202
  213. data/Rakefile +0 -73
  214. data/bin/marudown +0 -29
  215. data/bin/marutest +0 -345
  216. data/docs/changelog.md +0 -334
  217. data/lib/maruku/errors_management.rb +0 -92
  218. data/lib/maruku/ext/math/latex_fix.rb +0 -12
  219. data/lib/maruku/input/parse_span_better.rb +0 -746
  220. data/lib/maruku/input/rubypants.rb +0 -225
  221. data/lib/maruku/input/type_detection.rb +0 -147
  222. data/lib/maruku/output/to_latex_entities.rb +0 -367
  223. data/lib/maruku/output/to_latex_strings.rb +0 -64
  224. data/lib/maruku/structures.rb +0 -167
  225. data/lib/maruku/structures_inspect.rb +0 -87
  226. data/lib/maruku/structures_iterators.rb +0 -61
  227. data/lib/maruku/tests/benchmark.rb +0 -82
  228. data/lib/maruku/tests/new_parser.rb +0 -373
  229. data/lib/maruku/tests/tests.rb +0 -136
  230. data/lib/maruku/usage/example1.rb +0 -33
  231. data/maruku_gem.rb +0 -33
  232. data/tests/bugs/code_in_links.md +0 -101
  233. data/tests/bugs/complex_escaping.md +0 -38
  234. data/tests/math/syntax.md +0 -46
  235. data/tests/math_usage/document.md +0 -13
  236. data/tests/others/abbreviations.md +0 -11
  237. data/tests/others/blank.md +0 -4
  238. data/tests/others/code.md +0 -5
  239. data/tests/others/code2.md +0 -8
  240. data/tests/others/code3.md +0 -16
  241. data/tests/others/email.md +0 -4
  242. data/tests/others/entities.md +0 -19
  243. data/tests/others/escaping.md +0 -16
  244. data/tests/others/extra_dl.md +0 -101
  245. data/tests/others/extra_header_id.md +0 -13
  246. data/tests/others/extra_table1.md +0 -40
  247. data/tests/others/footnotes.md +0 -17
  248. data/tests/others/headers.md +0 -10
  249. data/tests/others/hrule.md +0 -10
  250. data/tests/others/images.md +0 -20
  251. data/tests/others/inline_html.md +0 -42
  252. data/tests/others/links.md +0 -38
  253. data/tests/others/list1.md +0 -4
  254. data/tests/others/list2.md +0 -5
  255. data/tests/others/list3.md +0 -8
  256. data/tests/others/lists.md +0 -32
  257. data/tests/others/lists_after_paragraph.md +0 -44
  258. data/tests/others/lists_ol.md +0 -39
  259. data/tests/others/misc_sw.md +0 -105
  260. data/tests/others/one.md +0 -1
  261. data/tests/others/paragraphs.md +0 -13
  262. data/tests/others/sss06.md +0 -352
  263. data/tests/others/test.md +0 -4
  264. data/tests/s5/s5profiling.md +0 -48
  265. data/tests/unittest/bug_def.md +0 -28
  266. data/tests/unittest/email.md +0 -32
  267. data/tests/unittest/hang.md +0 -29
  268. data/tests/unittest/html2.md +0 -34
  269. data/tests/unittest/ie.md +0 -61
  270. data/tests/unittest/links2.md +0 -34
  271. data/tests/unittest/lists11.md +0 -28
  272. data/tests/unittest/lists6.md +0 -53
  273. data/tests/unittest/lists9.md +0 -76
  274. data/tests/unittest/lists_ol.md +0 -274
  275. data/tests/unittest/math/equations.md +0 -86
  276. data/tests/unittest/math/inline.md +0 -58
  277. data/tests/unittest/math/math2.md +0 -57
  278. data/tests/unittest/math/table.md +0 -37
  279. data/tests/unittest/notyet/header_after_par.md +0 -70
  280. data/tests/unittest/pending/empty_cells.md +0 -49
  281. data/tests/unittest/red_tests/abbrev.md +0 -1388
  282. data/tests/unittest/red_tests/lists7.md +0 -68
  283. data/tests/unittest/red_tests/lists7b.md +0 -128
  284. data/tests/unittest/red_tests/lists8.md +0 -76
  285. data/tests/unittest/red_tests/xml.md +0 -70
  286. data/tests/unittest/xml2.md +0 -31
  287. data/tests/unittest/xml3.md +0 -38
  288. data/tests/utf8-files/simple.md +0 -1
  289. data/unit_test_block.sh +0 -5
  290. data/unit_test_span.sh +0 -3
@@ -1,26 +1,39 @@
1
- require 'maruku/ext/math/latex_fix'
1
+ module MaRuKu
2
+ module Out
3
+ module Latex
4
+ def to_latex_inline_math
5
+ fix_latex("$#{self.math.strip}$")
6
+ end
2
7
 
3
- module MaRuKu; module Out; module Latex
8
+ def to_latex_equation
9
+ if self.label
10
+ fix_latex("\\begin{equation}\n#{self.math.strip}\n\\label{#{self.label}}\\end{equation}\n")
11
+ else
12
+ fix_latex("\\begin{displaymath}\n#{self.math.strip}\n\\end{displaymath}\n")
13
+ end
14
+ end
4
15
 
5
- def to_latex_inline_math
6
- "$#{self.math.strip}$".fix_latex
7
- end
16
+ def to_latex_eqref
17
+ "\\eqref{#{self.eqid}}"
18
+ end
8
19
 
9
- def to_latex_equation
10
- if self.label
11
- l = "\\label{#{self.label}}"
12
- "\\begin{equation}\n#{self.math.strip}\n#{l}\\end{equation}\n".fix_latex
13
- else
14
- "\\begin{displaymath}\n#{self.math.strip}\n\\end{displaymath}\n".fix_latex
15
- end
16
- end
17
-
18
- def to_latex_eqref
19
- "\\eqref{#{self.eqid}}"
20
- end
20
+ def to_latex_divref
21
+ "\\ref{#{self.refid}}"
22
+ end
21
23
 
22
- def to_latex_divref
23
- "\\ref{#{self.refid}}"
24
- end
24
+ def to_latex_citation
25
+ "\\cite{#{self.cites.join(',')}}"
26
+ end
25
27
 
26
- end end end
28
+ private
29
+
30
+ def fix_latex(str)
31
+ return str unless self.get_setting(:html_math_engine) == 'itex2mml'
32
+ s = str.gsub("\\mathop{", "\\operatorname{")
33
+ s.gsub!(/\\begin\{svg\}.*?\\end\{svg\}/m, " ")
34
+ s.gsub!("\\array{","\\itexarray{")
35
+ s.gsub("\\space{", "\\itexspace{")
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,260 +1,161 @@
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
-
23
-
24
- # A series of helper functions for creating elements: they hide the
25
- # particular internal representation.
26
- #
27
- # Please, always use these instead of creating MDElement.
28
- #
1
+ require 'maruku/html'
29
2
 
30
3
  module MaRuKu
31
- module Helpers
32
-
33
- # if the first is a md_ial, it is used as such
34
- def md_el(node_type, children=[], meta={}, al=nil)
35
- if (e=children.first).kind_of?(MDElement) and
36
- e.node_type == :ial then
37
- if al
38
- al += e.ial
39
- else
40
- al = e.ial
41
- end
42
- children.shift
43
- end
44
- e = MDElement.new(node_type, children, meta, al)
45
- e.doc = @doc
46
- return e
47
- end
48
-
49
- def md_header(level, children, al=nil)
50
- md_el(:header, children, {:level => level}, al)
51
- end
52
-
53
- # Inline code
54
- def md_code(code, al=nil)
55
- md_el(:inline_code, [], {:raw_code => code}, al)
56
- end
57
-
58
- # Code block
59
- def md_codeblock(source, al=nil)
60
- md_el(:code, [], {:raw_code => source}, al)
61
- end
62
-
63
- def md_quote(children, al=nil)
64
- md_el(:quote, children, {}, al)
65
- end
66
-
67
- def md_li(children, want_my_par, al=nil)
68
- md_el(:li, children, {:want_my_paragraph=>want_my_par}, al)
69
- end
70
-
71
- def md_footnote(footnote_id, children, al=nil)
72
- md_el(:footnote, children, {:footnote_id=>footnote_id}, al)
73
- end
74
-
75
- def md_abbr_def(abbr, text, al=nil)
76
- md_el(:abbr_def, [], {:abbr=>abbr, :text=>text}, al)
77
- end
78
-
79
- def md_abbr(abbr, title)
80
- md_el(:abbr, [abbr], {:title=>title})
81
- end
82
-
83
- def md_html(raw_html, al=nil)
84
- e = md_el(:raw_html, [], {:raw_html=>raw_html})
85
- begin
86
- # remove newlines and whitespace at begin
87
- # end end of string, or else REXML gets confused
88
- raw_html = raw_html.gsub(/\A\s*</,'<').
89
- gsub(/>[\s\n]*\Z/,'>')
90
-
91
- raw_html = "<marukuwrap>#{raw_html}</marukuwrap>"
92
- e.instance_variable_set :@parsed_html,
93
- REXML::Document.new(raw_html)
94
- rescue REXML::ParseException => ex
95
- e.instance_variable_set :@parsed_html, nil
96
- maruku_recover "REXML cannot parse this block of HTML/XML:\n"+
97
- add_tabs(raw_html,1,'|') + "\n"+ex.inspect
98
- # " #{raw_html.inspect}\n\n"+ex.inspect
99
- end
100
- e
101
- end
102
-
103
- def md_link(children, ref_id, al=nil)
104
- md_el(:link, children, {:ref_id=>ref_id.downcase}, al)
105
- end
106
-
107
- def md_im_link(children, url, title=nil, al=nil)
108
- md_el(:im_link, children, {:url=>url,:title=>title}, al)
109
- end
110
-
111
- def md_image(children, ref_id, al=nil)
112
- md_el(:image, children, {:ref_id=>ref_id}, al)
113
- end
114
-
115
- def md_im_image(children, url, title=nil, al=nil)
116
- md_el(:im_image, children, {:url=>url,:title=>title},al)
117
- end
118
-
119
- def md_em(children, al=nil)
120
- md_el(:emphasis, [children].flatten, {}, al)
121
- end
122
-
123
- def md_br()
124
- md_el(:linebreak, [], {}, nil)
125
- end
126
-
127
- def md_hrule()
128
- md_el(:hrule, [], {}, nil)
129
- end
130
-
131
- def md_strong(children, al=nil)
132
- md_el(:strong, [children].flatten, {}, al)
133
- end
134
-
135
- def md_emstrong(children, al=nil)
136
- md_strong(md_em(children), al)
137
- end
138
-
139
- # <http://www.example.com/>
140
- def md_url(url, al=nil)
141
- md_el(:immediate_link, [], {:url=>url}, al)
142
- end
143
-
144
- # <andrea@rubyforge.org>
145
- # <mailto:andrea@rubyforge.org>
146
- def md_email(email, al=nil)
147
- md_el(:email_address, [], {:email=>email}, al)
148
- end
149
-
150
- def md_entity(entity_name, al=nil)
151
- md_el(:entity, [], {:entity_name=>entity_name}, al)
152
- end
153
-
154
- # Markdown extra
155
- def md_foot_ref(ref_id, al=nil)
156
- md_el(:footnote_reference, [], {:footnote_id=>ref_id}, al)
157
- end
158
-
159
- def md_par(children, al=nil)
160
- md_el(:paragraph, children, meta={}, al)
161
- end
162
-
163
- # [1]: http://url [properties]
164
- def md_ref_def(ref_id, url, title=nil, meta={}, al=nil)
165
- meta[:url] = url
166
- meta[:ref_id] = ref_id
167
- meta[:title] = title if title
168
- md_el(:ref_definition, [], meta, al)
169
- end
170
-
171
- # inline attribute list
172
- def md_ial(al)
173
- al = Maruku::AttributeList.new(al) if
174
- not al.kind_of?Maruku::AttributeList
175
- md_el(:ial, [], {:ial=>al})
176
- end
177
-
178
- # Attribute list definition
179
- def md_ald(id, al)
180
- md_el(:ald, [], {:ald_id=>id,:ald=>al})
181
- end
182
-
183
- # Server directive <?target code... ?>
184
- def md_xml_instr(target, code)
185
- md_el(:xml_instr, [], {:target=>target, :code=>code})
186
- end
187
-
4
+ # A collection of helper functions for creating Markdown elements.
5
+ # They hide the particular internal representations.
6
+ #
7
+ # Always use these rather than creating an {MDElement} directly.
8
+ module Helpers
9
+ # @param children [MDElement, String, Array<MDElement, String>]
10
+ # The child nodes.
11
+ # If the first child is a \{#md\_ial}, it's merged with `al`
12
+ def md_el(node_type, children=[], meta={}, al=nil)
13
+ children = Array(children)
14
+
15
+ first = children.first
16
+ if first && first.is_a?(MDElement) && first.node_type == :ial
17
+ if al
18
+ al += first.ial
19
+ else
20
+ al = first.ial
21
+ end
22
+ children.shift
23
+ end
24
+
25
+ e = MDElement.new(node_type, children, meta, al)
26
+ e.doc = @doc
27
+ e
28
+ end
29
+
30
+ def md_header(level, children, al=nil)
31
+ md_el(:header, children, { :level => level }, al)
32
+ end
33
+
34
+ # Inline code
35
+ def md_code(code, al=nil)
36
+ md_el(:inline_code, [], { :raw_code => code }, al)
37
+ end
38
+
39
+ # Code block
40
+ def md_codeblock(source, lang=nil, al=nil)
41
+ md_el(:code, [], { :raw_code => source, :lang => lang }, al)
42
+ end
43
+
44
+ def md_quote(children, al=nil)
45
+ md_el(:quote, children, {}, al)
46
+ end
47
+
48
+ def md_li(children, want_my_par=false, al=nil)
49
+ md_el(:li, children, { :want_my_paragraph => want_my_par }, al)
50
+ end
51
+
52
+ def md_footnote(footnote_id, children, al=nil)
53
+ md_el(:footnote, children, { :footnote_id => footnote_id }, al)
54
+ end
55
+
56
+ def md_abbr_def(abbr, text, al=nil)
57
+ md_el(:abbr_def, [], { :abbr => abbr, :text => text }, al)
58
+ end
59
+
60
+ def md_abbr(abbr, title)
61
+ md_el(:abbr, abbr, :title => title)
62
+ end
63
+
64
+ def md_html(raw_html, al=nil)
65
+ e = MDHTMLElement.new(:raw_html, [], :raw_html => raw_html)
66
+ e.doc = @doc
67
+ begin
68
+ # Set this as an attribute so it doesn't get included
69
+ # in metadata comparisons
70
+ e.parsed_html = MaRuKu::HTMLFragment.new(raw_html)
71
+ rescue => ex
72
+ maruku_recover "Maruku cannot parse this block of HTML/XML:\n" +
73
+ raw_html.gsub(/^/, '|').rstrip + "\n" + ex.to_s
74
+ end
75
+ e
76
+ end
77
+
78
+ def md_link(children, ref_id, al=nil)
79
+ md_el(:link, children, { :ref_id => ref_id }, al)
80
+ end
81
+
82
+ def md_im_link(children, url, title = nil, al=nil)
83
+ md_el(:im_link, children, { :url => url, :title => title }, al)
84
+ end
85
+
86
+ def md_image(children, ref_id, al=nil)
87
+ md_el(:image, children, { :ref_id => ref_id }, al)
88
+ end
89
+
90
+ def md_im_image(children, url, title=nil, al=nil)
91
+ md_el(:im_image, children, { :url => url, :title => title }, al)
92
+ end
93
+
94
+ def md_em(children, al=nil)
95
+ md_el(:emphasis, children, {}, al)
96
+ end
97
+
98
+ def md_br
99
+ md_el(:linebreak, [], {}, nil)
100
+ end
101
+
102
+ def md_hrule
103
+ md_el(:hrule, [], {}, nil)
104
+ end
105
+
106
+ def md_strong(children, al=nil)
107
+ md_el(:strong, children, {}, al)
108
+ end
109
+
110
+ def md_emstrong(children, al=nil)
111
+ md_strong(md_em(children), al)
112
+ end
113
+
114
+ # A URL to be linkified (e.g. `<http://www.example.com/>`).
115
+ def md_url(url, al=nil)
116
+ md_el(:immediate_link, [], { :url => url }, al)
117
+ end
118
+
119
+ # An email to be linkified
120
+ # (e.g. `<andrea@rubyforge.org>` or `<mailto:andrea@rubyforge.org>`).
121
+ def md_email(email, al=nil)
122
+ md_el(:email_address, [], { :email => email }, al)
123
+ end
124
+
125
+ def md_entity(entity_name, al=nil)
126
+ md_el(:entity, [], { :entity_name => entity_name }, al)
127
+ end
128
+
129
+ # Markdown extra
130
+ def md_foot_ref(ref_id, al=nil)
131
+ md_el(:footnote_reference, [], { :footnote_id => ref_id }, al)
132
+ end
133
+
134
+ def md_par(children, al=nil)
135
+ md_el(:paragraph, children, {}, al)
136
+ end
137
+
138
+ # A definition of a reference (e.g. `[1]: http://url [properties]`).
139
+ def md_ref_def(ref_id, url, title=nil, meta={}, al=nil)
140
+ all_meta = meta.merge({ :url => url, :ref_id => ref_id })
141
+ all_meta[:title] ||= title
142
+ md_el(:ref_definition, [], all_meta, al)
143
+ end
144
+
145
+ # inline attribute list
146
+ def md_ial(al)
147
+ al = Maruku::AttributeList.new(al) unless al.is_a?(Maruku::AttributeList)
148
+ md_el(:ial, [], :ial => al)
149
+ end
150
+
151
+ # Attribute list definition
152
+ def md_ald(id, al)
153
+ md_el(:ald, [], :ald_id => id, :ald => al)
154
+ end
155
+
156
+ # A server directive (e.g. `<?target code... ?>`)
157
+ def md_xml_instr(target, code)
158
+ md_el(:xml_instr, [], :target => target, :code => code)
159
+ end
160
+ end
188
161
  end
189
- end
190
-
191
- module MaRuKu
192
-
193
- class MDElement
194
- # outputs abbreviated form (this should be eval()uable to get the document)
195
- def inspect2
196
- s =
197
- case @node_type
198
- when :paragraph
199
- "md_par(%s)" % children_inspect
200
- when :footnote_reference
201
- "md_foot_ref(%s)" % self.footnote_id.inspect
202
- when :entity
203
- "md_entity(%s)" % self.entity_name.inspect
204
- when :email_address
205
- "md_email(%s)" % self.email.inspect
206
- when :inline_code
207
- "md_code(%s)" % self.raw_code.inspect
208
- when :raw_html
209
- "md_html(%s)" % self.raw_html.inspect
210
- when :emphasis
211
- "md_em(%s)" % children_inspect
212
- when :strong
213
- "md_strong(%s)" % children_inspect
214
- when :immediate_link
215
- "md_url(%s)" % self.url.inspect
216
- when :image
217
- "md_image(%s, %s)" % [
218
- children_inspect,
219
- self.ref_id.inspect]
220
- when :im_image
221
- "md_im_image(%s, %s, %s)" % [
222
- children_inspect,
223
- self.url.inspect,
224
- self.title.inspect]
225
- when :link
226
- "md_link(%s,%s)" % [
227
- children_inspect, self.ref_id.inspect]
228
- when :im_link
229
- "md_im_link(%s, %s, %s)" % [
230
- children_inspect,
231
- self.url.inspect,
232
- self.title.inspect,
233
- ]
234
- when :ref_definition
235
- "md_ref_def(%s, %s, %s)" % [
236
- self.ref_id.inspect,
237
- self.url.inspect,
238
- self.title.inspect
239
- ]
240
- when :ial
241
- "md_ial(%s)" % self.ial.inspect
242
- else
243
- return nil
244
- end
245
- if @al and not @al.empty? then
246
- s = s.chop + ", #{@al.inspect})"
247
- end
248
- s
249
- end
250
-
251
- end
252
-
253
- end
254
-
255
-
256
-
257
-
258
-
259
-
260
-