wikitext 0.2 → 0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/ary.h +1 -1
- data/ext/parser.c +40 -17
- data/ext/parser.h +2 -2
- data/ext/str.h +1 -1
- data/ext/token.h +1 -1
- data/ext/wikitext.c +1 -1
- data/ext/wikitext.h +1 -1
- data/spec/wikitext_spec.rb +54 -0
- metadata +2 -2
data/ext/ary.h
CHANGED
data/ext/parser.c
CHANGED
@@ -192,20 +192,15 @@ inline void _Wikitext_indent(parser_t *parser)
|
|
192
192
|
{
|
193
193
|
char *old_end, *new_end;
|
194
194
|
if (!parser->tabulation)
|
195
|
-
{
|
196
195
|
parser->tabulation = str_new_size(space_count);
|
197
|
-
old_end = parser->tabulation->ptr;
|
198
|
-
}
|
199
196
|
else if (parser->tabulation->len < space_count)
|
200
|
-
|
201
|
-
|
202
|
-
str_grow(parser->tabulation, space_count);
|
203
|
-
}
|
204
|
-
else
|
205
|
-
old_end = parser->tabulation->ptr;
|
197
|
+
str_grow(parser->tabulation, space_count); // reallocates if necessary
|
198
|
+
old_end = parser->tabulation->ptr + parser->tabulation->len;
|
206
199
|
new_end = parser->tabulation->ptr + space_count;
|
207
200
|
while (old_end < new_end)
|
208
201
|
*old_end++ = ' ';
|
202
|
+
if (space_count > parser->tabulation->len)
|
203
|
+
parser->tabulation->len = space_count;
|
209
204
|
rb_str_cat(parser->output, parser->tabulation->ptr, space_count);
|
210
205
|
}
|
211
206
|
parser->current_indent += 2;
|
@@ -823,16 +818,44 @@ inline void _Wikitext_rollback_failed_external_link(parser_t *parser)
|
|
823
818
|
parser->link_text = Qnil;
|
824
819
|
}
|
825
820
|
|
826
|
-
VALUE Wikitext_parser_initialize(VALUE self)
|
821
|
+
VALUE Wikitext_parser_initialize(int argc, VALUE *argv, VALUE self)
|
827
822
|
{
|
823
|
+
// process arguments
|
824
|
+
VALUE options;
|
825
|
+
if (rb_scan_args(argc, argv, "01", &options) == 0) // 0 mandatory arguments, 1 optional argument
|
826
|
+
options = Qnil;
|
827
|
+
|
828
|
+
// defaults
|
829
|
+
VALUE autolink = Qtrue;
|
830
|
+
VALUE line_ending = rb_str_new2("\n");
|
831
|
+
VALUE external_link_class = rb_str_new2("external");
|
832
|
+
VALUE mailto_class = rb_str_new2("mailto");
|
833
|
+
VALUE internal_link_prefix = rb_str_new2("/wiki/");
|
834
|
+
VALUE space_to_underscore = Qfalse;
|
835
|
+
VALUE treat_slash_as_special = Qtrue;
|
836
|
+
|
837
|
+
// process options hash (override defaults)
|
838
|
+
if (!NIL_P(options) && TYPE(options) == T_HASH)
|
839
|
+
{
|
840
|
+
#define OVERRIDE_IF_SET(name) \
|
841
|
+
NIL_P(rb_hash_aref(options, ID2SYM(rb_intern(#name)))) ? name : rb_hash_aref(options, ID2SYM(rb_intern(#name)))
|
842
|
+
autolink = OVERRIDE_IF_SET(autolink);
|
843
|
+
line_ending = OVERRIDE_IF_SET(line_ending);
|
844
|
+
external_link_class = OVERRIDE_IF_SET(external_link_class);
|
845
|
+
mailto_class = OVERRIDE_IF_SET(mailto_class);
|
846
|
+
internal_link_prefix = OVERRIDE_IF_SET(internal_link_prefix);
|
847
|
+
space_to_underscore = OVERRIDE_IF_SET(space_to_underscore);
|
848
|
+
treat_slash_as_special = OVERRIDE_IF_SET(treat_slash_as_special);
|
849
|
+
}
|
850
|
+
|
828
851
|
// no need to call super here; rb_call_super()
|
829
|
-
rb_iv_set(self, "@autolink",
|
830
|
-
rb_iv_set(self, "@line_ending",
|
831
|
-
rb_iv_set(self, "@external_link_class",
|
832
|
-
rb_iv_set(self, "@mailto_class",
|
833
|
-
rb_iv_set(self, "@internal_link_prefix",
|
834
|
-
rb_iv_set(self, "@space_to_underscore",
|
835
|
-
rb_iv_set(self, "@treat_slash_as_special",
|
852
|
+
rb_iv_set(self, "@autolink", autolink);
|
853
|
+
rb_iv_set(self, "@line_ending", line_ending);
|
854
|
+
rb_iv_set(self, "@external_link_class", external_link_class);
|
855
|
+
rb_iv_set(self, "@mailto_class", mailto_class);
|
856
|
+
rb_iv_set(self, "@internal_link_prefix", internal_link_prefix);
|
857
|
+
rb_iv_set(self, "@space_to_underscore", space_to_underscore);
|
858
|
+
rb_iv_set(self, "@treat_slash_as_special", treat_slash_as_special);
|
836
859
|
return self;
|
837
860
|
}
|
838
861
|
|
data/ext/parser.h
CHANGED
@@ -12,9 +12,9 @@
|
|
12
12
|
// You should have received a copy of the GNU General Public License
|
13
13
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
14
14
|
|
15
|
-
#include <ruby
|
15
|
+
#include <ruby.h>
|
16
16
|
|
17
|
-
VALUE Wikitext_parser_initialize(VALUE self);
|
17
|
+
VALUE Wikitext_parser_initialize(int argc, VALUE *argv, VALUE self);
|
18
18
|
|
19
19
|
VALUE Wikitext_parser_tokenize(VALUE self, VALUE string);
|
20
20
|
|
data/ext/str.h
CHANGED
data/ext/token.h
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
// You should have received a copy of the GNU General Public License
|
13
13
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
14
14
|
|
15
|
-
#include <ruby
|
15
|
+
#include <ruby.h>
|
16
16
|
#include <stdint.h> /* uint32_t */
|
17
17
|
|
18
18
|
#define TOKEN_TEXT(token) rb_str_new((const char *)token->start, (token->stop - token->start))
|
data/ext/wikitext.c
CHANGED
@@ -27,7 +27,7 @@ void Init_wikitext()
|
|
27
27
|
|
28
28
|
// Wikitext::Parser
|
29
29
|
cWikitextParser = rb_define_class_under(mWikitext, "Parser", rb_cObject);
|
30
|
-
rb_define_method(cWikitextParser, "initialize", Wikitext_parser_initialize,
|
30
|
+
rb_define_method(cWikitextParser, "initialize", Wikitext_parser_initialize, -1);
|
31
31
|
rb_define_method(cWikitextParser, "parse", Wikitext_parser_parse, -1);
|
32
32
|
rb_define_method(cWikitextParser, "profiling_parse", Wikitext_parser_profiling_parse, 1);
|
33
33
|
rb_define_method(cWikitextParser, "tokenize", Wikitext_parser_tokenize, 1);
|
data/ext/wikitext.h
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
// You should have received a copy of the GNU General Public License
|
13
13
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
14
14
|
|
15
|
-
#include <ruby
|
15
|
+
#include <ruby.h>
|
16
16
|
#include <stdint.h>
|
17
17
|
|
18
18
|
#define ruby_inspect(obj) rb_funcall(rb_mKernel, rb_intern("p"), 1, obj)
|
data/spec/wikitext_spec.rb
CHANGED
@@ -21,9 +21,63 @@ describe Wikitext::Parser do
|
|
21
21
|
@parser = Wikitext::Parser.new
|
22
22
|
end
|
23
23
|
|
24
|
+
it 'should autolink by default' do
|
25
|
+
@parser.autolink.should == true
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should use linefeed as default line ending' do
|
29
|
+
@parser.line_ending.should == "\n"
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should use "external" as default external link class' do
|
33
|
+
@parser.external_link_class.should == 'external'
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should use "mailto" as default mailto class' do
|
37
|
+
@parser.mailto_class.should == 'mailto'
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should use "/wiki/" as default internal link prefix' do
|
41
|
+
@parser.internal_link_prefix.should == '/wiki/'
|
42
|
+
end
|
43
|
+
|
24
44
|
it 'should turn space-to-underscore off by default' do
|
25
45
|
@parser.space_to_underscore.should == false
|
26
46
|
end
|
47
|
+
|
48
|
+
it 'should treat slash as special by default' do
|
49
|
+
@parser.treat_slash_as_special.should == true
|
50
|
+
end
|
51
|
+
|
52
|
+
describe 'overriding defaults at initialization time' do
|
53
|
+
it 'should allow overriding of autolink' do
|
54
|
+
Wikitext::Parser.new(:autolink => false).autolink.should == false
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should allow overriding of line ending' do
|
58
|
+
Wikitext::Parser.new(:line_ending => "\r").line_ending.should == "\r"
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should allow overriding of external link class' do
|
62
|
+
Wikitext::Parser.new(:external_link_class => 'foo').external_link_class.should == 'foo'
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'should allow overriding of mailto class' do
|
66
|
+
Wikitext::Parser.new(:mailto_class => 'bar').mailto_class.should == 'bar'
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should allow overriding of internal link prefix' do
|
70
|
+
Wikitext::Parser.new(:internal_link_prefix => '/baz/').internal_link_prefix.should == '/baz/'
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should allow overriding of space-to-underscore' do
|
74
|
+
Wikitext::Parser.new(:space_to_underscore => true).space_to_underscore.should == true
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should allow overriding of treat slash as special' do
|
78
|
+
Wikitext::Parser.new(:treat_slash_as_special => false).treat_slash_as_special.should == false
|
79
|
+
end
|
80
|
+
end
|
27
81
|
end
|
28
82
|
|
29
83
|
describe Wikitext::Parser, 'parsing non-ASCII input' do
|
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: "0.
|
4
|
+
version: "0.3"
|
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: 2008-02-
|
12
|
+
date: 2008-02-19 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|