maiku 0.6.1.maiku

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 (44) hide show
  1. data/lib/maruku.rb +141 -0
  2. data/lib/maruku/attributes.rb +175 -0
  3. data/lib/maruku/defaults.rb +71 -0
  4. data/lib/maruku/errors_management.rb +92 -0
  5. data/lib/maruku/ext/div.rb +133 -0
  6. data/lib/maruku/ext/math.rb +41 -0
  7. data/lib/maruku/ext/math/elements.rb +27 -0
  8. data/lib/maruku/ext/math/latex_fix.rb +12 -0
  9. data/lib/maruku/ext/math/mathml_engines/blahtex.rb +107 -0
  10. data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +29 -0
  11. data/lib/maruku/ext/math/mathml_engines/none.rb +20 -0
  12. data/lib/maruku/ext/math/mathml_engines/ritex.rb +24 -0
  13. data/lib/maruku/ext/math/parsing.rb +119 -0
  14. data/lib/maruku/ext/math/to_html.rb +187 -0
  15. data/lib/maruku/ext/math/to_latex.rb +26 -0
  16. data/lib/maruku/helpers.rb +260 -0
  17. data/lib/maruku/input/charsource.rb +326 -0
  18. data/lib/maruku/input/extensions.rb +69 -0
  19. data/lib/maruku/input/html_helper.rb +189 -0
  20. data/lib/maruku/input/linesource.rb +111 -0
  21. data/lib/maruku/input/parse_block.rb +616 -0
  22. data/lib/maruku/input/parse_doc.rb +232 -0
  23. data/lib/maruku/input/parse_span_better.rb +746 -0
  24. data/lib/maruku/input/rubypants.rb +225 -0
  25. data/lib/maruku/input/type_detection.rb +147 -0
  26. data/lib/maruku/input_textile2/t2_parser.rb +163 -0
  27. data/lib/maruku/maruku.rb +33 -0
  28. data/lib/maruku/output/s5/fancy.rb +756 -0
  29. data/lib/maruku/output/s5/to_s5.rb +138 -0
  30. data/lib/maruku/output/to_html.rb +991 -0
  31. data/lib/maruku/output/to_latex.rb +590 -0
  32. data/lib/maruku/output/to_latex_entities.rb +367 -0
  33. data/lib/maruku/output/to_latex_strings.rb +64 -0
  34. data/lib/maruku/output/to_markdown.rb +164 -0
  35. data/lib/maruku/output/to_s.rb +56 -0
  36. data/lib/maruku/string_utils.rb +201 -0
  37. data/lib/maruku/structures.rb +167 -0
  38. data/lib/maruku/structures_inspect.rb +87 -0
  39. data/lib/maruku/structures_iterators.rb +61 -0
  40. data/lib/maruku/textile2.rb +1 -0
  41. data/lib/maruku/toc.rb +199 -0
  42. data/lib/maruku/usage/example1.rb +33 -0
  43. data/lib/maruku/version.rb +39 -0
  44. metadata +167 -0
