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,199 +1,188 @@
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
- #++
1
+ module MaRuKu
2
+ # A section in the table of contents of a document.
3
+ class Section
4
+ # The depth of the section (0 for toplevel).
5
+ #
6
+ # Equivalent to `header_element.level`.
7
+ #
8
+ # @return [Fixnum]
9
+ attr_accessor :section_level
20
10
 
11
+ # The nested section number, e.g. `[1, 2, 5]` for Section 1.2.5.
12
+ #
13
+ # @return [Array<Fixnum>]
14
+ attr_accessor :section_number
21
15
 
22
- module MaRuKu
23
-
24
- class MDDocument
25
- # an instance of Section (see below)
26
- attr_accessor :toc
27
- end
16
+ # The `:header` node for this section.
17
+ # The value of `meta[:section]` for the header will be this node.
18
+ #
19
+ # @return [MDElement]
20
+ attr_accessor :header_element
21
+
22
+ # The immediate child nodes of this section.
23
+ #
24
+ # @todo Why does this never contain Strings?
25
+ #
26
+ # @return [Array<MDElement>]
27
+ attr_accessor :immediate_children
28
+
29
+ # The subsections of this section.
30
+ #
31
+ # @return [Array<Section>]
32
+ attr_accessor :section_children
33
+
34
+ def initialize
35
+ @immediate_children = []
36
+ @section_children = []
37
+ end
38
+
39
+ def inspect(indent = 1)
40
+ if @header_element
41
+ s = "\_" * indent <<
42
+ "(#{@section_level})>\t #{@section_number.join('.')} : " <<
43
+ @header_element.children_to_s <<
44
+ " (id: '#{@header_element.attributes[:id]}')\n"
45
+ else
46
+ s = "Master\n"
47
+ end
48
+ @section_children.each {|c| s << c.inspect(indent + 1) }
49
+
50
+ s
51
+ end
52
+
53
+ # Assign \{#section\_number section numbers}
54
+ # to this section and its children.
55
+ # This also assigns the section number attribute
56
+ # to the sections' headers.
57
+ #
58
+ # This should only be called on the root section.
59
+ #
60
+ # @overload def numerate
61
+ def numerate(a = [])
62
+ self.section_number = a
63
+ self.section_children.each_with_index {|c, i| c.numerate(a + [i + 1])}
64
+ if h = self.header_element
65
+ h.attributes[:section_number] = self.section_number
66
+ end
67
+ end
68
+
69
+
70
+ # Returns an HTML representation of the table of contents.
71
+ #
72
+ # This should only be called on the root section.
73
+ def to_html
74
+ MaRuKu::Out::HTML::HTMLElement.new('div', { 'class' => 'maruku_toc' }, _to_html)
75
+ end
76
+
77
+ # Returns a LaTeX representation of the table of contents.
78
+ #
79
+ # This should only be called on the root section.
80
+ def to_latex
81
+ _to_latex + "\n\n"
82
+ end
83
+
84
+ protected
85
+
86
+ def _to_html
87
+ ul = MaRuKu::Out::HTML::HTMLElement.new('ul')
88
+ @section_children.each do |c|
89
+ li = MaRuKu::Out::HTML::HTMLElement.new('li')
90
+ if span = c.header_element.render_section_number
91
+ li << span
92
+ end
28
93
 
