maruku 0.6.1 → 0.7.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (263) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/MIT-LICENSE.txt +20 -0
  5. data/bin/maruku +153 -152
  6. data/bin/marutex +2 -29
  7. data/data/entities.xml +261 -0
  8. data/docs/math.md +14 -18
  9. data/lib/maruku.rb +65 -77
  10. data/lib/maruku/attributes.rb +109 -214
  11. data/lib/maruku/defaults.rb +45 -67
  12. data/lib/maruku/document.rb +43 -0
  13. data/lib/maruku/element.rb +112 -0
  14. data/lib/maruku/errors.rb +71 -0
  15. data/lib/maruku/ext/div.rb +105 -113
  16. data/lib/maruku/ext/fenced_code.rb +97 -0
  17. data/lib/maruku/ext/math.rb +22 -26
  18. data/lib/maruku/ext/math/elements.rb +20 -26
  19. data/lib/maruku/ext/math/mathml_engines/blahtex.rb +92 -104
  20. data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +33 -26
  21. data/lib/maruku/ext/math/mathml_engines/none.rb +11 -19
  22. data/lib/maruku/ext/math/mathml_engines/ritex.rb +2 -4
  23. data/lib/maruku/ext/math/parsing.rb +107 -113
  24. data/lib/maruku/ext/math/to_html.rb +184 -187
  25. data/lib/maruku/ext/math/to_latex.rb +30 -21
  26. data/lib/maruku/helpers.rb +158 -257
  27. data/lib/maruku/html.rb +254 -0
  28. data/lib/maruku/input/charsource.rb +272 -319
  29. data/lib/maruku/input/extensions.rb +62 -63
  30. data/lib/maruku/input/html_helper.rb +220 -189
  31. data/lib/maruku/input/linesource.rb +90 -110
  32. data/lib/maruku/input/mdline.rb +129 -0
  33. data/lib/maruku/input/parse_block.rb +618 -612
  34. data/lib/maruku/input/parse_doc.rb +145 -215
  35. data/lib/maruku/input/parse_span.rb +658 -0
  36. data/lib/maruku/input/rubypants.rb +200 -128
  37. data/lib/maruku/inspect_element.rb +60 -0
  38. data/lib/maruku/maruku.rb +10 -31
  39. data/lib/maruku/output/entity_table.rb +33 -0
  40. data/lib/maruku/output/s5/fancy.rb +462 -462
  41. data/lib/maruku/output/s5/to_s5.rb +115 -135
  42. data/lib/maruku/output/to_html.rb +898 -983
  43. data/lib/maruku/output/to_latex.rb +561 -560
  44. data/lib/maruku/output/to_markdown.rb +207 -162
  45. data/lib/maruku/output/to_s.rb +11 -52
  46. data/lib/maruku/string_utils.rb +129 -179
  47. data/lib/maruku/toc.rb +185 -196
  48. data/lib/maruku/version.rb +33 -38
  49. data/spec/block_docs/abbrev.md +776 -0
  50. data/{tests/unittest → spec/block_docs}/abbreviations.md +11 -20
  51. data/{tests/unittest → spec/block_docs}/alt.md +2 -14
  52. data/{tests/unittest/pending → spec/block_docs}/amps.md +1 -13
  53. data/{tests/unittest → spec/block_docs}/attributes/att2.md +0 -12
  54. data/{tests/unittest → spec/block_docs}/attributes/att3.md +2 -14
  55. data/{tests/unittest → spec/block_docs}/attributes/attributes.md +12 -16
  56. data/{tests/unittest → spec/block_docs}/attributes/circular.md +0 -12
  57. data/{tests/unittest → spec/block_docs}/attributes/default.md +1 -13
  58. data/{tests/unittest → spec/block_docs}/blank.md +0 -12
  59. data/{tests/unittest → spec/block_docs}/blanks_in_code.md +16 -15
  60. data/{tests/unittest/loss.md → spec/block_docs/bug_def.md} +6 -18
  61. data/{tests/unittest → spec/block_docs}/bug_table.md +3 -15
  62. data/{tests/unittest → spec/block_docs}/code.md +7 -14
  63. data/{tests/unittest → spec/block_docs}/code2.md +4 -14
  64. data/{tests/unittest → spec/block_docs}/code3.md +12 -16
  65. data/{tests/unittest → spec/block_docs}/data_loss.md +2 -14
  66. data/{tests/unittest → spec/block_docs}/divs/div1.md +0 -12
  67. data/{tests/unittest → spec/block_docs}/divs/div2.md +0 -12
  68. data/{tests/unittest → spec/block_docs}/divs/div3_nest.md +3 -15
  69. data/{tests/unittest → spec/block_docs}/easy.md +1 -13
  70. data/spec/block_docs/email.md +29 -0
  71. data/{tests/unittest/pending → spec/block_docs}/empty_cells.md +3 -15
  72. data/{tests/unittest → spec/block_docs}/encoding/iso-8859-1.md +1 -14
  73. data/{tests/unittest → spec/block_docs}/encoding/utf-8.md +0 -12
  74. data/{tests/unittest → spec/block_docs}/entities.md +27 -29
  75. data/{tests/unittest/notyet → spec/block_docs}/escape.md +2 -14
  76. data/{tests/unittest → spec/block_docs}/escaping.md +11 -22
  77. data/{tests/unittest → spec/block_docs}/extra_dl.md +2 -13
  78. data/{tests/unittest → spec/block_docs}/extra_header_id.md +14 -20
  79. data/{tests/unittest → spec/block_docs}/extra_table1.md +3 -15
  80. data/spec/block_docs/fenced_code_blocks.md +66 -0
  81. data/spec/block_docs/fenced_code_blocks_highlighted.md +18 -0
  82. data/{tests/unittest → spec/block_docs}/footnotes.md +12 -24
  83. data/spec/block_docs/footnotes2.md +78 -0
  84. data/spec/block_docs/hard.md +25 -0
  85. data/spec/block_docs/header_after_par.md +62 -0
  86. data/{tests/unittest → spec/block_docs}/headers.md +10 -18
  87. data/{tests/unittest → spec/block_docs}/hex_entities.md +7 -18
  88. data/{tests/unittest → spec/block_docs}/hrule.md +5 -12
  89. data/{tests/unittest → spec/block_docs}/html3.md +1 -13
  90. data/{tests/unittest → spec/block_docs}/html4.md +2 -14
  91. data/{tests/unittest → spec/block_docs}/html5.md +2 -14
  92. data/spec/block_docs/html_block_in_para.md +22 -0
  93. data/spec/block_docs/html_inline.md +25 -0
  94. data/spec/block_docs/html_trailing.md +31 -0
  95. data/spec/block_docs/ie.md +62 -0
  96. data/spec/block_docs/iframe.md +29 -0
  97. data/{tests/unittest → spec/block_docs}/images.md +22 -28
  98. data/{tests/unittest → spec/block_docs}/images2.md +7 -17
  99. data/{tests/unittest → spec/block_docs}/inline_html.md +37 -67
  100. data/{tests/unittest → spec/block_docs}/inline_html2.md +1 -13
  101. data/spec/block_docs/inline_html_beginning.md +10 -0
  102. data/spec/block_docs/issue20.md +9 -0
  103. data/spec/block_docs/issue26.md +22 -0
  104. data/spec/block_docs/issue29.md +9 -0
  105. data/spec/block_docs/issue30.md +30 -0
  106. data/spec/block_docs/issue31.md +25 -0
  107. data/spec/block_docs/issue40.md +40 -0
  108. data/spec/block_docs/issue64.md +55 -0
  109. data/spec/block_docs/issue67.md +19 -0
  110. data/spec/block_docs/issue70.md +11 -0
  111. data/spec/block_docs/issue72.md +17 -0
  112. data/spec/block_docs/issue74.md +38 -0
  113. data/spec/block_docs/issue79.md +15 -0
  114. data/spec/block_docs/issue83.md +13 -0
  115. data/spec/block_docs/issue85.md +25 -0
  116. data/spec/block_docs/issue88.md +19 -0
  117. data/spec/block_docs/issue89.md +12 -0
  118. data/spec/block_docs/issue90.md +38 -0
  119. data/{tests/unittest/pending → spec/block_docs}/link.md +21 -18
  120. data/{tests/unittest → spec/block_docs}/links.md +33 -32
  121. data/spec/block_docs/links2.md +21 -0
  122. data/{tests/unittest → spec/block_docs}/list1.md +0 -12
  123. data/{tests/unittest → spec/block_docs}/list12.md +2 -14
  124. data/{tests/unittest → spec/block_docs}/list2.md +2 -14
  125. data/spec/block_docs/list_multipara.md +42 -0
  126. data/{tests/unittest → spec/block_docs}/lists.md +28 -29
  127. data/{tests/unittest → spec/block_docs}/lists10.md +2 -14
  128. data/spec/block_docs/lists11.md +23 -0
  129. data/spec/block_docs/lists12.md +43 -0
  130. data/spec/block_docs/lists13.md +55 -0
  131. data/spec/block_docs/lists14.md +61 -0
  132. data/spec/block_docs/lists15.md +36 -0
  133. data/spec/block_docs/lists6.md +88 -0
  134. data/spec/block_docs/lists7b.md +58 -0
  135. data/spec/block_docs/lists9.md +53 -0
  136. data/{tests/unittest → spec/block_docs}/lists_after_paragraph.md +19 -25
  137. data/spec/block_docs/lists_blank.md +35 -0
  138. data/{tests/unittest/list3.md → spec/block_docs/lists_blockquote_code.md} +2 -14
  139. data/{tests/unittest/list4.md → spec/block_docs/lists_need_blank_line.md} +50 -21
  140. data/spec/block_docs/lists_nested.md +44 -0
  141. data/spec/block_docs/lists_nested_blankline.md +28 -0
  142. data/spec/block_docs/lists_nested_deep.md +43 -0
  143. data/{tests/unittest → spec/block_docs}/lists_ol.md +37 -54
  144. data/spec/block_docs/lists_paraindent.md +47 -0
  145. data/spec/block_docs/lists_tab.md +54 -0
  146. data/spec/block_docs/loss.md +17 -0
  147. data/spec/block_docs/math-blahtex/equations.md +30 -0
  148. data/spec/block_docs/math-blahtex/inline.md +48 -0
  149. data/spec/block_docs/math-blahtex/math2.md +45 -0
  150. data/spec/block_docs/math-blahtex/table.md +25 -0
  151. data/spec/block_docs/math/embedded_invalid_svg.md +79 -0
  152. data/spec/block_docs/math/embedded_svg.md +97 -0
  153. data/spec/block_docs/math/equations.md +44 -0
  154. data/{tests/unittest → spec/block_docs}/math/inline.md +7 -19
  155. data/spec/block_docs/math/math2.md +45 -0
  156. data/{tests/unittest → spec/block_docs}/math/notmath.md +0 -12
  157. data/spec/block_docs/math/raw_mathml.md +87 -0
  158. data/spec/block_docs/math/table.md +25 -0
  159. data/{tests/unittest → spec/block_docs}/math/table2.md +5 -17
  160. data/{tests/unittest → spec/block_docs}/misc_sw.md +181 -118
  161. data/{tests/unittest → spec/block_docs}/olist.md +6 -18
  162. data/{tests/unittest → spec/block_docs}/one.md +0 -12
  163. data/{tests/unittest → spec/block_docs}/paragraph.md +0 -12
  164. data/{tests/unittest → spec/block_docs}/paragraph_rules/dont_merge_ref.md +4 -12
  165. data/{tests/unittest → spec/block_docs}/paragraph_rules/tab_is_blank.md +0 -12
  166. data/{tests/unittest → spec/block_docs}/paragraphs.md +1 -13
  167. data/{tests/unittest → spec/block_docs}/recover/recover_links.md +4 -16
  168. data/{tests/unittest/pending/ref.md → spec/block_docs/ref_with_period.md} +7 -16
  169. data/spec/block_docs/ref_with_title.md +22 -0
  170. data/{tests/unittest → spec/block_docs}/references/long_example.md +16 -23
  171. data/{tests/unittest → spec/block_docs}/references/spaces_and_numbers.md +0 -12
  172. data/{tests/unittest → spec/block_docs}/smartypants.md +24 -31
  173. data/{tests/unittest → spec/block_docs}/syntax_hl.md +13 -17
  174. data/{tests/unittest → spec/block_docs}/table_attributes.md +2 -14
  175. data/spec/block_docs/tables.md +58 -0
  176. data/{tests/unittest → spec/block_docs}/test.md +1 -13
  177. data/{tests/unittest/notyet → spec/block_docs}/ticks.md +1 -13
  178. data/spec/block_docs/toc.md +87 -0
  179. data/{tests/unittest/notyet → spec/block_docs}/triggering.md +14 -25
  180. data/{tests/unittest → spec/block_docs}/underscore_in_words.md +0 -12
  181. data/{tests/unittest → spec/block_docs}/wrapping.md +4 -16
  182. data/spec/block_docs/xml.md +33 -0
  183. data/{tests/unittest → spec/block_docs}/xml2.md +0 -12
  184. data/spec/block_docs/xml3.md +24 -0
  185. data/{tests/unittest → spec/block_docs}/xml_instruction.md +9 -20
  186. data/spec/block_spec.rb +110 -0
  187. data/spec/cli_spec.rb +8 -0
  188. data/spec/span_spec.rb +256 -0
  189. data/spec/spec_helper.rb +2 -0
  190. data/spec/to_html_utf8_spec.rb +13 -0
  191. metadata +205 -243
  192. metadata.gz.sig +3 -0
  193. data/Rakefile +0 -48
  194. data/bin/marudown +0 -29
  195. data/bin/marutest +0 -345
  196. data/docs/changelog.md +0 -334
  197. data/lib/maruku/errors_management.rb +0 -92
  198. data/lib/maruku/ext/math/latex_fix.rb +0 -12
  199. data/lib/maruku/input/parse_span_better.rb +0 -746
  200. data/lib/maruku/input/type_detection.rb +0 -147
  201. data/lib/maruku/output/to_latex_entities.rb +0 -367
  202. data/lib/maruku/output/to_latex_strings.rb +0 -64
  203. data/lib/maruku/structures.rb +0 -167
  204. data/lib/maruku/structures_inspect.rb +0 -87
  205. data/lib/maruku/structures_iterators.rb +0 -61
  206. data/lib/maruku/tests/benchmark.rb +0 -82
  207. data/lib/maruku/tests/new_parser.rb +0 -373
  208. data/lib/maruku/tests/tests.rb +0 -136
  209. data/lib/maruku/usage/example1.rb +0 -33
  210. data/tests/bugs/code_in_links.md +0 -101
  211. data/tests/bugs/complex_escaping.md +0 -38
  212. data/tests/math/syntax.md +0 -46
  213. data/tests/math_usage/document.md +0 -13
  214. data/tests/others/abbreviations.md +0 -11
  215. data/tests/others/blank.md +0 -4
  216. data/tests/others/code.md +0 -5
  217. data/tests/others/code2.md +0 -8
  218. data/tests/others/code3.md +0 -16
  219. data/tests/others/email.md +0 -4
  220. data/tests/others/entities.md +0 -19
  221. data/tests/others/escaping.md +0 -16
  222. data/tests/others/extra_dl.md +0 -101
  223. data/tests/others/extra_header_id.md +0 -13
  224. data/tests/others/extra_table1.md +0 -40
  225. data/tests/others/footnotes.md +0 -17
  226. data/tests/others/headers.md +0 -10
  227. data/tests/others/hrule.md +0 -10
  228. data/tests/others/images.md +0 -20
  229. data/tests/others/inline_html.md +0 -42
  230. data/tests/others/links.md +0 -38
  231. data/tests/others/list1.md +0 -4
  232. data/tests/others/list2.md +0 -5
  233. data/tests/others/list3.md +0 -8
  234. data/tests/others/lists.md +0 -32
  235. data/tests/others/lists_after_paragraph.md +0 -44
  236. data/tests/others/lists_ol.md +0 -39
  237. data/tests/others/misc_sw.md +0 -105
  238. data/tests/others/one.md +0 -1
  239. data/tests/others/paragraphs.md +0 -13
  240. data/tests/others/sss06.md +0 -352
  241. data/tests/others/test.md +0 -4
  242. data/tests/s5/s5profiling.md +0 -48
  243. data/tests/unittest/bug_def.md +0 -28
  244. data/tests/unittest/email.md +0 -32
  245. data/tests/unittest/html2.md +0 -34
  246. data/tests/unittest/ie.md +0 -61
  247. data/tests/unittest/links2.md +0 -34
  248. data/tests/unittest/lists11.md +0 -28
  249. data/tests/unittest/lists6.md +0 -53
  250. data/tests/unittest/lists9.md +0 -76
  251. data/tests/unittest/math/equations.md +0 -86
  252. data/tests/unittest/math/math2.md +0 -57
  253. data/tests/unittest/math/table.md +0 -37
  254. data/tests/unittest/notyet/header_after_par.md +0 -70
  255. data/tests/unittest/red_tests/abbrev.md +0 -1388
  256. data/tests/unittest/red_tests/lists7.md +0 -68
  257. data/tests/unittest/red_tests/lists7b.md +0 -128
  258. data/tests/unittest/red_tests/lists8.md +0 -76
  259. data/tests/unittest/red_tests/xml.md +0 -70
  260. data/tests/unittest/xml3.md +0 -38
  261. data/tests/utf8-files/simple.md +0 -1
  262. data/unit_test_block.sh +0 -5
  263. data/unit_test_span.sh +0 -3
@@ -1,26 +1,35 @@
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
+ private
25
25
 
26
- end end end
26
+ def fix_latex(str)
27
+ return str unless self.get_setting(:html_math_engine) == 'itex2mml'
28
+ s = str.gsub("\\mathop{", "\\operatorname{")
29
+ s.gsub!(/\\begin\{svg\}.*?\\end\{svg\}/m, " ")
30
+ s.gsub!("\\array{","\\itexarray{")
31
+ s.gsub("\\space{", "\\itexspace{")
32
+ end
33
+ end
34
+ end
35
+ 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
-