erbal 1.0.rc3 → 1.0.rc4
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/erbal/parser.c +26 -16
- data/ext/erbal/parser.h +1 -0
- data/ext/erbal/parser.rl +6 -0
- data/spec/erbal_spec.rb +4 -0
- data/tasks/gem.rake +1 -1
- metadata +3 -3
data/ext/erbal/parser.c
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#include "parser.h"
|
5
5
|
|
6
6
|
|
7
|
-
#line
|
7
|
+
#line 16 "parser.rl"
|
8
8
|
|
9
9
|
|
10
10
|
|
@@ -16,7 +16,7 @@ static const int erbal_parser_error = -1;
|
|
16
16
|
static const int erbal_parser_en_main = 1;
|
17
17
|
|
18
18
|
|
19
|
-
#line
|
19
|
+
#line 19 "parser.rl"
|
20
20
|
|
21
21
|
static char *ts, *te, *p, *pe, *eof;
|
22
22
|
static int act, cs;
|
@@ -37,6 +37,11 @@ inline void erbal_parser_tag_open(erbal_parser *parser) {
|
|
37
37
|
parser->state = TAG_OPEN;
|
38
38
|
}
|
39
39
|
|
40
|
+
inline void erbal_parser_tag_open_with_dash(erbal_parser *parser) {
|
41
|
+
erbal_parser_tag_open_common(parser, -2);
|
42
|
+
parser->state = TAG_OPEN;
|
43
|
+
}
|
44
|
+
|
40
45
|
inline void erbal_parser_tag_open_for_output(erbal_parser *parser) {
|
41
46
|
erbal_parser_tag_open_common(parser, -2);
|
42
47
|
parser->state = TAG_OPEN_FOR_OUTPUT;
|
@@ -171,7 +176,7 @@ void erbal_parser_init(erbal_parser *parser) {
|
|
171
176
|
parser->src = rb_str_dup(parser->buffer_name);
|
172
177
|
rb_str_buf_cat(parser->src, " = '';", 6);
|
173
178
|
|
174
|
-
#line
|
179
|
+
#line 180 "parser.c"
|
175
180
|
{
|
176
181
|
cs = erbal_parser_start;
|
177
182
|
ts = 0;
|
@@ -179,37 +184,37 @@ void erbal_parser_init(erbal_parser *parser) {
|
|
179
184
|
act = 0;
|
180
185
|
}
|
181
186
|
|
182
|
-
#line
|
187
|
+
#line 178 "parser.rl"
|
183
188
|
}
|
184
189
|
|
185
190
|
void erbal_parser_exec(erbal_parser *parser) {
|
186
191
|
p = RSTRING(parser->str)->ptr;
|
187
192
|
pe = p + strlen(p);
|
188
193
|
|
189
|
-
#line
|
194
|
+
#line 195 "parser.c"
|
190
195
|
{
|
191
196
|
if ( p == pe )
|
192
197
|
goto _test_eof;
|
193
198
|
switch ( cs )
|
194
199
|
{
|
195
200
|
tr0:
|
196
|
-
#line
|
201
|
+
#line 14 "parser.rl"
|
197
202
|
{{p = ((te))-1;}{ erbal_parser_non_tag(parser); }}
|
198
203
|
goto st1;
|
199
204
|
tr1:
|
200
|
-
#line
|
205
|
+
#line 12 "parser.rl"
|
201
206
|
{te = p+1;{ erbal_parser_tag_close_with_trim(parser); }}
|
202
207
|
goto st1;
|
203
208
|
tr2:
|
204
|
-
#line
|
209
|
+
#line 14 "parser.rl"
|
205
210
|
{te = p+1;{ erbal_parser_non_tag(parser); }}
|
206
211
|
goto st1;
|
207
212
|
tr6:
|
208
|
-
#line
|
213
|
+
#line 14 "parser.rl"
|
209
214
|
{te = p;p--;{ erbal_parser_non_tag(parser); }}
|
210
215
|
goto st1;
|
211
216
|
tr7:
|
212
|
-
#line
|
217
|
+
#line 13 "parser.rl"
|
213
218
|
{te = p+1;{ erbal_parser_tag_close(parser); }}
|
214
219
|
goto st1;
|
215
220
|
tr10:
|
@@ -217,11 +222,15 @@ tr10:
|
|
217
222
|
{te = p;p--;{ erbal_parser_tag_open(parser); }}
|
218
223
|
goto st1;
|
219
224
|
tr11:
|
220
|
-
#line
|
225
|
+
#line 10 "parser.rl"
|
221
226
|
{te = p+1;{ erbal_parser_tag_open_for_comment(parser); }}
|
222
227
|
goto st1;
|
223
228
|
tr12:
|
224
|
-
#line
|
229
|
+
#line 9 "parser.rl"
|
230
|
+
{te = p+1;{ erbal_parser_tag_open_with_dash(parser); }}
|
231
|
+
goto st1;
|
232
|
+
tr13:
|
233
|
+
#line 11 "parser.rl"
|
225
234
|
{te = p+1;{ erbal_parser_tag_open_for_output(parser); }}
|
226
235
|
goto st1;
|
227
236
|
st1:
|
@@ -232,7 +241,7 @@ st1:
|
|
232
241
|
case 1:
|
233
242
|
#line 1 "NONE"
|
234
243
|
{ts = p;}
|
235
|
-
#line
|
244
|
+
#line 245 "parser.c"
|
236
245
|
switch( (*p) ) {
|
237
246
|
case 37: goto st2;
|
238
247
|
case 45: goto tr4;
|
@@ -254,7 +263,7 @@ st3:
|
|
254
263
|
if ( ++p == pe )
|
255
264
|
goto _test_eof3;
|
256
265
|
case 3:
|
257
|
-
#line
|
266
|
+
#line 267 "parser.c"
|
258
267
|
if ( (*p) == 37 )
|
259
268
|
goto st0;
|
260
269
|
goto tr6;
|
@@ -278,7 +287,8 @@ st5:
|
|
278
287
|
case 5:
|
279
288
|
switch( (*p) ) {
|
280
289
|
case 35: goto tr11;
|
281
|
-
case
|
290
|
+
case 45: goto tr12;
|
291
|
+
case 61: goto tr13;
|
282
292
|
}
|
283
293
|
goto tr10;
|
284
294
|
}
|
@@ -303,6 +313,6 @@ case 5:
|
|
303
313
|
|
304
314
|
}
|
305
315
|
|
306
|
-
#line
|
316
|
+
#line 184 "parser.rl"
|
307
317
|
erbal_parser_finish(parser);
|
308
318
|
}
|
data/ext/erbal/parser.h
CHANGED
@@ -9,6 +9,7 @@ typedef struct erbal_parser {
|
|
9
9
|
} erbal_parser;
|
10
10
|
|
11
11
|
inline void erbal_parser_tag_open(erbal_parser*);
|
12
|
+
inline void erbal_parser_tag_open_with_dash(erbal_parser*);
|
12
13
|
inline void erbal_parser_tag_open_for_comment(erbal_parser*);
|
13
14
|
inline void erbal_parser_tag_open_for_output(erbal_parser*);
|
14
15
|
inline void erbal_parser_non_tag(erbal_parser*);
|
data/ext/erbal/parser.rl
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
|
7
7
|
main := |*
|
8
8
|
'<%' => { erbal_parser_tag_open(parser); };
|
9
|
+
'<%-' => { erbal_parser_tag_open_with_dash(parser); };
|
9
10
|
'<%#' => { erbal_parser_tag_open_for_comment(parser); };
|
10
11
|
'<%=' => { erbal_parser_tag_open_for_output(parser); };
|
11
12
|
'-%>' => { erbal_parser_tag_close_with_trim(parser); };
|
@@ -35,6 +36,11 @@ inline void erbal_parser_tag_open(erbal_parser *parser) {
|
|
35
36
|
parser->state = TAG_OPEN;
|
36
37
|
}
|
37
38
|
|
39
|
+
inline void erbal_parser_tag_open_with_dash(erbal_parser *parser) {
|
40
|
+
erbal_parser_tag_open_common(parser, -2);
|
41
|
+
parser->state = TAG_OPEN;
|
42
|
+
}
|
43
|
+
|
38
44
|
inline void erbal_parser_tag_open_for_output(erbal_parser *parser) {
|
39
45
|
erbal_parser_tag_open_common(parser, -2);
|
40
46
|
parser->state = TAG_OPEN_FOR_OUTPUT;
|
data/spec/erbal_spec.rb
CHANGED
@@ -27,6 +27,10 @@ describe Erbal do
|
|
27
27
|
erbal_parse("<% 1 + 1 %>").should == "@out = ''; 1 + 1 ;\n@out"
|
28
28
|
end
|
29
29
|
|
30
|
+
it "should parse the <%- tag" do
|
31
|
+
erbal_parse("1 + 1 is <%- 1 + 1 %>").should == "@out = '';@out << %Q`1 + 1 is `; 1 + 1 ;\n@out"
|
32
|
+
end
|
33
|
+
|
30
34
|
it "should add a line break after <% %> tags incase the tags ended with a comment" do
|
31
35
|
erbal_parse("<% 1 + 1 # eeek comment! %> hi mom").should == "@out = ''; 1 + 1 # eeek comment! ;\n@out << %Q` hi mom`;@out"
|
32
36
|
end
|
data/tasks/gem.rake
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erbal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 977940501
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.
|
9
|
+
- rc4
|
10
|
+
version: 1.0.rc4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ian Leitch
|