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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/MIT-LICENSE.txt +20 -0
- data/bin/maruku +153 -152
- data/bin/marutex +2 -29
- data/data/entities.xml +261 -0
- data/docs/math.md +14 -18
- data/lib/maruku.rb +65 -77
- data/lib/maruku/attributes.rb +109 -214
- data/lib/maruku/defaults.rb +45 -67
- data/lib/maruku/document.rb +43 -0
- data/lib/maruku/element.rb +112 -0
- data/lib/maruku/errors.rb +71 -0
- data/lib/maruku/ext/div.rb +105 -113
- data/lib/maruku/ext/fenced_code.rb +97 -0
- data/lib/maruku/ext/math.rb +22 -26
- data/lib/maruku/ext/math/elements.rb +20 -26
- data/lib/maruku/ext/math/mathml_engines/blahtex.rb +92 -104
- data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +33 -26
- data/lib/maruku/ext/math/mathml_engines/none.rb +11 -19
- data/lib/maruku/ext/math/mathml_engines/ritex.rb +2 -4
- data/lib/maruku/ext/math/parsing.rb +107 -113
- data/lib/maruku/ext/math/to_html.rb +184 -187
- data/lib/maruku/ext/math/to_latex.rb +30 -21
- data/lib/maruku/helpers.rb +158 -257
- data/lib/maruku/html.rb +254 -0
- data/lib/maruku/input/charsource.rb +272 -319
- data/lib/maruku/input/extensions.rb +62 -63
- data/lib/maruku/input/html_helper.rb +220 -189
- data/lib/maruku/input/linesource.rb +90 -110
- data/lib/maruku/input/mdline.rb +129 -0
- data/lib/maruku/input/parse_block.rb +618 -612
- data/lib/maruku/input/parse_doc.rb +145 -215
- data/lib/maruku/input/parse_span.rb +658 -0
- data/lib/maruku/input/rubypants.rb +200 -128
- data/lib/maruku/inspect_element.rb +60 -0
- data/lib/maruku/maruku.rb +10 -31
- data/lib/maruku/output/entity_table.rb +33 -0
- data/lib/maruku/output/s5/fancy.rb +462 -462
- data/lib/maruku/output/s5/to_s5.rb +115 -135
- data/lib/maruku/output/to_html.rb +898 -983
- data/lib/maruku/output/to_latex.rb +561 -560
- data/lib/maruku/output/to_markdown.rb +207 -162
- data/lib/maruku/output/to_s.rb +11 -52
- data/lib/maruku/string_utils.rb +129 -179
- data/lib/maruku/toc.rb +185 -196
- data/lib/maruku/version.rb +33 -38
- data/spec/block_docs/abbrev.md +776 -0
- data/{tests/unittest → spec/block_docs}/abbreviations.md +11 -20
- data/{tests/unittest → spec/block_docs}/alt.md +2 -14
- data/{tests/unittest/pending → spec/block_docs}/amps.md +1 -13
- data/{tests/unittest → spec/block_docs}/attributes/att2.md +0 -12
- data/{tests/unittest → spec/block_docs}/attributes/att3.md +2 -14
- data/{tests/unittest → spec/block_docs}/attributes/attributes.md +12 -16
- data/{tests/unittest → spec/block_docs}/attributes/circular.md +0 -12
- data/{tests/unittest → spec/block_docs}/attributes/default.md +1 -13
- data/{tests/unittest → spec/block_docs}/blank.md +0 -12
- data/{tests/unittest → spec/block_docs}/blanks_in_code.md +16 -15
- data/{tests/unittest/loss.md → spec/block_docs/bug_def.md} +6 -18
- data/{tests/unittest → spec/block_docs}/bug_table.md +3 -15
- data/{tests/unittest → spec/block_docs}/code.md +7 -14
- data/{tests/unittest → spec/block_docs}/code2.md +4 -14
- data/{tests/unittest → spec/block_docs}/code3.md +12 -16
- data/{tests/unittest → spec/block_docs}/data_loss.md +2 -14
- data/{tests/unittest → spec/block_docs}/divs/div1.md +0 -12
- data/{tests/unittest → spec/block_docs}/divs/div2.md +0 -12
- data/{tests/unittest → spec/block_docs}/divs/div3_nest.md +3 -15
- data/{tests/unittest → spec/block_docs}/easy.md +1 -13
- data/spec/block_docs/email.md +29 -0
- data/{tests/unittest/pending → spec/block_docs}/empty_cells.md +3 -15
- data/{tests/unittest → spec/block_docs}/encoding/iso-8859-1.md +1 -14
- data/{tests/unittest → spec/block_docs}/encoding/utf-8.md +0 -12
- data/{tests/unittest → spec/block_docs}/entities.md +27 -29
- data/{tests/unittest/notyet → spec/block_docs}/escape.md +2 -14
- data/{tests/unittest → spec/block_docs}/escaping.md +11 -22
- data/{tests/unittest → spec/block_docs}/extra_dl.md +2 -13
- data/{tests/unittest → spec/block_docs}/extra_header_id.md +14 -20
- data/{tests/unittest → spec/block_docs}/extra_table1.md +3 -15
- data/spec/block_docs/fenced_code_blocks.md +66 -0
- data/spec/block_docs/fenced_code_blocks_highlighted.md +18 -0
- data/{tests/unittest → spec/block_docs}/footnotes.md +12 -24
- data/spec/block_docs/footnotes2.md +78 -0
- data/spec/block_docs/hard.md +25 -0
- data/spec/block_docs/header_after_par.md +62 -0
- data/{tests/unittest → spec/block_docs}/headers.md +10 -18
- data/{tests/unittest → spec/block_docs}/hex_entities.md +7 -18
- data/{tests/unittest → spec/block_docs}/hrule.md +5 -12
- data/{tests/unittest → spec/block_docs}/html3.md +1 -13
- data/{tests/unittest → spec/block_docs}/html4.md +2 -14
- data/{tests/unittest → spec/block_docs}/html5.md +2 -14
- data/spec/block_docs/html_block_in_para.md +22 -0
- data/spec/block_docs/html_inline.md +25 -0
- data/spec/block_docs/html_trailing.md +31 -0
- data/spec/block_docs/ie.md +62 -0
- data/spec/block_docs/iframe.md +29 -0
- data/{tests/unittest → spec/block_docs}/images.md +22 -28
- data/{tests/unittest → spec/block_docs}/images2.md +7 -17
- data/{tests/unittest → spec/block_docs}/inline_html.md +37 -67
- data/{tests/unittest → spec/block_docs}/inline_html2.md +1 -13
- data/spec/block_docs/inline_html_beginning.md +10 -0
- data/spec/block_docs/issue20.md +9 -0
- data/spec/block_docs/issue26.md +22 -0
- data/spec/block_docs/issue29.md +9 -0
- data/spec/block_docs/issue30.md +30 -0
- data/spec/block_docs/issue31.md +25 -0
- data/spec/block_docs/issue40.md +40 -0
- data/spec/block_docs/issue64.md +55 -0
- data/spec/block_docs/issue67.md +19 -0
- data/spec/block_docs/issue70.md +11 -0
- data/spec/block_docs/issue72.md +17 -0
- data/spec/block_docs/issue74.md +38 -0
- data/spec/block_docs/issue79.md +15 -0
- data/spec/block_docs/issue83.md +13 -0
- data/spec/block_docs/issue85.md +25 -0
- data/spec/block_docs/issue88.md +19 -0
- data/spec/block_docs/issue89.md +12 -0
- data/spec/block_docs/issue90.md +38 -0
- data/{tests/unittest/pending → spec/block_docs}/link.md +21 -18
- data/{tests/unittest → spec/block_docs}/links.md +33 -32
- data/spec/block_docs/links2.md +21 -0
- data/{tests/unittest → spec/block_docs}/list1.md +0 -12
- data/{tests/unittest → spec/block_docs}/list12.md +2 -14
- data/{tests/unittest → spec/block_docs}/list2.md +2 -14
- data/spec/block_docs/list_multipara.md +42 -0
- data/{tests/unittest → spec/block_docs}/lists.md +28 -29
- data/{tests/unittest → spec/block_docs}/lists10.md +2 -14
- data/spec/block_docs/lists11.md +23 -0
- data/spec/block_docs/lists12.md +43 -0
- data/spec/block_docs/lists13.md +55 -0
- data/spec/block_docs/lists14.md +61 -0
- data/spec/block_docs/lists15.md +36 -0
- data/spec/block_docs/lists6.md +88 -0
- data/spec/block_docs/lists7b.md +58 -0
- data/spec/block_docs/lists9.md +53 -0
- data/{tests/unittest → spec/block_docs}/lists_after_paragraph.md +19 -25
- data/spec/block_docs/lists_blank.md +35 -0
- data/{tests/unittest/list3.md → spec/block_docs/lists_blockquote_code.md} +2 -14
- data/{tests/unittest/list4.md → spec/block_docs/lists_need_blank_line.md} +50 -21
- data/spec/block_docs/lists_nested.md +44 -0
- data/spec/block_docs/lists_nested_blankline.md +28 -0
- data/spec/block_docs/lists_nested_deep.md +43 -0
- data/{tests/unittest → spec/block_docs}/lists_ol.md +37 -54
- data/spec/block_docs/lists_paraindent.md +47 -0
- data/spec/block_docs/lists_tab.md +54 -0
- data/spec/block_docs/loss.md +17 -0
- data/spec/block_docs/math-blahtex/equations.md +30 -0
- data/spec/block_docs/math-blahtex/inline.md +48 -0
- data/spec/block_docs/math-blahtex/math2.md +45 -0
- data/spec/block_docs/math-blahtex/table.md +25 -0
- data/spec/block_docs/math/embedded_invalid_svg.md +79 -0
- data/spec/block_docs/math/embedded_svg.md +97 -0
- data/spec/block_docs/math/equations.md +44 -0
- data/{tests/unittest → spec/block_docs}/math/inline.md +7 -19
- data/spec/block_docs/math/math2.md +45 -0
- data/{tests/unittest → spec/block_docs}/math/notmath.md +0 -12
- data/spec/block_docs/math/raw_mathml.md +87 -0
- data/spec/block_docs/math/table.md +25 -0
- data/{tests/unittest → spec/block_docs}/math/table2.md +5 -17
- data/{tests/unittest → spec/block_docs}/misc_sw.md +181 -118
- data/{tests/unittest → spec/block_docs}/olist.md +6 -18
- data/{tests/unittest → spec/block_docs}/one.md +0 -12
- data/{tests/unittest → spec/block_docs}/paragraph.md +0 -12
- data/{tests/unittest → spec/block_docs}/paragraph_rules/dont_merge_ref.md +4 -12
- data/{tests/unittest → spec/block_docs}/paragraph_rules/tab_is_blank.md +0 -12
- data/{tests/unittest → spec/block_docs}/paragraphs.md +1 -13
- data/{tests/unittest → spec/block_docs}/recover/recover_links.md +4 -16
- data/{tests/unittest/pending/ref.md → spec/block_docs/ref_with_period.md} +7 -16
- data/spec/block_docs/ref_with_title.md +22 -0
- data/{tests/unittest → spec/block_docs}/references/long_example.md +16 -23
- data/{tests/unittest → spec/block_docs}/references/spaces_and_numbers.md +0 -12
- data/{tests/unittest → spec/block_docs}/smartypants.md +24 -31
- data/{tests/unittest → spec/block_docs}/syntax_hl.md +13 -17
- data/{tests/unittest → spec/block_docs}/table_attributes.md +2 -14
- data/spec/block_docs/tables.md +58 -0
- data/{tests/unittest → spec/block_docs}/test.md +1 -13
- data/{tests/unittest/notyet → spec/block_docs}/ticks.md +1 -13
- data/spec/block_docs/toc.md +87 -0
- data/{tests/unittest/notyet → spec/block_docs}/triggering.md +14 -25
- data/{tests/unittest → spec/block_docs}/underscore_in_words.md +0 -12
- data/{tests/unittest → spec/block_docs}/wrapping.md +4 -16
- data/spec/block_docs/xml.md +33 -0
- data/{tests/unittest → spec/block_docs}/xml2.md +0 -12
- data/spec/block_docs/xml3.md +24 -0
- data/{tests/unittest → spec/block_docs}/xml_instruction.md +9 -20
- data/spec/block_spec.rb +110 -0
- data/spec/cli_spec.rb +8 -0
- data/spec/span_spec.rb +256 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/to_html_utf8_spec.rb +13 -0
- metadata +205 -243
- metadata.gz.sig +3 -0
- data/Rakefile +0 -48
- data/bin/marudown +0 -29
- data/bin/marutest +0 -345
- data/docs/changelog.md +0 -334
- data/lib/maruku/errors_management.rb +0 -92
- data/lib/maruku/ext/math/latex_fix.rb +0 -12
- data/lib/maruku/input/parse_span_better.rb +0 -746
- data/lib/maruku/input/type_detection.rb +0 -147
- data/lib/maruku/output/to_latex_entities.rb +0 -367
- data/lib/maruku/output/to_latex_strings.rb +0 -64
- data/lib/maruku/structures.rb +0 -167
- data/lib/maruku/structures_inspect.rb +0 -87
- data/lib/maruku/structures_iterators.rb +0 -61
- data/lib/maruku/tests/benchmark.rb +0 -82
- data/lib/maruku/tests/new_parser.rb +0 -373
- data/lib/maruku/tests/tests.rb +0 -136
- data/lib/maruku/usage/example1.rb +0 -33
- data/tests/bugs/code_in_links.md +0 -101
- data/tests/bugs/complex_escaping.md +0 -38
- data/tests/math/syntax.md +0 -46
- data/tests/math_usage/document.md +0 -13
- data/tests/others/abbreviations.md +0 -11
- data/tests/others/blank.md +0 -4
- data/tests/others/code.md +0 -5
- data/tests/others/code2.md +0 -8
- data/tests/others/code3.md +0 -16
- data/tests/others/email.md +0 -4
- data/tests/others/entities.md +0 -19
- data/tests/others/escaping.md +0 -16
- data/tests/others/extra_dl.md +0 -101
- data/tests/others/extra_header_id.md +0 -13
- data/tests/others/extra_table1.md +0 -40
- data/tests/others/footnotes.md +0 -17
- data/tests/others/headers.md +0 -10
- data/tests/others/hrule.md +0 -10
- data/tests/others/images.md +0 -20
- data/tests/others/inline_html.md +0 -42
- data/tests/others/links.md +0 -38
- data/tests/others/list1.md +0 -4
- data/tests/others/list2.md +0 -5
- data/tests/others/list3.md +0 -8
- data/tests/others/lists.md +0 -32
- data/tests/others/lists_after_paragraph.md +0 -44
- data/tests/others/lists_ol.md +0 -39
- data/tests/others/misc_sw.md +0 -105
- data/tests/others/one.md +0 -1
- data/tests/others/paragraphs.md +0 -13
- data/tests/others/sss06.md +0 -352
- data/tests/others/test.md +0 -4
- data/tests/s5/s5profiling.md +0 -48
- data/tests/unittest/bug_def.md +0 -28
- data/tests/unittest/email.md +0 -32
- data/tests/unittest/html2.md +0 -34
- data/tests/unittest/ie.md +0 -61
- data/tests/unittest/links2.md +0 -34
- data/tests/unittest/lists11.md +0 -28
- data/tests/unittest/lists6.md +0 -53
- data/tests/unittest/lists9.md +0 -76
- data/tests/unittest/math/equations.md +0 -86
- data/tests/unittest/math/math2.md +0 -57
- data/tests/unittest/math/table.md +0 -37
- data/tests/unittest/notyet/header_after_par.md +0 -70
- data/tests/unittest/red_tests/abbrev.md +0 -1388
- data/tests/unittest/red_tests/lists7.md +0 -68
- data/tests/unittest/red_tests/lists7b.md +0 -128
- data/tests/unittest/red_tests/lists8.md +0 -76
- data/tests/unittest/red_tests/xml.md +0 -70
- data/tests/unittest/xml3.md +0 -38
- data/tests/utf8-files/simple.md +0 -1
- data/unit_test_block.sh +0 -5
- data/unit_test_span.sh +0 -3
data/lib/maruku/toc.rb
CHANGED
@@ -1,199 +1,188 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
|
4
|
-
#
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
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
|
data/lib/maruku/version.rb
CHANGED
@@ -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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
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
|