maruku 0.4.2.1 → 0.5.0
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.
- data/bin/maruku +66 -20
- data/bin/marutest +12 -2
- data/docs/changelog.html +188 -23
- data/docs/changelog.md +128 -5
- data/docs/entity_test.html +245 -240
- data/docs/entity_test.md +2 -0
- data/docs/exd.html +181 -23
- data/docs/index.html +130 -349
- data/docs/markdown_syntax.html +55 -51
- data/docs/maruku.html +130 -349
- data/docs/maruku.md +154 -339
- data/docs/math.md +143 -0
- data/docs/proposal.html +16 -12
- data/lib/maruku.rb +6 -3
- data/lib/maruku/attributes.rb +7 -2
- data/lib/maruku/defaults.rb +27 -27
- data/lib/maruku/errors_management.rb +10 -9
- data/lib/maruku/ext/diagrams/diagrams.rb +8 -0
- data/lib/maruku/ext/diagrams/grid.rb +78 -0
- data/lib/maruku/ext/diagrams/inspect.rb +11 -0
- data/lib/maruku/ext/diagrams/layout.rb +105 -0
- data/lib/maruku/ext/diagrams/parser.rb +219 -0
- data/lib/maruku/ext/diagrams/structures.rb +168 -0
- data/lib/maruku/ext/diagrams/to_html.rb +37 -0
- data/lib/maruku/ext/diagrams/to_latex.rb +308 -0
- data/lib/maruku/ext/diagrams/unittest.rb +123 -0
- data/lib/maruku/ext/math.rb +11 -0
- data/lib/maruku/ext/math/elements.rb +26 -0
- data/lib/maruku/ext/math/mathml_engines/blahtex.rb +108 -0
- data/lib/maruku/ext/math/mathml_engines/itex2mml.rb +29 -0
- data/lib/maruku/ext/math/mathml_engines/none.rb +20 -0
- data/lib/maruku/ext/math/mathml_engines/ritex.rb +24 -0
- data/lib/maruku/ext/math/parsing.rb +82 -0
- data/lib/maruku/ext/math/to_html.rb +178 -0
- data/lib/maruku/ext/math/to_latex.rb +21 -0
- data/lib/maruku/helpers.rb +11 -0
- data/lib/maruku/input/charsource.rb +1 -1
- data/lib/maruku/input/extensions.rb +68 -0
- data/lib/maruku/input/html_helper.rb +91 -60
- data/lib/maruku/input/parse_block.rb +10 -9
- data/lib/maruku/input/parse_doc.rb +21 -13
- data/lib/maruku/input/parse_span_better.rb +19 -8
- data/lib/maruku/input/type_detection.rb +5 -3
- data/lib/maruku/output/to_html.rb +236 -67
- data/lib/maruku/output/to_latex.rb +69 -26
- data/lib/maruku/output/to_latex_entities.rb +14 -2
- data/lib/maruku/output/to_s.rb +8 -0
- data/lib/maruku/structures.rb +1 -1
- data/lib/maruku/tests/benchmark.rb +2 -2
- data/lib/maruku/tests/new_parser.rb +13 -5
- data/lib/maruku/version.rb +1 -1
- data/lib/sort_prof.rb +22 -0
- data/tests/diagrams/diagrams.md +54 -0
- data/tests/math/syntax.md +46 -0
- data/tests/math_usage/document.md +13 -0
- data/tests/unittest/attributes/attributes.md +50 -6
- data/tests/unittest/easy.md +1 -1
- data/tests/unittest/email.md +3 -3
- data/tests/unittest/entities.md +12 -7
- data/tests/unittest/escaping.md +4 -4
- data/tests/unittest/extra_table1.md +3 -1
- data/tests/unittest/footnotes.md +5 -5
- data/tests/unittest/headers.md +3 -3
- data/tests/unittest/images.md +7 -7
- data/tests/unittest/inline_html.md +51 -5
- data/tests/unittest/links.md +7 -7
- data/tests/unittest/list2.md +1 -1
- data/tests/unittest/lists.md +1 -1
- data/tests/unittest/lists_after_paragraph.md +1 -1
- data/tests/unittest/lists_ol.md +1 -1
- data/tests/unittest/math/equations.md +82 -0
- data/tests/unittest/math/inline.md +80 -0
- data/tests/unittest/math/table.md +51 -0
- data/tests/unittest/math/table2.md +67 -0
- data/tests/unittest/misc_sw.md +24 -24
- data/tests/unittest/notyet/ticks.md +1 -1
- data/tests/unittest/references/long_example.md +2 -2
- data/tests/unittest/smartypants.md +4 -4
- data/tests/unittest/xml.md +68 -0
- data/tests/unittest/xml2.md +36 -0
- data/tests/unittest/xml3.md +52 -0
- data/tests/unittest/xml_instruction.md +5 -5
- metadata +33 -4
- data/docs/a.html +0 -6
- data/docs/char.html +0 -1924
@@ -32,17 +32,17 @@ module MaRuKu; module In; module Markdown; module SpanLevelParser
|
|
32
32
|
|
33
33
|
EscapedCharInInlineCode = [?\\,?`]
|
34
34
|
|
35
|
-
def parse_lines_as_span(lines)
|
36
|
-
parse_span_better lines.join("\n")
|
35
|
+
def parse_lines_as_span(lines, parent=nil)
|
36
|
+
parse_span_better lines.join("\n"), parent
|
37
37
|
end
|
38
38
|
|
39
|
-
def parse_span_better(string)
|
39
|
+
def parse_span_better(string, parent=nil)
|
40
40
|
if not string.kind_of? String then
|
41
41
|
error "Passed #{string.class}." end
|
42
42
|
|
43
43
|
st = (string + "")
|
44
44
|
st.freeze
|
45
|
-
src = CharSource.new(st)
|
45
|
+
src = CharSource.new(st, parent)
|
46
46
|
read_span(src, EscapedCharInText, [nil])
|
47
47
|
end
|
48
48
|
|
@@ -67,7 +67,12 @@ module MaRuKu; module In; module Markdown; module SpanLevelParser
|
|
67
67
|
break if exit_on_chars && exit_on_chars.include?(c)
|
68
68
|
break if exit_on_strings && exit_on_strings.any? {|x| src.cur_chars_are x}
|
69
69
|
|
70
|
-
|
70
|
+
# check if there are extensions
|
71
|
+
if check_span_extensions(src, con)
|
72
|
+
next
|
73
|
+
end
|
74
|
+
|
75
|
+
case c = src.cur_char
|
71
76
|
when ?\ # it's space (32)
|
72
77
|
if src.cur_chars_are " \n"
|
73
78
|
src.ignore_chars(3)
|
@@ -190,7 +195,6 @@ module MaRuKu; module In; module Markdown; module SpanLevelParser
|
|
190
195
|
src.ignore_char # {
|
191
196
|
interpret_extension(src, con, [?}])
|
192
197
|
src.ignore_char # }
|
193
|
-
|
194
198
|
when nil
|
195
199
|
maruku_error ("Unclosed span (waiting for %s"+
|
196
200
|
"#{exit_on_strings.inspect})") % [
|
@@ -509,6 +513,7 @@ module MaRuKu; module In; module Markdown; module SpanLevelParser
|
|
509
513
|
(src.next_char == ?[ or src.next_char == ?( )
|
510
514
|
src.shift_char
|
511
515
|
end
|
516
|
+
|
512
517
|
case src.cur_char
|
513
518
|
when ?(
|
514
519
|
src.ignore_char # opening (
|
@@ -552,6 +557,11 @@ module MaRuKu; module In; module Markdown; module SpanLevelParser
|
|
552
557
|
when ?[ # link ref
|
553
558
|
ref_id = read_ref_id(src,con)
|
554
559
|
if ref_id
|
560
|
+
if ref_id.size == 0
|
561
|
+
ref_id = children.to_s.downcase.gsub(' ','_')
|
562
|
+
else
|
563
|
+
ref_id = ref_id.downcase
|
564
|
+
end
|
555
565
|
con.push_element md_link(children, ref_id)
|
556
566
|
else
|
557
567
|
maruku_error "Could not read ref_id", src, con
|
@@ -560,8 +570,9 @@ module MaRuKu; module In; module Markdown; module SpanLevelParser
|
|
560
570
|
con.push_elements children
|
561
571
|
return
|
562
572
|
end
|
563
|
-
else #
|
564
|
-
|
573
|
+
else # empty [link]
|
574
|
+
id = children.to_s.downcase.gsub(' ','_')
|
575
|
+
con.push_element md_link(children, id)
|
565
576
|
end
|
566
577
|
end # read link
|
567
578
|
|
@@ -44,11 +44,12 @@ module MaRuKu; module Strings
|
|
44
44
|
return :definition if l =~ Definition
|
45
45
|
# I had a bug with emails and urls at the beginning of the
|
46
46
|
# line that were mistaken for raw_html
|
47
|
-
return :text
|
47
|
+
return :text if l=~ /^#{EMailAddress}/
|
48
|
+
return :text if l=~ /^<http:/
|
48
49
|
# raw html is like PHP Markdown Extra: at most three spaces before
|
49
50
|
return :xml_instr if l =~ %r{^\s*<\?}
|
50
51
|
return :raw_html if l =~ %r{^[ ]?[ ]?[ ]?</?\s*\w+}
|
51
|
-
return :raw_html if l =~ %r{[ ]
|
52
|
+
return :raw_html if l =~ %r{^[ ]?[ ]?[ ]?<\!\-\-}
|
52
53
|
return :ulist if l =~ /^\s?([\*\-\+])\s+.*\w+/
|
53
54
|
return :olist if l =~ /^\s?\d+\..*\w+/
|
54
55
|
return :header1 if l =~ /^(=)+/
|
@@ -64,9 +65,11 @@ module MaRuKu; module Strings
|
|
64
65
|
return :ald if l =~ AttributeDefinitionList
|
65
66
|
return :ial if l =~ InlineAttributeList
|
66
67
|
# end
|
68
|
+
# return :equation_end if l =~ EquationEnd
|
67
69
|
return :text # else, it's just text
|
68
70
|
end
|
69
71
|
|
72
|
+
|
70
73
|
# $1 = id $2 = attribute list
|
71
74
|
AttributeDefinitionList = /^\s{0,3}\{([\w\d\s]+)\}:\s*(.*)\s*$/
|
72
75
|
#
|
@@ -135,5 +138,4 @@ module MaRuKu; module Strings
|
|
135
138
|
|
136
139
|
|
137
140
|
EMailAddress = /<([^:]+@[^:]+)>/
|
138
|
-
URL = /^<http:/
|
139
141
|
end end
|
@@ -21,11 +21,6 @@
|
|
21
21
|
|
22
22
|
require 'rexml/document'
|
23
23
|
|
24
|
-
require 'rubygems'
|
25
|
-
require 'syntax'
|
26
|
-
require 'syntax/convertors/html'
|
27
|
-
|
28
|
-
|
29
24
|
class String
|
30
25
|
# A string is rendered into HTML by creating
|
31
26
|
# a REXML::Text node. REXML takes care of all the encoding.
|
@@ -43,7 +38,6 @@ end
|
|
43
38
|
# This module groups all functions related to HTML export.
|
44
39
|
module MaRuKu; module Out; module HTML
|
45
40
|
include REXML
|
46
|
-
include MaRuKu::Defaults
|
47
41
|
|
48
42
|
# Render as an HTML fragment (no head, just the content of BODY). (returns a string)
|
49
43
|
def to_html(context={})
|
@@ -81,12 +75,76 @@ module MaRuKu; module Out; module HTML
|
|
81
75
|
# containing code.
|
82
76
|
doc.write(xml,indent,transitive=true,ie_hack);
|
83
77
|
|
84
|
-
xhtml10strict = "
|
78
|
+
xhtml10strict = "
|
79
|
+
<?xml version='1.0' encoding='utf-8'?>
|
85
80
|
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
|
86
81
|
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>\n"
|
87
|
-
|
82
|
+
|
83
|
+
xhtml11strict_mathml2 = '<?xml version="1.0" encoding="utf-8"?>
|
84
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
|
85
|
+
"http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [
|
86
|
+
<!ENTITY mathml "http://www.w3.org/1998/Math/MathML">
|
87
|
+
]>
|
88
|
+
'
|
89
|
+
|
90
|
+
xhtml11_mathml2_svg11 =
|
91
|
+
'<?xml version="1.0" encoding="utf-8"?>
|
92
|
+
<!DOCTYPE html PUBLIC
|
93
|
+
"-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
|
94
|
+
"http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
|
95
|
+
'
|
96
|
+
|
97
|
+
xhtml11_mathml2_svg11 + xml
|
88
98
|
end
|
89
99
|
|
100
|
+
def xml_newline() Text.new("\n") end
|
101
|
+
|
102
|
+
|
103
|
+
=begin maruku_doc
|
104
|
+
Attribute: title
|
105
|
+
Scope: document
|
106
|
+
|
107
|
+
Sets the title of the document.
|
108
|
+
If a title is not specified, the first header will be used.
|
109
|
+
|
110
|
+
These should be equivalent:
|
111
|
+
|
112
|
+
Title: my document
|
113
|
+
|
114
|
+
Content
|
115
|
+
|
116
|
+
and
|
117
|
+
|
118
|
+
my document
|
119
|
+
===========
|
120
|
+
|
121
|
+
Content
|
122
|
+
|
123
|
+
In both cases, the title is set to "my document".
|
124
|
+
=end
|
125
|
+
|
126
|
+
=begin maruku_doc
|
127
|
+
Attribute: subject
|
128
|
+
Scope: document
|
129
|
+
|
130
|
+
Synonim for `title`.
|
131
|
+
=end
|
132
|
+
|
133
|
+
|
134
|
+
=begin maruku_doc
|
135
|
+
Attribute: css
|
136
|
+
Scope: document
|
137
|
+
Output: HTML
|
138
|
+
Summary: Activates CSS stylesheets for HTML.
|
139
|
+
|
140
|
+
`css` should be a space-separated list of urls.
|
141
|
+
|
142
|
+
Example:
|
143
|
+
|
144
|
+
CSS: style.css math.css
|
145
|
+
|
146
|
+
=end
|
147
|
+
|
90
148
|
# Render to a complete HTML document (returns a REXML document tree)
|
91
149
|
def to_html_document_tree
|
92
150
|
doc = Document.new(nil,{:respect_whitespace =>:all})
|
@@ -94,34 +152,41 @@ module MaRuKu; module Out; module HTML
|
|
94
152
|
|
95
153
|
root = Element.new('html', doc)
|
96
154
|
root.add_namespace('http://www.w3.org/1999/xhtml')
|
97
|
-
|
155
|
+
root.add_namespace('svg', "http://www.w3.org/2000/svg" )
|
98
156
|
lang = self.attributes[:lang] || 'en'
|
99
|
-
root.attributes['lang'] = lang
|
100
157
|
root.attributes['xml:lang'] = lang
|
101
158
|
|
159
|
+
root << xml_newline
|
102
160
|
head = Element.new 'head', root
|
103
161
|
|
104
162
|
#<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
|
105
163
|
me = Element.new 'meta', head
|
106
164
|
me.attributes['http-equiv'] = 'Content-type'
|
107
|
-
me.attributes['content'] = 'text/html;
|
165
|
+
# me.attributes['content'] = 'text/html;charset=utf-8'
|
166
|
+
me.attributes['content'] = 'application/xhtml+xml;charset=utf-8'
|
108
167
|
|
168
|
+
|
109
169
|
# Create title element
|
110
170
|
doc_title = self.attributes[:title] || self.attributes[:subject] || ""
|
111
171
|
title = Element.new 'title', head
|
112
172
|
title << Text.new(doc_title)
|
113
173
|
|
114
174
|
|
115
|
-
|
116
|
-
if css
|
175
|
+
|
176
|
+
if css_list = self.attributes[:css]
|
177
|
+
css_list.split.each do |css|
|
117
178
|
# <link type="text/css" rel="stylesheet" href="..." />
|
118
179
|
link = Element.new 'link'
|
119
180
|
link.attributes['type'] = 'text/css'
|
120
181
|
link.attributes['rel'] = 'stylesheet'
|
121
182
|
link.attributes['href'] = css
|
122
|
-
head << link
|
183
|
+
head << link
|
184
|
+
head << xml_newline
|
185
|
+
end
|
123
186
|
end
|
124
|
-
|
187
|
+
|
188
|
+
root << xml_newline
|
189
|
+
|
125
190
|
body = Element.new 'body'
|
126
191
|
|
127
192
|
children_to_html.each do |e|
|
@@ -135,7 +200,7 @@ module MaRuKu; module Out; module HTML
|
|
135
200
|
|
136
201
|
# When we are rendering a whole document, we add a signature
|
137
202
|
# at the bottom.
|
138
|
-
if
|
203
|
+
if get_setting(:maruku_signature)
|
139
204
|
body << maruku_html_signature
|
140
205
|
end
|
141
206
|
|
@@ -144,33 +209,18 @@ module MaRuKu; module Out; module HTML
|
|
144
209
|
doc
|
145
210
|
end
|
146
211
|
|
147
|
-
def add_whitespace(element)
|
148
|
-
blocks = ['p','pre','h1','h2','h3','h4','h5','h6',
|
149
|
-
'style','table','div','ul','ol','li','dl','dt',
|
150
|
-
'head','blockquote','tr','thead','td','dd','title',
|
151
|
-
'link','hr']
|
152
|
-
|
153
|
-
element.get_elements( "//*" ).each do |e|
|
154
|
-
if blocks.include? e.name
|
155
|
-
e.parent.insert_before(e, Text.new("\n"))
|
156
|
-
e.parent.insert_after(e, Text.new("\n"))
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
element.get_elements( "//br" ).each do |e|
|
161
|
-
e.parent.insert_after(e, Text.new("\n"))
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
212
|
# returns "st","nd","rd" or "th" as appropriate
|
166
213
|
def day_suffix(day)
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
214
|
+
s = {
|
215
|
+
1 => 'st',
|
216
|
+
2 => 'nd',
|
217
|
+
3 => 'rd',
|
218
|
+
21 => 'st',
|
219
|
+
22 => 'nd',
|
220
|
+
23 => 'rd',
|
221
|
+
31 => 'st'
|
222
|
+
}
|
223
|
+
return s[day] || 'th';
|
174
224
|
end
|
175
225
|
|
176
226
|
# formats a nice date
|
@@ -191,7 +241,7 @@ module MaRuKu; module Out; module HTML
|
|
191
241
|
span << Text.new('Created by ')
|
192
242
|
a = Element.new('a', span)
|
193
243
|
a.attributes['href'] = 'http://maruku.rubyforge.org'
|
194
|
-
a.attributes['title'] = 'Maruku: a Markdown interpreter for Ruby'
|
244
|
+
a.attributes['title'] = 'Maruku: a Markdown-superset interpreter for Ruby'
|
195
245
|
a << Text.new('Maruku')
|
196
246
|
span << Text.new(nice_date+".")
|
197
247
|
div
|
@@ -229,8 +279,8 @@ module MaRuKu; module Out; module HTML
|
|
229
279
|
# renders children as html and wraps into an element of given name
|
230
280
|
#
|
231
281
|
# Sets 'id' if meta is set
|
232
|
-
def wrap_as_element(name)
|
233
|
-
m = create_html_element
|
282
|
+
def wrap_as_element(name, attributes_to_copy=[])
|
283
|
+
m = create_html_element(name, attributes_to_copy)
|
234
284
|
children_to_html.each do |e| m << e; end
|
235
285
|
|
236
286
|
# m << Comment.new( "{"+self.al.to_md+"}") if not self.al.empty?
|
@@ -238,11 +288,40 @@ module MaRuKu; module Out; module HTML
|
|
238
288
|
m
|
239
289
|
end
|
240
290
|
|
241
|
-
|
291
|
+
=begin maruku_doc
|
292
|
+
Attribute: id
|
293
|
+
Scope: element
|
294
|
+
Output: LaTeX, HTML
|
295
|
+
|
296
|
+
It is copied as a standard HTML attribute.
|
297
|
+
|
298
|
+
Moreover, it used as a label name for hyperlinks in both HTML and
|
299
|
+
in PDF.
|
300
|
+
|
301
|
+
=end
|
302
|
+
|
303
|
+
=begin maruku_doc
|
304
|
+
Attribute: class
|
305
|
+
Scope: element
|
306
|
+
Output: HTML
|
307
|
+
|
308
|
+
It is copied as a standard HTML attribute.
|
309
|
+
=end
|
310
|
+
|
311
|
+
=begin maruku_doc
|
312
|
+
Attribute: style
|
313
|
+
Scope: element
|
314
|
+
Output: HTML
|
315
|
+
|
316
|
+
It is copied as a standard HTML attribute.
|
317
|
+
=end
|
318
|
+
|
319
|
+
StandardAttributes = [:id, :style, :class]
|
320
|
+
def create_html_element(name, attributes_to_copy=[])
|
242
321
|
m = Element.new name
|
243
|
-
|
244
|
-
|
245
|
-
|
322
|
+
(StandardAttributes+attributes_to_copy).each do |a|
|
323
|
+
if v = @attributes[a] then m.attributes[a.to_s] = v.to_s end
|
324
|
+
end
|
246
325
|
m
|
247
326
|
end
|
248
327
|
|
@@ -266,9 +345,20 @@ module MaRuKu; module Out; module HTML
|
|
266
345
|
def to_html_strong; wrap_as_element('strong') end
|
267
346
|
def to_html_emphasis; wrap_as_element('em') end
|
268
347
|
|
348
|
+
=begin maruku_doc
|
349
|
+
Attribute: use_numbered_headers
|
350
|
+
Scope: document
|
351
|
+
Summary: Activates the numbering of headers.
|
352
|
+
|
353
|
+
If `true`, section headers will be numbered.
|
354
|
+
|
355
|
+
In LaTeX export, the numbering of headers is managed
|
356
|
+
by Maruku, to have the same results in both HTML and LaTeX.
|
357
|
+
=end
|
358
|
+
|
269
359
|
# nil if not applicable, else string
|
270
360
|
def section_number
|
271
|
-
return nil if not
|
361
|
+
return nil if not get_setting(:use_numbered_headers)
|
272
362
|
|
273
363
|
n = @attributes[:section_number]
|
274
364
|
if n && (not n.empty?)
|
@@ -307,17 +397,58 @@ module MaRuKu; module Out; module HTML
|
|
307
397
|
Text.new(source, true, nil, false )
|
308
398
|
end
|
309
399
|
|
400
|
+
=begin maruku_doc
|
401
|
+
Attribute: html_use_syntax
|
402
|
+
Scope: global, document, element
|
403
|
+
Output: HTML
|
404
|
+
Summary: Enables the use of the `syntax` package.
|
405
|
+
Related: lang, code_lang
|
406
|
+
Default: <?mrk md_code(Globals[:html_use_syntax].to_s) ?>
|
407
|
+
|
408
|
+
If true, the `syntax` package is used. It supports the `ruby` and `xml`
|
409
|
+
languages. Remember to set the `lang` attribute of the code block.
|
410
|
+
|
411
|
+
Examples:
|
412
|
+
|
413
|
+
require 'maruku'
|
414
|
+
{:lang=ruby html_use_syntax=true}
|
415
|
+
|
416
|
+
and
|
417
|
+
|
418
|
+
<div style="text-align:center">Div</div>
|
419
|
+
{:lang=html html_use_syntax=true}
|
420
|
+
|
421
|
+
produces:
|
422
|
+
|
423
|
+
require 'maruku'
|
424
|
+
{:lang=ruby html_use_syntax=true}
|
425
|
+
|
426
|
+
and
|
427
|
+
|
428
|
+
<div style="text-align:center">Div</div>
|
429
|
+
{:lang=html html_use_syntax=true}
|
430
|
+
|
431
|
+
=end
|
432
|
+
|
310
433
|
def to_html_code;
|
311
434
|
source = self.raw_code
|
312
435
|
|
313
436
|
lang = self.attributes[:lang] || @doc.attributes[:code_lang]
|
314
437
|
|
315
438
|
lang = 'xml' if lang=='html'
|
316
|
-
|
439
|
+
|
440
|
+
|
441
|
+
use_syntax = get_setting :html_use_syntax
|
317
442
|
|
318
443
|
element =
|
319
444
|
if use_syntax && lang
|
320
445
|
begin
|
446
|
+
if not $syntax_loaded
|
447
|
+
require 'rubygems'
|
448
|
+
require 'syntax'
|
449
|
+
require 'syntax/convertors/html'
|
450
|
+
$syntax_loaded = true
|
451
|
+
end
|
321
452
|
convertor = Syntax::Convertors::HTML.for_syntax lang
|
322
453
|
|
323
454
|
# eliminate trailing newlines otherwise Syntax crashes
|
@@ -328,6 +459,10 @@ module MaRuKu; module Out; module HTML
|
|
328
459
|
pre = Document.new(html, {:respect_whitespace =>:all}).root
|
329
460
|
pre.attributes['class'] = lang
|
330
461
|
pre
|
462
|
+
rescue LoadError => e
|
463
|
+
maruku_error "Could not load package 'syntax'.\n"+
|
464
|
+
"Please install it, for example using 'gem install syntax'."
|
465
|
+
to_html_code_using_pre(source)
|
331
466
|
rescue Object => e
|
332
467
|
maruku_error"Error while using the syntax library for code:\n#{source.inspect}"+
|
333
468
|
"Lang is #{lang} object is: \n"+
|
@@ -341,13 +476,33 @@ module MaRuKu; module Out; module HTML
|
|
341
476
|
to_html_code_using_pre(source)
|
342
477
|
end
|
343
478
|
|
344
|
-
color = get_setting(:code_background_color
|
345
|
-
if color !=
|
479
|
+
color = get_setting(:code_background_color)
|
480
|
+
if color != Globals[:code_background_color]
|
346
481
|
element.attributes['style'] = "background-color: #{color};"
|
347
482
|
end
|
348
483
|
element
|
349
484
|
end
|
350
485
|
|
486
|
+
=begin maruku_doc
|
487
|
+
Attribute: code_background_color
|
488
|
+
Scope: global, document, element
|
489
|
+
Summary: Background color for code blocks.
|
490
|
+
|
491
|
+
The format is either a named color (`green`, `red`) or a CSS color
|
492
|
+
of the form `#ff00ff`.
|
493
|
+
|
494
|
+
* for **HTML output**, the value is put straight in the `background-color` CSS
|
495
|
+
property of the block.
|
496
|
+
|
497
|
+
* for **LaTeX output**, if it is a named color, it must be a color accepted
|
498
|
+
by the LaTeX `color` packages. If it is of the form `#ff00ff`, Maruku
|
499
|
+
defines a color using the `\color[rgb]{r,g,b}` macro.
|
500
|
+
|
501
|
+
For example, for `#0000ff`, the macro is called as: `\color[rgb]{0,0,1}`.
|
502
|
+
|
503
|
+
=end
|
504
|
+
|
505
|
+
|
351
506
|
def to_html_code_using_pre(source)
|
352
507
|
pre = create_html_element 'pre'
|
353
508
|
code = Element.new 'code', pre
|
@@ -358,10 +513,12 @@ module MaRuKu; module Out; module HTML
|
|
358
513
|
s = s.gsub(/\'/,''') # IE bug
|
359
514
|
s = s.gsub(/'/,''') # IE bug
|
360
515
|
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
516
|
+
if get_setting(:code_show_spaces)
|
517
|
+
# 187 = raquo
|
518
|
+
# 160 = nbsp
|
519
|
+
# 172 = not
|
520
|
+
s.gsub!(/\t/,'»'+' '*3)
|
521
|
+
s.gsub!(/ /,'¬')
|
365
522
|
end
|
366
523
|
|
367
524
|
text = Text.new(s, respect_ws=true, parent=nil, raw=true )
|
@@ -375,8 +532,8 @@ module MaRuKu; module Out; module HTML
|
|
375
532
|
source = self.raw_code
|
376
533
|
pre << source2html(source)
|
377
534
|
|
378
|
-
color = get_setting(:code_background_color
|
379
|
-
if color !=
|
535
|
+
color = get_setting(:code_background_color)
|
536
|
+
if color != Globals[:code_background_color]
|
380
537
|
pre.attributes['style'] = "background-color: #{color};"
|
381
538
|
end
|
382
539
|
|
@@ -395,10 +552,6 @@ module MaRuKu; module Out; module HTML
|
|
395
552
|
def to_html_link
|
396
553
|
a = wrap_as_element 'a'
|
397
554
|
id = self.ref_id
|
398
|
-
# if empty, use text
|
399
|
-
if id.size == 0
|
400
|
-
id = children.to_s.downcase
|
401
|
-
end
|
402
555
|
|
403
556
|
if ref = @doc.refs[id]
|
404
557
|
url = ref[:url]
|
@@ -406,7 +559,8 @@ module MaRuKu; module Out; module HTML
|
|
406
559
|
a.attributes['href'] = url if url
|
407
560
|
a.attributes['title'] = title if title
|
408
561
|
else
|
409
|
-
maruku_error"Could not find ref_id = #{id.inspect} for #{self.inspect}"
|
562
|
+
maruku_error "Could not find ref_id = #{id.inspect} for #{self.inspect}\n"+
|
563
|
+
"Available refs are #{@doc.refs.keys.inspect}"
|
410
564
|
tell_user "Not creating a link for ref_id = #{id.inspect}."
|
411
565
|
return wrap_as_element('span')
|
412
566
|
end
|
@@ -460,7 +614,9 @@ module MaRuKu; module Out; module HTML
|
|
460
614
|
id = self.ref_id
|
461
615
|
if ref = @doc.refs[id]
|
462
616
|
url = ref[:url]
|
463
|
-
|
617
|
+
title = ref[:title]
|
618
|
+
a.attributes['src'] = url.to_s
|
619
|
+
a.attributes['alt'] = title.to_s
|
464
620
|
[:title, :class, :style].each do |s|
|
465
621
|
a.attributes[s.to_s] = ref[s] if ref[s]
|
466
622
|
end
|
@@ -483,7 +639,7 @@ module MaRuKu; module Out; module HTML
|
|
483
639
|
title = self.title
|
484
640
|
a = create_html_element 'img'
|
485
641
|
a.attributes['src'] = url
|
486
|
-
a.attributes['
|
642
|
+
a.attributes['alt'] = title.to_s
|
487
643
|
return a
|
488
644
|
end
|
489
645
|
|
@@ -578,22 +734,35 @@ module MaRuKu; module Out; module HTML
|
|
578
734
|
tr<<x
|
579
735
|
end
|
580
736
|
|
581
|
-
tbody << tr
|
737
|
+
tbody << tr << Text.new("\n")
|
582
738
|
end
|
583
739
|
table << tbody
|
584
740
|
table
|
585
741
|
end
|
586
742
|
|
587
743
|
def to_html_head_cell; wrap_as_element('th') end
|
588
|
-
def to_html_cell
|
744
|
+
def to_html_cell
|
745
|
+
if @attributes[:scope]
|
746
|
+
wrap_as_element('th', [:scope])
|
747
|
+
else
|
748
|
+
wrap_as_element('td')
|
749
|
+
end
|
750
|
+
end
|
589
751
|
|
590
752
|
def to_html_entity
|
753
|
+
MaRuKu::Out::Latex.need_entity_table
|
754
|
+
|
591
755
|
entity_name = self.entity_name
|
592
756
|
|
757
|
+
if (e = MaRuKu::Out::Latex::ENTITY_TABLE[entity_name]) && e.html_num
|
758
|
+
entity_name = e.html_num
|
759
|
+
end
|
760
|
+
|
593
761
|
# Fix for Internet Explorer
|
594
762
|
if entity_name == 'apos'
|
595
763
|
entity_name = 39
|
596
764
|
end
|
765
|
+
|
597
766
|
|
598
767
|
if entity_name.kind_of? Fixnum
|
599
768
|
# Entity.new(entity_name)
|