wikicloth 0.6.2 → 0.6.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/section.rb +1 -1
- data/lib/wikicloth/wiki_buffer/link.rb +4 -5
- data/lib/wikicloth/wiki_buffer/var.rb +31 -2
- data/lib/wikicloth/wiki_buffer.rb +8 -6
- data/lib/wikicloth/wiki_link_handler.rb +14 -7
- data/lib/wikicloth.rb +2 -2
- data/run_tests.rb +1 -1
- data/test/wiki_cloth_test.rb +21 -10
- metadata +4 -4
data/lib/wikicloth/section.rb
CHANGED
@@ -75,7 +75,7 @@ module WikiCloth
|
|
75
75
|
ret = "<h#{self.depth}>" + (options[:noedit] == true ? "" :
|
76
76
|
"<span class=\"editsection\">[<a href=\"" + options[:link_handler].section_link(self.id) +
|
77
77
|
"\" title=\"Edit section: #{self.title}\">edit</a>]</span> ") +
|
78
|
-
"<span id=\"#{self.id}\" class=\"mw-headline\"><a name=\"#{self.id}\">#{self.title}</a></span></h#{self.depth}
|
78
|
+
"<span id=\"#{self.id}\" class=\"mw-headline\"><a name=\"#{self.id}\">#{self.title}</a></span></h#{self.depth}>\n"
|
79
79
|
end
|
80
80
|
#ret += @template ? self.gsub(/\{\{\{\s*([A-Za-z0-9]+)\s*\}\}\}/,'\1') : self
|
81
81
|
ret += self
|
@@ -13,13 +13,12 @@ class WikiBuffer::Link < WikiBuffer
|
|
13
13
|
|
14
14
|
def to_s
|
15
15
|
link_handler = @options[:link_handler]
|
16
|
-
unless self.internal_link
|
17
|
-
|
18
|
-
url = 'http://' + url if url !~ /^\s*(([a-z]+):\/\/|[\?\/])/
|
19
|
-
|
20
|
-
return link_handler.external_link(url, "#{params[1]}".strip)
|
16
|
+
unless self.internal_link || params[0].strip !~ /^\s*(([a-z]+):\/\/|[\?\/])/
|
17
|
+
return link_handler.external_link("#{params[0]}".strip, "#{params[1]}".strip)
|
21
18
|
else
|
22
19
|
case
|
20
|
+
when !self.internal_link
|
21
|
+
return "[#{params[0]}]"
|
23
22
|
when params[0] =~ /^:(.*)/
|
24
23
|
return link_handler.link_for(params[0],params[1])
|
25
24
|
when params[0] =~ /^\s*([a-zA-Z0-9-]+)\s*:(.*)$/
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'expression_parser'
|
2
|
+
require 'uri'
|
2
3
|
|
3
4
|
module WikiCloth
|
4
5
|
|
@@ -22,6 +23,10 @@ class WikiBuffer::Var < WikiBuffer
|
|
22
23
|
@tag_size = val
|
23
24
|
end
|
24
25
|
|
26
|
+
def skip_links?
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
25
30
|
def skip_html?
|
26
31
|
false
|
27
32
|
end
|
@@ -46,7 +51,7 @@ class WikiBuffer::Var < WikiBuffer
|
|
46
51
|
elsif self.is_param?
|
47
52
|
ret = nil
|
48
53
|
@options[:buffer].buffers.reverse.each do |b|
|
49
|
-
ret = b.get_param(params[0],params[1]) if b.instance_of?(WikiBuffer::HTMLElement) && b.element_name == "template"
|
54
|
+
ret = b.get_param(params[0].downcase,params[1]) if b.instance_of?(WikiBuffer::HTMLElement) && b.element_name == "template"
|
50
55
|
end
|
51
56
|
ret.to_s
|
52
57
|
else
|
@@ -62,7 +67,7 @@ class WikiBuffer::Var < WikiBuffer
|
|
62
67
|
count = 0
|
63
68
|
tag_attr = self.params[1..-1].collect { |p|
|
64
69
|
if p.instance_of?(Hash)
|
65
|
-
"#{p[:name]}=\"#{p[:value]}\""
|
70
|
+
"#{p[:name].downcase}=\"#{p[:value]}\""
|
66
71
|
else
|
67
72
|
count += 1
|
68
73
|
"#{count}=\"#{p}\""
|
@@ -98,6 +103,17 @@ class WikiBuffer::Var < WikiBuffer
|
|
98
103
|
rescue RuntimeError
|
99
104
|
"Expression error: #{$!}"
|
100
105
|
end
|
106
|
+
when "#ifexpr"
|
107
|
+
val = false
|
108
|
+
begin
|
109
|
+
val = ExpressionParser::Parser.new.parse(params.first)
|
110
|
+
rescue RuntimeError
|
111
|
+
end
|
112
|
+
if val
|
113
|
+
params[1]
|
114
|
+
else
|
115
|
+
params[2]
|
116
|
+
end
|
101
117
|
when "#ifeq"
|
102
118
|
if params[0] =~ /^[0-9A-Fa-f]+$/ && params[1] =~ /^[0-9A-Fa-f]+$/
|
103
119
|
params[0].to_i == params[1].to_i ? params[2] : params[3]
|
@@ -122,6 +138,8 @@ class WikiBuffer::Var < WikiBuffer
|
|
122
138
|
when "#capture"
|
123
139
|
@options[:params][params.first] = params[1]
|
124
140
|
""
|
141
|
+
when "urlencode"
|
142
|
+
URI.escape(params.first, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
125
143
|
when "lc"
|
126
144
|
params.first.downcase
|
127
145
|
when "uc"
|
@@ -132,6 +150,17 @@ class WikiBuffer::Var < WikiBuffer
|
|
132
150
|
params.first[0,1].downcase + params.first[1,-1]
|
133
151
|
when "plural"
|
134
152
|
params.first.to_i > 1 ? params[1] : params[2]
|
153
|
+
when "ns"
|
154
|
+
values = { "" => "", "0" => "", "1" => "Talk", "talk" => "Talk", "2" => "User", "user" => "User",
|
155
|
+
"3" => "User talk", "user_talk" => "User talk", "4" => "Meta", "project" => "Meta",
|
156
|
+
"5" => "Meta talk", "project_talk" => "Meta talk", "6" => "File", "image" => "File",
|
157
|
+
"7" => "File talk", "image_talk" => "File talk", "8" => "MediaWiki", "mediawiki" => "MediaWiki",
|
158
|
+
"9" => "MediaWiki talk", "mediawiki_talk" => "MediaWiki talk", "10" => "Template",
|
159
|
+
"template" => "Template", "11" => "Template talk", "template_talk" => "Template talk",
|
160
|
+
"12" => "Help", "help" => "Help", "13" => "Help talk", "help_talk" => "Help talk",
|
161
|
+
"14" => "Category", "category" => "Category", "15" => "Category talk", "category_talk" => "Category talk",
|
162
|
+
"-2" => "Media", "media" => "Media", "-1" => "Special", "special" => "Special" }
|
163
|
+
values[params.first.gsub(/\s+/,'_').downcase]
|
135
164
|
when "debug"
|
136
165
|
ret = nil
|
137
166
|
case params.first
|
@@ -30,6 +30,10 @@ class WikiBuffer
|
|
30
30
|
false
|
31
31
|
end
|
32
32
|
|
33
|
+
def skip_links?
|
34
|
+
false
|
35
|
+
end
|
36
|
+
|
33
37
|
def data
|
34
38
|
@data ||= ""
|
35
39
|
end
|
@@ -58,7 +62,7 @@ class WikiBuffer
|
|
58
62
|
end
|
59
63
|
|
60
64
|
def to_s
|
61
|
-
|
65
|
+
self.params.join("\n")
|
62
66
|
end
|
63
67
|
|
64
68
|
def check_globals()
|
@@ -74,7 +78,7 @@ class WikiBuffer
|
|
74
78
|
@indent = nil
|
75
79
|
return true
|
76
80
|
end
|
77
|
-
if current_char == " " && @indent.nil? && @buffers[-1].class
|
81
|
+
if current_char == " " && @indent.nil? && ![WikiBuffer::HTMLElement,WikiBuffer::Var].include?(@buffers[-1].class)
|
78
82
|
"\n<pre> ".each_char { |c| @buffers[-1].add_char(c) }
|
79
83
|
@indent = @buffers[-1].object_id
|
80
84
|
return true
|
@@ -103,7 +107,7 @@ class WikiBuffer
|
|
103
107
|
return true
|
104
108
|
|
105
109
|
# start link
|
106
|
-
when current_char == '[' && previous_char != '['
|
110
|
+
when current_char == '[' && previous_char != '[' && !@buffers[-1].skip_links?
|
107
111
|
@buffers << WikiBuffer::Link.new("",@options)
|
108
112
|
return true
|
109
113
|
|
@@ -217,11 +221,9 @@ class WikiBuffer
|
|
217
221
|
@list_data = cdata
|
218
222
|
tmp
|
219
223
|
}
|
220
|
-
self.data += line + "
|
224
|
+
self.data += line + ""
|
221
225
|
end
|
222
226
|
|
223
|
-
self.data = "</p><p>" if self.data.blank?
|
224
|
-
|
225
227
|
self.params << self.data.auto_link
|
226
228
|
self.data = ""
|
227
229
|
else
|
@@ -81,7 +81,7 @@ class WikiLinkHandler
|
|
81
81
|
end
|
82
82
|
|
83
83
|
def url_for(page)
|
84
|
-
"
|
84
|
+
"#{page}"
|
85
85
|
end
|
86
86
|
|
87
87
|
def link_attributes_for(page)
|
@@ -99,13 +99,20 @@ class WikiLinkHandler
|
|
99
99
|
if self.params.has_key?(resource)
|
100
100
|
self.params[resource]
|
101
101
|
else
|
102
|
-
|
103
|
-
|
104
|
-
@included_templates ||= {}
|
105
|
-
@included_templates[resource] ||= 0
|
102
|
+
@template_cache ||= {}
|
103
|
+
if @template_cache[resource]
|
106
104
|
@included_templates[resource] += 1
|
105
|
+
@template_cache[resource]
|
106
|
+
else
|
107
|
+
ret = template(resource)
|
108
|
+
unless ret.nil?
|
109
|
+
@included_templates ||= {}
|
110
|
+
@included_templates[resource] ||= 0
|
111
|
+
@included_templates[resource] += 1
|
112
|
+
end
|
113
|
+
@template_cache[resource] = ret
|
114
|
+
ret
|
107
115
|
end
|
108
|
-
ret
|
109
116
|
end
|
110
117
|
end
|
111
118
|
|
@@ -146,7 +153,7 @@ class WikiLinkHandler
|
|
146
153
|
type = nil
|
147
154
|
w = 180
|
148
155
|
h = nil
|
149
|
-
title =
|
156
|
+
title = ''
|
150
157
|
ffloat = false
|
151
158
|
|
152
159
|
options.each do |x|
|
data/lib/wikicloth.rb
CHANGED
@@ -10,7 +10,7 @@ String.send(:include, ExtendedString)
|
|
10
10
|
|
11
11
|
module WikiCloth
|
12
12
|
|
13
|
-
VERSION = "0.6.
|
13
|
+
VERSION = "0.6.3"
|
14
14
|
|
15
15
|
class WikiCloth
|
16
16
|
|
@@ -62,7 +62,7 @@ module WikiCloth
|
|
62
62
|
data << "\n" if data.last(1) != "\n"
|
63
63
|
buffer = WikiBuffer.new("",options)
|
64
64
|
data.each_char { |c| buffer.add_char(c) }
|
65
|
-
buffer.to_s
|
65
|
+
"<p>"+buffer.to_s.gsub(/\n\s*\n/m) { |p| "</p>\n\n<p>" }+"</p>"
|
66
66
|
end
|
67
67
|
|
68
68
|
def to_html(opt={})
|
data/run_tests.rb
CHANGED
data/test/wiki_cloth_test.rb
CHANGED
@@ -27,9 +27,26 @@ class WikiClothTest < ActiveSupport::TestCase
|
|
27
27
|
test "links and references" do
|
28
28
|
wiki = WikiCloth::Parser.new(:data => File.open(File.join(File.dirname(__FILE__), '../sample_documents/george_washington.wiki'), READ_MODE) { |f| f.read })
|
29
29
|
data = wiki.to_html
|
30
|
-
assert wiki.external_links.size ==
|
30
|
+
assert wiki.external_links.size == 38
|
31
31
|
assert wiki.references.size == 76
|
32
|
-
assert wiki.internal_links.size ==
|
32
|
+
assert wiki.internal_links.size == 450
|
33
|
+
end
|
34
|
+
|
35
|
+
test "Embedded images with no explicit title" do
|
36
|
+
wiki = WikiParser.new(:data => "[[Image:Rectangular coordinates.svg|left|thumb|250px]]")
|
37
|
+
test = true
|
38
|
+
begin
|
39
|
+
data = wiki.to_html
|
40
|
+
rescue
|
41
|
+
test = false
|
42
|
+
end
|
43
|
+
assert test == true
|
44
|
+
end
|
45
|
+
|
46
|
+
test "First item in list not created when list is preceded by a heading" do
|
47
|
+
wiki = WikiParser.new(:data => "=Heading=\n* One\n* Two\n* Three")
|
48
|
+
data = wiki.to_html
|
49
|
+
assert data !~ /\*/
|
33
50
|
end
|
34
51
|
|
35
52
|
test "behavior switch should not show up in the html output" do
|
@@ -62,12 +79,6 @@ EOS
|
|
62
79
|
assert data !~ /\]/
|
63
80
|
end
|
64
81
|
|
65
|
-
test "external links without a http:// prefix" do
|
66
|
-
wiki = WikiCloth::Parser.new(:data => "[www.google.com]")
|
67
|
-
data = wiki.to_html
|
68
|
-
assert data =~ /http/
|
69
|
-
end
|
70
|
-
|
71
82
|
test "auto pre at end of document" do
|
72
83
|
wiki = WikiParser.new(:data => "test\n\n hello\n world\nend")
|
73
84
|
data = wiki.to_html
|
@@ -162,10 +173,10 @@ EOS
|
|
162
173
|
test "disable edit stuff" do
|
163
174
|
wiki = WikiParser.new(:data => "= Hallo =")
|
164
175
|
data = wiki.to_html
|
165
|
-
assert_equal data, "<p>\n<h1><span class=\"editsection\">[<a href=\"?section=Hallo\" title=\"Edit section: Hallo\">edit</a>]</span> <span class=\"mw-headline\" id=\"Hallo\"><a name=\"Hallo\">Hallo</a></span></h1
|
176
|
+
assert_equal data, "<p>\n<h1><span class=\"editsection\">[<a href=\"?section=Hallo\" title=\"Edit section: Hallo\">edit</a>]</span> <span class=\"mw-headline\" id=\"Hallo\"><a name=\"Hallo\">Hallo</a></span></h1></p>"
|
166
177
|
|
167
178
|
data = wiki.to_html(:noedit => true)
|
168
|
-
assert_equal data, "<p>\n<h1><span class=\"mw-headline\" id=\"Hallo\"><a name=\"Hallo\">Hallo</a></span></h1
|
179
|
+
assert_equal data, "<p>\n<h1><span class=\"mw-headline\" id=\"Hallo\"><a name=\"Hallo\">Hallo</a></span></h1></p>"
|
169
180
|
|
170
181
|
end
|
171
182
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wikicloth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 1
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 6
|
9
|
-
-
|
10
|
-
version: 0.6.
|
9
|
+
- 3
|
10
|
+
version: 0.6.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- David Ricciardi
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-31 00:00:00 +00:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|