29
- # This represents a section in the TOC.
30
- class Section
31
- # a Fixnum, is == header_element.level
32
- attr_accessor :section_level
33
-
34
- # An array of fixnum, like [1,2,5] for Section 1.2.5
35
- attr_accessor :section_number
36
-
37
- # reference to header (header has h.meta[:section] to self)
38
- attr_accessor :header_element
39
-
40
- # Array of immediate children of this element
41
- attr_accessor :immediate_children
42
-
43
- # Array of Section inside this section
44
- attr_accessor :section_children
45
-
46
- def initialize
47
- @immediate_children = []
48
- @section_children = []
49
- end
50
- end
51
-
52
- class Section
53
- def inspect(indent=1)
54
- s = ""
55
- if @header_element
56
- s += "\_"*indent + "(#{@section_level})>\t #{@section_number.join('.')} : "
57
- s += @header_element.children_to_s +
58
- " (id: '#{@header_element.attributes[:id]}')\n"
59
- else
60
- s += "Master\n"
61
- end
62
-
63
- @section_children.each do |c|
64
- s+=c.inspect(indent+1)
65
- end
66
- s
67
- end
68
-
69
- # Numerate this section and its children
70
- def numerate(a=[])
71
- self.section_number = a
72
- section_children.each_with_index do |c,i|
73
- c.numerate(a.clone.push(i+1))
74
- end
75
- if h = self.header_element
76
- h.attributes[:section_number] = self.section_number
77
- end
78
- end
79
-
80
- include REXML
81
- # Creates an HTML toc.
82
- # Call this on the root
83
- def to_html
84
- div = Element.new 'div'
85
- div.attributes['class'] = 'maruku_toc'
86
- div << create_toc
87
- div
88
- end
89
-
90
- def create_toc
91
- ul = Element.new 'ul'
92
- # let's remove the bullets
93
- ul.attributes['style'] = 'list-style: none;'
94
- @section_children.each do |c|
95
- li = Element.new 'li'
96
- if span = c.header_element.render_section_number
97
- li << span
98
- end
99
- a = c.header_element.wrap_as_element('a')
100
- a.delete_attribute 'id'
101
- a.attributes['href'] = "##{c.header_element.attributes[:id]}"
102
- li << a
103
- li << c.create_toc if c.section_children.size>0
104
- ul << li
105
- end
106
- ul
107
- end
108
-
109
- # Creates a latex toc.
110
- # Call this on the root
111
- def to_latex
112
- to_latex_rec + "\n\n"
113
- end
114
-
115
- def to_latex_rec
116
- s = ""
117
- @section_children.each do |c|
118
- s += "\\noindent"
119
- number = c.header_element.section_number
120
- s += number if number
121
- text = c.header_element.children_to_latex
122
- id = c.header_element.attributes[:id]
123
- s += "\\hyperlink{#{id}}{#{text}}"
124
- s += "\\dotfill \\pageref*{#{id}} \\linebreak\n"
125
- s += c.to_latex_rec if c.section_children.size>0
126
-
127
- end
128
- s
129
- end
130
-
131
- end
132
-
133
- class MDDocument
134
-
135
- def create_toc
136
- each_element(:header) do |h|
137
- h.attributes[:id] ||= h.generate_id
138
- end
139
-
140
- stack = []
141
-
142
- # the ancestor section
143
- s = Section.new
144
- s.section_level = 0
145
-
146
- stack.push s
147
-
148
- i = 0;
149
- while i < @children.size
150
- while i < @children.size
151
- if @children[i].node_type == :header
152
- level = @children[i].level
153
- break if level <= stack.last.section_level+1
154
- end
155
-
156
- stack.last.immediate_children.push @children[i]
157
- i += 1
158
- end
159
-
160
- break if i>=@children.size
161
-
162
- header = @children[i]
163
- level = header.level
164
-
165
- if level > stack.last.section_level
166
- # this level is inside
167
-
168
- s2 = Section.new
169
- s2.section_level = level
170
- s2.header_element = header
171
- header.instance_variable_set :@section, s2
172
-
173
- stack.last.section_children.push s2
174
- stack.push s2
175
-
176
- i+=1
177
- elsif level == stack.last.section_level
178
- # this level is a sibling
179
- stack.pop
180
- else
181
- # this level is a parent
182
- stack.pop
183
- end
184
-
185
- end
186
-
187
- # If there is only one big header, then assume
188
- # it is the master
189
- if s.section_children.size == 1
190
- s = s.section_children.first
191
- end
192
-
193
- # Assign section numbers
194
- s.numerate
195
-
196
- s
197
- end
198
- end
199
- end
94
+ a = c.header_element.wrap_as_element('a')
95
+ a.attributes.delete('id')
96
+ a['href'] = "##{c.header_element.attributes[:id]}"
97
+
98
+ li << a
99
+ li << c._to_html if c.section_children.size > 0
100
+ ul << li
101
+ end
102
+ ul
103
+ end
104
+
105
+ def _to_latex
106
+ s = ""
107
+ @section_children.each do |c|
108
+ s << "\\noindent"
109
+ if number = c.header_element.section_number
110
+ s << number
111
+ end
112
+ id = c.header_element.attributes[:id]
113
+ text = c.header_element.children_to_latex
114
+ s << "\\hyperlink{#{id}}{#{text}}"
115
+ s << "\\dotfill \\pageref*{#{id}} \\linebreak\n"
116
+ s << c._to_latex if c.section_children.size > 0
117
+ end
118
+ s
119
+ end
120
+ end
121
+
122
+ class MDDocument
123
+ # The table of contents for the document.
124
+ #
125
+ # @return [Section]
126
+ attr_accessor :toc
127
+
128
+ # A map of header IDs to a count of how many times they've occurred in the document.
129
+ #
130
+ # @return [Hash<String, Number>]
131
+ attr_accessor :header_ids
132
+
133
+ def create_toc
134
+ self.header_ids = Hash.new(0)
135
+
136
+ each_element(:header) {|h| h.attributes[:id] ||= h.generate_id }
137
+
138
+
139
+ # The root section
140
+ s = Section.new
141
+ s.section_level = 0
142
+
143
+ stack = [s]
144
+
145
+ i = 0
146
+ while i < @children.size
147
+ if children[i].node_type == :header
148
+ header = @children[i]
149
+ level = header.level
150
+ s2 = Section.new
151
+ s2.section_level = level
152
+ s2.header_element = header
153
+ header.instance_variable_set :@section, s2
154
+ while level <= stack.last.section_level
155
+ stack.pop
156
+ end
157
+ stack.last.section_children.push s2
158
+ stack.push s2
159
+ else
160
+ stack.last.immediate_children.push @children[i]
161
+ end
162
+ i += 1
163
+ end
164
+
165
+ # If there is only one big header, then assume
166
+ # it is the master
167
+ if s.section_children.size == 1
168
+ s = s.section_children.first
169
+ end
170
+
171
+ # Assign section numbers
172
+ s.numerate
173
+
174
+ s
175
+ end
176
+ end
177
+
178
+ class MDElement
179
+ # Generate an id for headers. Assumes @children is set.
180
+ def generate_id
181
+ raise "generate_id only makes sense for headers" unless node_type == :header
182
+ generated_id = children_to_s.tr(' ', '_').downcase.gsub(/\W/, '').strip
183
+ num_occurs = (@doc.header_ids[generated_id] += 1)
184
+ generated_id += "_#{num_occurs}" if num_occurs > 1
185
+ generated_id
186
+ end
187
+ end
188
+ end
@@ -1,40 +1,35 @@
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
1
  module MaRuKu