@@ -0,0 +1,61 @@
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
+ module MaRuKu
23
+
24
+ class MDElement
25
+
26
+ # Yields to each element of specified node_type
27
+ # All elements if e_node_type is nil.
28
+ def each_element(e_node_type=nil, &block)
29
+ @children.each do |c|
30
+ if c.kind_of? MDElement
31
+ if (not e_node_type) || (e_node_type == c.node_type)
32
+ block.call c
33
+ end
34
+ c.each_element(e_node_type, &block)
35
+ end
36
+ end
37
+ end
38
+
39
+ # Apply passed block to each String in the hierarchy.
40
+ def replace_each_string(&block)
41
+ for c in @children
42
+ if c.kind_of? MDElement
43
+ c.replace_each_string(&block)
44
+ end
45
+ end
46
+
47
+ processed = []
48
+ until @children.empty?
49
+ c = @children.shift
50
+ if c.kind_of? String
51
+ result = block.call(c)
52
+ [*result].each do |e| processed << e end
53
+ else
54
+ processed << c
55
+ end
56
+ end
57
+ @children = processed
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1 @@
1
+ require 'maruku/input_textile2/t2_parser'
data/lib/maruku/toc.rb ADDED
@@ -0,0 +1,199 @@
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
+ module MaRuKu
23
+
24
+ class MDDocument
25
+ # an instance of Section (see below)
26
+ attr_accessor :toc
27
+ end
28
+
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
@@ -0,0 +1,33 @@
1
+ require 'maruku'
2
+
3
+ text = <<EOF
4
+ Chapter 1
5
+ =========
6
+
7
+ It was a stormy and rainy night.
8
+
9
+ EOF
10
+
11
+ invalid = <<EOF
12
+
13
+ This is a [bad link.
14
+
15
+ EOF
16
+
17
+ Maruku.new(text).to_html
18
+
19
+ s = ""
20
+
21
+ begin
22
+ Maruku.new(invalid, {:on_error => :raise, :error_stream => s})
23
+ puts "Error! It should have thrown an exception."
24
+ rescue
25
+ # puts "ok, got error"
26
+ end
27
+
28
+ begin
29
+ Maruku.new(invalid, {:on_error => :warning, :error_stream => s})
30
+ rescue
31
+ puts "Error! It should not have thrown an exception."
32
+ end
33
+
@@ -0,0 +1,39 @@
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
+ module MaRuKu
22
+ Version = '0.6.1.maiku'
23
+
24
+ MaikuURL = 'http://www.fogus.me/fun/maiku'
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
+ end
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: maiku
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.6.1.maiku
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Fogus
9
+ autorequire: maruku
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: syntax
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.0.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: pry
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: guard-rspec
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: simplecov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: A Maruku superset compiler.
95
+ email:
96
+ executables: []
97
+ extensions: []
98
+ extra_rdoc_files: []
99
+ files:
100
+ - lib/maruku.rb
101
+ - lib/maruku/attributes.rb
102
+ - lib/maruku/defaults.rb
103
+ - lib/maruku/errors_management.rb
104
+ - lib/maruku/ext/div.rb
105
+ - lib/maruku/ext/math.rb
106
+ - lib/maruku/ext/math/elements.rb
107
+ - lib/maruku/ext/math/latex_fix.rb
108
+ - lib/maruku/ext/math/mathml_engines/blahtex.rb
109
+ - lib/maruku/ext/math/mathml_engines/itex2mml.rb
110
+ - lib/maruku/ext/math/mathml_engines/none.rb
111
+ - lib/maruku/ext/math/mathml_engines/ritex.rb
112
+ - lib/maruku/ext/math/parsing.rb
113
+ - lib/maruku/ext/math/to_html.rb
114
+ - lib/maruku/ext/math/to_latex.rb
115
+ - lib/maruku/helpers.rb
116
+ - lib/maruku/input/charsource.rb
117
+ - lib/maruku/input/extensions.rb
118
+ - lib/maruku/input/html_helper.rb
119
+ - lib/maruku/input/linesource.rb
120
+ - lib/maruku/input/parse_block.rb
121
+ - lib/maruku/input/parse_doc.rb
122
+ - lib/maruku/input/parse_span_better.rb
123
+ - lib/maruku/input/rubypants.rb
124
+ - lib/maruku/input/type_detection.rb
125
+ - lib/maruku/input_textile2/t2_parser.rb
126
+ - lib/maruku/maruku.rb
127
+ - lib/maruku/output/s5/fancy.rb
128
+ - lib/maruku/output/s5/to_s5.rb
129
+ - lib/maruku/output/to_html.rb
130
+ - lib/maruku/output/to_latex.rb
131
+ - lib/maruku/output/to_latex_entities.rb
132
+ - lib/maruku/output/to_latex_strings.rb
133
+ - lib/maruku/output/to_markdown.rb
134
+ - lib/maruku/output/to_s.rb
135
+ - lib/maruku/string_utils.rb
136
+ - lib/maruku/structures.rb
137
+ - lib/maruku/structures_inspect.rb
138
+ - lib/maruku/structures_iterators.rb
139
+ - lib/maruku/textile2.rb
140
+ - lib/maruku/toc.rb
141
+ - lib/maruku/usage/example1.rb
142
+ - lib/maruku/version.rb
143
+ homepage: http://github.com/fogus/maiku
144
+ licenses: []
145
+ post_install_message:
146
+ rdoc_options: []
147
+ require_paths:
148
+ - lib
149
+ required_ruby_version: !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ! '>'
159
+ - !ruby/object:Gem::Version
160
+ version: 1.3.1
161
+ requirements: []
162
+ rubyforge_project: maiku
163
+ rubygems_version: 1.8.24
164
+ signing_key:
165
+ specification_version: 3
166
+ summary: A Maruku superset compiler.
167
+ test_files: []