maiku 0.6.1.maiku

Sign up to get free protection for your applications and to get access to all the features.
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: []