22
- Version = '0.6.1'
23
-
24
- MarukuURL = 'http://github.com/bhollis/maruku/'
25
-
26
- # If true, use also PHP Markdown extra syntax
27
- #
28
- # Note: it is not guaranteed that if it's false
29
- # then no special features will be used.
30
- #
31
- # So please, ignore it for now.
32
- def markdown_extra?
33
- true
34
- end
35
-
36
- def new_meta_data?
37
- true
38
- end
39
-
2
+ # The Maruku version.
3
+ VERSION = '0.7.0.beta1'
4
+
5
+ # @deprecated Exists for backwards compatibility. Use {VERSION}
6
+ # @private
7
+ Version = VERSION
8
+
9
+ # The URL of the Maruku website.
10
+ MARUKU_URL = 'http://github.com/bhollis/maruku/'
11
+
12
+ # @deprecated Exists for backwards compatibility. Use {MARUKU_URL}
13
+ # @private
14
+ MarukuURL = MARUKU_URL
15
+
16
+ # Whether Markdown implements the PHP Markdown extra syntax.
17
+ #
18
+ # Note: it is not guaranteed that if this is false,
19
+ # then no special features will be used.
20
+ #
21
+ # @return [Boolean]
22
+ def markdown_extra?
23
+ true
24
+ end
25
+
26
+ # Whether Markdown implements the new meta-data proposal.
27
+ #
28
+ # Note: it is not guaranteed that if this is false,
29
+ # then no special features will be used.
30
+ #
31
+ # @return [Boolean]
32
+ def new_meta_data?
33
+ true
34
+ end
40
35
  end