wikicloth 0.8.2 → 0.8.3
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/lib/wikicloth.rb +32 -30
- data/lib/wikicloth/core_ext.rb +9 -1
- data/lib/wikicloth/version.rb +1 -1
- data/lib/wikicloth/wiki_buffer.rb +3 -1
- data/test/test_helper.rb +1 -4
- data/test/wiki_cloth_test.rb +13 -7
- data/wikicloth.gemspec +2 -0
- metadata +42 -20
data/lib/wikicloth.rb
CHANGED
@@ -58,43 +58,45 @@ module WikiCloth
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def render(opt={})
|
61
|
-
self.options = { :noedit => false, :
|
61
|
+
self.options = { :noedit => false, :fast => true, :output => :html, :link_handler => self.link_handler,
|
62
62
|
:params => self.params, :sections => self.sections }.merge(self.options).merge(opt)
|
63
63
|
self.options[:link_handler].params = options[:params]
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
65
|
+
locale = self.options[:locale] || I18n.locale
|
66
|
+
|
67
|
+
I18n.with_locale(locale) do
|
68
|
+
data = self.sections.collect { |s| s.render(self.options) }.join
|
69
|
+
data.gsub!(/<!--(.|\s)*?-->/,"")
|
70
|
+
data << "\n" if data.last(1) != "\n"
|
71
|
+
data << "garbage"
|
72
|
+
|
73
|
+
buffer = WikiBuffer.new("",options)
|
74
|
+
|
75
|
+
begin
|
76
|
+
if self.options[:fast]
|
77
|
+
until data.empty?
|
78
|
+
case data
|
79
|
+
when /\A\w+/
|
80
|
+
data = $'
|
81
|
+
@current_row += $&.length
|
82
|
+
buffer.add_word($&)
|
83
|
+
when /\A[^\w]+(\w|)/m
|
84
|
+
data = $'
|
85
|
+
$&.each_char { |c| add_current_char(buffer,c) }
|
86
|
+
end
|
85
87
|
end
|
88
|
+
else
|
89
|
+
data.each_char { |c| add_current_char(buffer,c) }
|
86
90
|
end
|
87
|
-
|
88
|
-
|
91
|
+
rescue => err
|
92
|
+
debug_tree = buffer.buffers.collect { |b| b.debug }.join("-->")
|
93
|
+
puts I18n.t("unknown error on line", :line => @current_line, :row => @current_row, :tree => debug_tree)
|
94
|
+
raise err
|
89
95
|
end
|
90
|
-
rescue => err
|
91
|
-
debug_tree = buffer.buffers.collect { |b| b.debug }.join("-->")
|
92
|
-
puts I18n.t("unknown error on line", :line => @current_line, :row => @current_row, :tree => debug_tree)
|
93
|
-
raise err
|
94
|
-
end
|
95
96
|
|
96
|
-
|
97
|
-
|
97
|
+
buffer.eof()
|
98
|
+
buffer.send("to_#{self.options[:output]}")
|
99
|
+
end
|
98
100
|
end
|
99
101
|
|
100
102
|
def sections
|
data/lib/wikicloth/core_ext.rb
CHANGED
@@ -2,6 +2,8 @@ begin
|
|
2
2
|
require 'rinku'
|
3
3
|
rescue LoadError
|
4
4
|
require 'twitter-text'
|
5
|
+
require 'nokogiri'
|
6
|
+
require 'htmlentities'
|
5
7
|
end
|
6
8
|
|
7
9
|
READ_MODE = "r:UTF-8"
|
@@ -34,7 +36,13 @@ module ExtendedString
|
|
34
36
|
end
|
35
37
|
else
|
36
38
|
def auto_link
|
37
|
-
|
39
|
+
doc = Nokogiri::HTML::DocumentFragment.parse(to_s)
|
40
|
+
doc.xpath(".//text()").each do |node|
|
41
|
+
autolink = Twitter::Autolink.auto_link_urls(node.to_s, :suppress_no_follow => true, :target_blank => false)
|
42
|
+
autolink = HTMLEntities.new.decode(autolink) if node.parent.name == "pre"
|
43
|
+
node.replace autolink
|
44
|
+
end
|
45
|
+
doc.to_s
|
38
46
|
end
|
39
47
|
end
|
40
48
|
|
data/lib/wikicloth/version.rb
CHANGED
@@ -218,6 +218,8 @@ class WikiBuffer
|
|
218
218
|
(@paragraph_open ? "</p>" : "") + gen_heading($1.length,$2)
|
219
219
|
}
|
220
220
|
|
221
|
+
self.data = self.data.auto_link
|
222
|
+
|
221
223
|
# Paragraphs
|
222
224
|
if is_heading
|
223
225
|
@paragraph_open = false
|
@@ -232,7 +234,7 @@ class WikiBuffer
|
|
232
234
|
end
|
233
235
|
end
|
234
236
|
|
235
|
-
self.params << self.data
|
237
|
+
self.params << self.data
|
236
238
|
self.data = ""
|
237
239
|
else
|
238
240
|
self.data << current_char
|
data/test/test_helper.rb
CHANGED
@@ -1,8 +1,5 @@
|
|
1
|
-
|
2
1
|
require 'rubygems'
|
3
|
-
gem "test-unit", ">= 2.0.5"
|
4
|
-
require 'active_support'
|
5
|
-
require 'active_support/test_case'
|
6
2
|
require 'test/unit'
|
3
|
+
require 'active_support'
|
7
4
|
I18n.load_path << File.join(File.dirname(__FILE__),'locales.yml')
|
8
5
|
require File.join(File.dirname(__FILE__),'../init')
|
data/test/wiki_cloth_test.rb
CHANGED
@@ -37,7 +37,7 @@ class WikiParser < WikiCloth::Parser
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
class WikiClothTest <
|
40
|
+
class WikiClothTest < Test::Unit::TestCase
|
41
41
|
|
42
42
|
test "a url should be automaticly linked" do
|
43
43
|
wiki = WikiCloth::Parser.new(:data => "\n\n\nhttp://www.google.com/")
|
@@ -51,10 +51,16 @@ class WikiClothTest < ActiveSupport::TestCase
|
|
51
51
|
assert data.include?('<a href="http://www.google.com/">')
|
52
52
|
wiki = WikiCloth::Parser.new(:data => "[https://github.com/repo/README.md README]")
|
53
53
|
data = wiki.to_html
|
54
|
-
|
54
|
+
assert_equal data, "\n<p><a href=\"https://github.com/repo/README.md\" target=\"_blank\">README</a></p>"
|
55
55
|
assert data =~ /\>\s*README\s*\</
|
56
56
|
end
|
57
57
|
|
58
|
+
test "autolinking keeps html entities intact" do
|
59
|
+
wiki = WikiCloth::Parser.new(:data => "<div>& ></div><pre>& <</pre> https://github.com/repo/README.md > &")
|
60
|
+
data = wiki.to_html
|
61
|
+
assert_equal "\n<p><div>& ></div><pre>& <</pre> <a href=\"https://github.com/repo/README.md\">https://github.com/repo/README.md</a> > &</p>", data
|
62
|
+
end
|
63
|
+
|
58
64
|
test "image url override" do
|
59
65
|
wiki = WikiCloth::Parser.new(:data => "[[Image:test.jpg]]")
|
60
66
|
data = wiki.to_html
|
@@ -279,7 +285,7 @@ class WikiClothTest < ActiveSupport::TestCase
|
|
279
285
|
test "template vars should not be parsed inside a pre tag" do
|
280
286
|
wiki = WikiCloth::Parser.new(:data => "<pre>{{{1}}}</pre>")
|
281
287
|
data = wiki.to_html
|
282
|
-
assert data =~
|
288
|
+
assert data =~ /\{\{\{1\}\}\}/
|
283
289
|
end
|
284
290
|
|
285
291
|
test "[[ links ]] should not work inside pre tags" do
|
@@ -391,7 +397,7 @@ EOS
|
|
391
397
|
end
|
392
398
|
|
393
399
|
test "sanitize html" do
|
394
|
-
wiki = WikiParser.new(:data => "<script type=\"text/javascript\" src=\"bla.js\"></script>\n<a href=\"test.html\" onmouseover=\"alert('hello world');\">test</a>\n")
|
400
|
+
wiki = WikiParser.new(:data => "<pre><test</pre><script type=\"text/javascript\" src=\"bla.js\"></script>\n<a href=\"test.html\" onmouseover=\"alert('hello world');\">test</a>\n")
|
395
401
|
data = wiki.to_html
|
396
402
|
assert !(data =~ /<script/)
|
397
403
|
assert !(data =~ /onmouseover/)
|
@@ -440,7 +446,7 @@ EOS
|
|
440
446
|
test "empty item in toc" do
|
441
447
|
wiki = WikiCloth::WikiCloth.new({:data => "__TOC__\n=A="})
|
442
448
|
data = wiki.render
|
443
|
-
assert data.include?("<table id=\"toc\" class=\"toc\" summary=\"Contents\"><tr><td
|
449
|
+
assert data.include?("<table id=\"toc\" class=\"toc\" summary=\"Contents\"><tr><td>\n<div id=\"toctitle\"><h2>Table of Contents</h2></div>\n<ul><li><a href=\"#A\">A</a></li></ul>\n</td></tr></table>")
|
444
450
|
end
|
445
451
|
|
446
452
|
test "pre at beginning" do
|
@@ -452,12 +458,12 @@ EOS
|
|
452
458
|
test "toc declared as list" do
|
453
459
|
wiki = WikiCloth::WikiCloth.new({:data => "__TOC__\n=A=\n==B==\n===C==="})
|
454
460
|
data = wiki.render
|
455
|
-
assert data.include?("<table id=\"toc\" class=\"toc\" summary=\"Contents\"><tr><td
|
461
|
+
assert data.include?("<table id=\"toc\" class=\"toc\" summary=\"Contents\"><tr><td>\n<div id=\"toctitle\"><h2>Table of Contents</h2></div>\n<ul><li>\n<a href=\"#A\">A</a><ul><li>\n<a href=\"#B\">B</a><ul><li><a href=\"#C\">C</a></li></ul>\n</li></ul>\n</li></ul>\n</td></tr></table>")
|
456
462
|
end
|
457
463
|
|
458
464
|
test "toc numbered" do
|
459
465
|
wiki = WikiCloth::WikiCloth.new({:data => "=A=\n=B=\n==C==\n==D==\n===E===\n===F===\n====G====\n====H====\n==I==\n=J=\n=K=\n===L===\n===M===\n====N====\n====O===="})
|
460
466
|
data = wiki.render(:noedit => true, :toc_numbered => true)
|
461
|
-
assert data.include?("<table id=\"toc\" class=\"toc\" summary=\"Contents\"><tr><td
|
467
|
+
assert data.include?("<table id=\"toc\" class=\"toc\" summary=\"Contents\"><tr><td>\n<div id=\"toctitle\"><h2>Table of Contents</h2></div>\n<ul>\n<li><a href=\"#A\">1 A</a></li>\n<li>\n<a href=\"#B\">2 B</a><ul>\n<li><a href=\"#C\">2.1 C</a></li>\n<li>\n<a href=\"#D\">2.2 D</a><ul>\n<li><a href=\"#E\">2.2.1 E</a></li>\n<li>\n<a href=\"#F\">2.2.2 F</a><ul>\n<li><a href=\"#G\">2.2.2.1 G</a></li>\n<li><a href=\"#H\">2.2.2.2 H</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#I\">2.3 I</a></li>\n</ul>\n</li>\n<li><a href=\"#J\">3 J</a></li>\n<li>\n<a href=\"#K\">4 K</a><ul><ul>\n<li><a href=\"#L\">4.1 L</a></li>\n<li>\n<a href=\"#M\">4.2 M</a><ul>\n<li><a href=\"#N\">4.2.1 N</a></li>\n<li><a href=\"#O\">4.2.2 O</a></li>\n</ul>\n</li>\n</ul></ul>\n</li>\n</ul>\n</td></tr></table>")
|
462
468
|
end
|
463
469
|
end
|
data/wikicloth.gemspec
CHANGED
@@ -23,6 +23,8 @@ spec = Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'builder'
|
24
24
|
s.add_dependency 'expression_parser'
|
25
25
|
s.add_dependency 'twitter-text'
|
26
|
+
s.add_dependency 'nokogiri'
|
27
|
+
s.add_dependency 'htmlentities'
|
26
28
|
s.add_development_dependency 'test-unit'
|
27
29
|
s.add_development_dependency 'activesupport'
|
28
30
|
s.add_development_dependency 'i18n'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wikicloth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: builder
|
16
|
-
requirement: &
|
16
|
+
requirement: &21800440 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *21800440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: expression_parser
|
27
|
-
requirement: &
|
27
|
+
requirement: &21800020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *21800020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: twitter-text
|
38
|
-
requirement: &
|
38
|
+
requirement: &21799600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,32 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *21799600
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: nokogiri
|
49
|
+
requirement: &21799180 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *21799180
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: htmlentities
|
60
|
+
requirement: &21798760 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *21798760
|
47
69
|
- !ruby/object:Gem::Dependency
|
48
70
|
name: test-unit
|
49
|
-
requirement: &
|
71
|
+
requirement: &21798340 !ruby/object:Gem::Requirement
|
50
72
|
none: false
|
51
73
|
requirements:
|
52
74
|
- - ! '>='
|
@@ -54,10 +76,10 @@ dependencies:
|
|
54
76
|
version: '0'
|
55
77
|
type: :development
|
56
78
|
prerelease: false
|
57
|
-
version_requirements: *
|
79
|
+
version_requirements: *21798340
|
58
80
|
- !ruby/object:Gem::Dependency
|
59
81
|
name: activesupport
|
60
|
-
requirement: &
|
82
|
+
requirement: &21797920 !ruby/object:Gem::Requirement
|
61
83
|
none: false
|
62
84
|
requirements:
|
63
85
|
- - ! '>='
|
@@ -65,10 +87,10 @@ dependencies:
|
|
65
87
|
version: '0'
|
66
88
|
type: :development
|
67
89
|
prerelease: false
|
68
|
-
version_requirements: *
|
90
|
+
version_requirements: *21797920
|
69
91
|
- !ruby/object:Gem::Dependency
|
70
92
|
name: i18n
|
71
|
-
requirement: &
|
93
|
+
requirement: &21835860 !ruby/object:Gem::Requirement
|
72
94
|
none: false
|
73
95
|
requirements:
|
74
96
|
- - ! '>='
|
@@ -76,10 +98,10 @@ dependencies:
|
|
76
98
|
version: '0'
|
77
99
|
type: :development
|
78
100
|
prerelease: false
|
79
|
-
version_requirements: *
|
101
|
+
version_requirements: *21835860
|
80
102
|
- !ruby/object:Gem::Dependency
|
81
103
|
name: rake
|
82
|
-
requirement: &
|
104
|
+
requirement: &21835440 !ruby/object:Gem::Requirement
|
83
105
|
none: false
|
84
106
|
requirements:
|
85
107
|
- - ! '>='
|
@@ -87,10 +109,10 @@ dependencies:
|
|
87
109
|
version: '0'
|
88
110
|
type: :development
|
89
111
|
prerelease: false
|
90
|
-
version_requirements: *
|
112
|
+
version_requirements: *21835440
|
91
113
|
- !ruby/object:Gem::Dependency
|
92
114
|
name: rdoc
|
93
|
-
requirement: &
|
115
|
+
requirement: &21835020 !ruby/object:Gem::Requirement
|
94
116
|
none: false
|
95
117
|
requirements:
|
96
118
|
- - ! '>='
|
@@ -98,10 +120,10 @@ dependencies:
|
|
98
120
|
version: '0'
|
99
121
|
type: :development
|
100
122
|
prerelease: false
|
101
|
-
version_requirements: *
|
123
|
+
version_requirements: *21835020
|
102
124
|
- !ruby/object:Gem::Dependency
|
103
125
|
name: simplecov
|
104
|
-
requirement: &
|
126
|
+
requirement: &21834600 !ruby/object:Gem::Requirement
|
105
127
|
none: false
|
106
128
|
requirements:
|
107
129
|
- - ! '>='
|
@@ -109,7 +131,7 @@ dependencies:
|
|
109
131
|
version: '0'
|
110
132
|
type: :development
|
111
133
|
prerelease: false
|
112
|
-
version_requirements: *
|
134
|
+
version_requirements: *21834600
|
113
135
|
description: mediawiki parser
|
114
136
|
email: nricciar@gmail.com
|
115
137
|
executables: []
|