wikitext 1.5.3 → 1.6
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/ext/parser.c +17 -7
- data/lib/wikitext/nil_class.rb +2 -1
- data/lib/wikitext/parser.rb +2 -1
- data/lib/wikitext/rails.rb +1 -1
- data/lib/wikitext/string.rb +4 -2
- data/lib/wikitext/version.rb +1 -1
- data/rails/init.rb +4 -3
- data/spec/img_spec.rb +9 -0
- data/spec/indentation_spec.rb +21 -13
- metadata +2 -2
data/ext/parser.c
CHANGED
@@ -237,7 +237,7 @@ VALUE _Wikitext_hyperlink(parser_t *parser, VALUE link_prefix, VALUE link_target
|
|
237
237
|
rb_str_append(string, link_prefix);
|
238
238
|
rb_str_append(string, link_target);
|
239
239
|
|
240
|
-
|
240
|
+
// special handling for mailto URIs
|
241
241
|
const char *mailto = "mailto:";
|
242
242
|
if (NIL_P(link_prefix) &&
|
243
243
|
RSTRING_LEN(link_target) >= (long)sizeof(mailto) &&
|
@@ -258,7 +258,7 @@ VALUE _Wikitext_hyperlink(parser_t *parser, VALUE link_prefix, VALUE link_target
|
|
258
258
|
void _Wikitext_append_img(parser_t *parser, char *token_ptr, int token_len)
|
259
259
|
{
|
260
260
|
rb_str_cat(parser->output, img_start, sizeof(img_start) - 1); // <img src="
|
261
|
-
if (!NIL_P(parser->img_prefix))
|
261
|
+
if (!NIL_P(parser->img_prefix) && *token_ptr != '/') // len always > 0
|
262
262
|
rb_str_append(parser->output, parser->img_prefix);
|
263
263
|
rb_str_cat(parser->output, token_ptr, token_len);
|
264
264
|
rb_str_cat(parser->output, img_alt, sizeof(img_alt) - 1); // " alt="
|
@@ -271,6 +271,8 @@ void _Wikitext_append_img(parser_t *parser, char *token_ptr, int token_len)
|
|
271
271
|
// each time we enter one of those spans must ++ the indentation level
|
272
272
|
void _Wikitext_indent(parser_t *parser)
|
273
273
|
{
|
274
|
+
if (parser->base_indent == -1) // indentation disabled
|
275
|
+
return;
|
274
276
|
int space_count = parser->current_indent + parser->base_indent;
|
275
277
|
if (space_count > 0)
|
276
278
|
{
|
@@ -290,6 +292,8 @@ void _Wikitext_indent(parser_t *parser)
|
|
290
292
|
|
291
293
|
void _Wikitext_dedent(parser_t *parser, VALUE emit)
|
292
294
|
{
|
295
|
+
if (parser->base_indent == -1) // indentation disabled
|
296
|
+
return;
|
293
297
|
parser->current_indent -= 2;
|
294
298
|
if (emit != Qtrue)
|
295
299
|
return;
|
@@ -990,9 +994,15 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
|
|
990
994
|
// :indent => 0 (or more)
|
991
995
|
if (rb_funcall(options, rb_intern("has_key?"), 1, ID2SYM(rb_intern("indent"))) == Qtrue)
|
992
996
|
{
|
993
|
-
|
994
|
-
if (
|
995
|
-
base_indent =
|
997
|
+
VALUE indent = rb_hash_aref(options, ID2SYM(rb_intern("indent")));
|
998
|
+
if (indent == Qfalse)
|
999
|
+
base_indent = -1; // indentation disabled
|
1000
|
+
else
|
1001
|
+
{
|
1002
|
+
base_indent = NUM2INT(indent);
|
1003
|
+
if (base_indent < 0)
|
1004
|
+
base_indent = 0;
|
1005
|
+
}
|
996
1006
|
}
|
997
1007
|
|
998
1008
|
// :base_heading_level => 0/1/2/3/4/5/6
|
@@ -2416,14 +2426,14 @@ VALUE Wikitext_parser_parse(int argc, VALUE *argv, VALUE self)
|
|
2416
2426
|
{
|
2417
2427
|
if (type == PATH || type == PRINTABLE || type == ALNUM || type == SPECIAL_URI_CHARS)
|
2418
2428
|
rb_str_cat(parser->link_target, token->start, TOKEN_LEN(token));
|
2419
|
-
else if (type == IMG_END)
|
2429
|
+
else if (type == IMG_END && RSTRING_LEN(parser->link_target) > 0)
|
2420
2430
|
{
|
2421
2431
|
// success
|
2422
2432
|
_Wikitext_append_img(parser, RSTRING_PTR(parser->link_target), RSTRING_LEN(parser->link_target));
|
2423
2433
|
token = NULL;
|
2424
2434
|
break;
|
2425
2435
|
}
|
2426
|
-
else // unexpected token (syntax error)
|
2436
|
+
else // unexpected token or zero-length target (syntax error)
|
2427
2437
|
{
|
2428
2438
|
// rollback
|
2429
2439
|
rb_str_cat(parser->output, literal_img_start, sizeof(literal_img_start) - 1);
|
data/lib/wikitext/nil_class.rb
CHANGED
@@ -21,7 +21,8 @@
|
|
21
21
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
22
|
# POSSIBILITY OF SUCH DAMAGE.
|
23
23
|
|
24
|
-
require '
|
24
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'ext',
|
25
|
+
'wikitext'))
|
25
26
|
|
26
27
|
class NilClass
|
27
28
|
def to_wikitext
|
data/lib/wikitext/parser.rb
CHANGED
@@ -22,7 +22,8 @@
|
|
22
22
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
23
23
|
# POSSIBILITY OF SUCH DAMAGE.
|
24
24
|
|
25
|
-
require '
|
25
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'ext',
|
26
|
+
'wikitext'))
|
26
27
|
|
27
28
|
module Wikitext
|
28
29
|
class Parser
|
data/lib/wikitext/rails.rb
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
22
|
# POSSIBILITY OF SUCH DAMAGE.
|
23
23
|
|
24
|
-
require '
|
24
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'string'))
|
25
25
|
|
26
26
|
module Wikitext
|
27
27
|
class TemplateHandler
|
data/lib/wikitext/string.rb
CHANGED
@@ -21,11 +21,13 @@
|
|
21
21
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
22
22
|
# POSSIBILITY OF SUCH DAMAGE.
|
23
23
|
|
24
|
-
require '
|
24
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'parser'))
|
25
25
|
|
26
26
|
class String
|
27
27
|
def to_wikitext options = {}
|
28
|
-
|
28
|
+
default_options = { :indent => false }
|
29
|
+
Wikitext::Parser.shared_parser.parse wikitext_preprocess,
|
30
|
+
default_options.merge(options)
|
29
31
|
end
|
30
32
|
alias :w :to_wikitext
|
31
33
|
|
data/lib/wikitext/version.rb
CHANGED
data/rails/init.rb
CHANGED
@@ -24,7 +24,8 @@
|
|
24
24
|
# Avoid Rails bug #2266 by not requiring during "rake gems:build"
|
25
25
|
# See: https://rails.lighthouseapp.com/projects/8994/tickets/2266
|
26
26
|
unless $gems_build_rake_task
|
27
|
-
|
28
|
-
require '
|
29
|
-
require '
|
27
|
+
libdir = File.join(File.dirname(__FILE__), '..', 'lib', 'wikitext')
|
28
|
+
require File.expand_path(File.join(libdir, 'nil_class'))
|
29
|
+
require File.expand_path(File.join(libdir, 'string'))
|
30
|
+
require File.expand_path(File.join(libdir, 'rails'))
|
30
31
|
end
|
data/spec/img_spec.rb
CHANGED
@@ -43,6 +43,15 @@ describe Wikitext::Parser, 'embedding img tags' do
|
|
43
43
|
@parser.parse('{{foo/bar.png}}').should == %Q{<p><img src="/images/foo/bar.png" alt="foo/bar.png" /></p>\n}
|
44
44
|
end
|
45
45
|
|
46
|
+
it 'should pass through empty image tags unchanged' do
|
47
|
+
@parser.parse('{{}}').should == %Q{<p>{{}}</p>\n}
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should not append prefix if img src starts with a slash' do
|
51
|
+
@parser.parse('{{/foo.png}}').should ==
|
52
|
+
%Q{<p><img src="/foo.png" alt="/foo.png" /></p>\n}
|
53
|
+
end
|
54
|
+
|
46
55
|
it 'should work in BLOCKQUOTE blocks' do
|
47
56
|
expected = dedent <<-END
|
48
57
|
<blockquote>
|
data/spec/indentation_spec.rb
CHANGED
@@ -31,6 +31,10 @@ def indent spaces, string
|
|
31
31
|
string.gsub /^/, ' ' * spaces
|
32
32
|
end
|
33
33
|
|
34
|
+
def nodent string
|
35
|
+
string.gsub /^ */, ''
|
36
|
+
end
|
37
|
+
|
34
38
|
describe Wikitext::Parser, 'indentation' do
|
35
39
|
before do
|
36
40
|
@parser = Wikitext::Parser.new
|
@@ -43,34 +47,38 @@ describe Wikitext::Parser, 'indentation' do
|
|
43
47
|
end
|
44
48
|
|
45
49
|
it 'should default to no additional indentation' do
|
46
|
-
@parser.parse(
|
50
|
+
@parser.parse(@input).should == @default_output
|
47
51
|
end
|
48
52
|
|
49
53
|
it 'should add additional indentation as indicated by the "indent" option' do
|
50
|
-
@parser.parse(
|
51
|
-
@parser.parse(
|
52
|
-
@parser.parse(
|
53
|
-
@parser.parse(
|
54
|
-
@parser.parse(
|
55
|
-
@parser.parse(
|
54
|
+
@parser.parse(@input, :indent => 1).should == indent(1, @default_output)
|
55
|
+
@parser.parse(@input, :indent => 2).should == indent(2, @default_output)
|
56
|
+
@parser.parse(@input, :indent => 3).should == indent(3, @default_output)
|
57
|
+
@parser.parse(@input, :indent => 4).should == indent(4, @default_output)
|
58
|
+
@parser.parse(@input, :indent => 5).should == indent(5, @default_output)
|
59
|
+
@parser.parse(@input, :indent => 6).should == indent(6, @default_output)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should perform no indentation when "indent" is "false"' do
|
63
|
+
@parser.parse(@input, :indent => false).should == nodent(@default_output)
|
56
64
|
end
|
57
65
|
|
58
66
|
it 'should complain if the "indent" option is nil' do
|
59
|
-
lambda { @parser.parse(
|
67
|
+
lambda { @parser.parse(@input, :indent => nil) }.should raise_error(TypeError)
|
60
68
|
end
|
61
69
|
|
62
70
|
it 'should complain if the "indent" options is not an integer' do
|
63
|
-
lambda { @parser.parse(
|
64
|
-
lambda { @parser.parse(
|
71
|
+
lambda { @parser.parse(@input, :indent => 'bar') }.should raise_error(TypeError)
|
72
|
+
lambda { @parser.parse(@input, :indent => /baz/) }.should raise_error(TypeError)
|
65
73
|
end
|
66
74
|
|
67
75
|
it 'should treat a negative "indent" as though it were zero' do
|
68
|
-
@parser.parse(
|
76
|
+
@parser.parse(@input, :indent => -4).should == @default_output
|
69
77
|
end
|
70
78
|
|
71
79
|
it 'should coerce a float "indent" into an integer' do
|
72
|
-
@parser.parse(
|
73
|
-
@parser.parse(
|
80
|
+
@parser.parse(@input, :indent => 0.0).should == @default_output
|
81
|
+
@parser.parse(@input, :indent => 2.0).should == <<-END
|
74
82
|
<ul>
|
75
83
|
<li>foo</li>
|
76
84
|
</ul>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wikitext
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: "1.6"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wincent Colaiuta
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-05-07 00:00:00 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|