mongrel_esi 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +8 -8
- data/Rakefile +4 -12
- data/doc/rdoc/classes/ESI.html +169 -0
- data/doc/rdoc/classes/ESI/Cache.html +178 -0
- data/doc/rdoc/classes/ESI/Cache.src/M000060.html +17 -0
- data/doc/rdoc/classes/ESI/Cache.src/M000061.html +20 -0
- data/doc/rdoc/classes/ESI/Config.html +291 -0
- data/doc/rdoc/classes/ESI/Config.src/M000043.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000044.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000045.html +35 -0
- data/doc/rdoc/classes/ESI/Config.src/M000046.html +38 -0
- data/doc/rdoc/classes/ESI/Config.src/M000047.html +23 -0
- data/doc/rdoc/classes/ESI/Config.src/M000048.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000049.html +20 -0
- data/doc/rdoc/classes/ESI/Config.src/M000050.html +18 -0
- data/doc/rdoc/classes/ESI/Config.src/M000051.html +24 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.html +212 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html +19 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html +19 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html +18 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html +18 -0
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html +18 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.html +187 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html +19 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html +21 -0
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html +21 -0
- data/doc/rdoc/classes/ESI/Dispatcher.html +172 -0
- data/doc/rdoc/classes/ESI/Dispatcher.src/M000062.html +23 -0
- data/doc/rdoc/classes/ESI/Dispatcher.src/M000063.html +20 -0
- data/doc/rdoc/classes/ESI/Fragment.html +218 -0
- data/doc/rdoc/classes/ESI/Fragment.src/M000076.html +21 -0
- data/doc/rdoc/classes/ESI/Fragment.src/M000077.html +18 -0
- data/doc/rdoc/classes/ESI/Fragment.src/M000078.html +18 -0
- data/doc/rdoc/classes/ESI/Handler.html +236 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000079.html +19 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000080.html +161 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000081.html +24 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000082.html +18 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000083.html +26 -0
- data/doc/rdoc/classes/ESI/Handler.src/M000084.html +30 -0
- data/doc/rdoc/classes/ESI/Invalidator.html +131 -0
- data/doc/rdoc/classes/ESI/Invalidator.src/M000004.html +41 -0
- data/doc/rdoc/classes/ESI/Log.html +251 -0
- data/doc/rdoc/classes/ESI/Log.src/M000005.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000006.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000007.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000008.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000009.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000010.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000011.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000012.html +18 -0
- data/doc/rdoc/classes/ESI/Log.src/M000013.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.html +314 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html +24 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html +22 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html +19 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html +23 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html +19 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html +18 -0
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html +17 -0
- data/doc/rdoc/classes/ESI/Router.html +229 -0
- data/doc/rdoc/classes/ESI/Router.src/M000073.html +36 -0
- data/doc/rdoc/classes/ESI/Router.src/M000074.html +25 -0
- data/doc/rdoc/classes/ESI/Router.src/M000075.html +24 -0
- data/doc/rdoc/classes/ESI/RubyCache.html +278 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000064.html +20 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000065.html +22 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000066.html +21 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000067.html +22 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000068.html +18 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000069.html +22 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000070.html +18 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000071.html +18 -0
- data/doc/rdoc/classes/ESI/RubyCache.src/M000072.html +18 -0
- data/doc/rdoc/classes/ESI/Tag.html +137 -0
- data/doc/rdoc/classes/ESI/Tag/Attempt.html +113 -0
- data/doc/rdoc/classes/ESI/Tag/Base.html +267 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000028.html +26 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000029.html +23 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000030.html +22 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000031.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000032.html +22 -0
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000033.html +23 -0
- data/doc/rdoc/classes/ESI/Tag/Except.html +184 -0
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000020.html +21 -0
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000021.html +20 -0
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000022.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/Include.html +189 -0
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000017.html +20 -0
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000018.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000019.html +125 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.html +199 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html +18 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html +42 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html +155 -0
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html +19 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.html +171 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html +19 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html +51 -0
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html +19 -0
- data/doc/rdoc/classes/ESI/Tag/Try.html +161 -0
- data/doc/rdoc/classes/ESI/Tag/Try.src/M000023.html +40 -0
- data/doc/rdoc/classes/ESI/Tag/Try.src/M000024.html +18 -0
- data/doc/rdoc/classes/MultiDirHandler.html +198 -0
- data/doc/rdoc/classes/MultiDirHandler.src/M000001.html +20 -0
- data/doc/rdoc/classes/MultiDirHandler.src/M000002.html +28 -0
- data/doc/rdoc/classes/MultiDirHandler.src/M000003.html +22 -0
- data/doc/rdoc/classes/Net.html +119 -0
- data/doc/rdoc/classes/Net/An.html +114 -0
- data/doc/rdoc/classes/Net/An/HTTP.html +137 -0
- data/doc/rdoc/classes/Net/An/HTTP.src/M000087.html +17 -0
- data/doc/rdoc/classes/Net/An/IORequest.html +139 -0
- data/doc/rdoc/classes/Net/An/IORequest.src/M000088.html +17 -0
- data/doc/rdoc/classes/Net/An/IOResponse.html +139 -0
- data/doc/rdoc/classes/Net/An/IOResponse.src/M000085.html +17 -0
- data/doc/rdoc/classes/Net/An/IOSocket.html +137 -0
- data/doc/rdoc/classes/Net/An/IOSocket.src/M000086.html +17 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/COPYING.html +168 -0
- data/doc/rdoc/files/LICENSE.html +605 -0
- data/doc/rdoc/files/README.html +361 -0
- data/doc/rdoc/files/lib/esi/cache_rb.html +113 -0
- data/doc/rdoc/files/lib/esi/config_rb.html +108 -0
- data/doc/rdoc/files/lib/esi/dispatcher_rb.html +109 -0
- data/doc/rdoc/files/lib/esi/handler_rb.html +121 -0
- data/doc/rdoc/files/lib/esi/invalidator_rb.html +117 -0
- data/doc/rdoc/files/lib/esi/logger_rb.html +108 -0
- data/doc/rdoc/files/lib/esi/router_rb.html +101 -0
- data/doc/rdoc/files/lib/esi/tag/attempt_rb.html +101 -0
- data/doc/rdoc/files/lib/esi/tag/base_rb.html +108 -0
- data/doc/rdoc/files/lib/esi/tag/except_rb.html +101 -0
- data/doc/rdoc/files/lib/esi/tag/include_rb.html +109 -0
- data/doc/rdoc/files/lib/esi/tag/invalidate_rb.html +109 -0
- data/doc/rdoc/files/lib/esi/tag/try_rb.html +108 -0
- data/doc/rdoc/files/lib/multi_dirhandler_rb.html +109 -0
- data/doc/rdoc/files/lib/net/ahttp_rb.html +109 -0
- data/doc/rdoc/fr_class_index.html +55 -0
- data/doc/rdoc/fr_file_index.html +44 -0
- data/doc/rdoc/fr_method_index.html +114 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/ext/esi/esi_parser.c +36 -156
- data/ext/esi/test/parser.c +42 -43
- data/ext/esi/test1.rb +2 -2
- data/lib/esi/cache.rb +83 -72
- data/lib/esi/handler.rb +5 -20
- data/lib/multi_dirhandler.rb +13 -0
- data/lib/net/ahttp.rb +36 -0
- data/test/integration/handler_test.rb +1 -1
- metadata +222 -45
- data/test/unit/sample.html +0 -21
data/ext/esi/esi_parser.c
CHANGED
@@ -20,27 +20,13 @@
|
|
20
20
|
#define RSTRING_LEN(str) RSTRING(str)->len
|
21
21
|
#endif
|
22
22
|
|
23
|
-
#define OUTPUT_BUFFER_SIZE 1024
|
24
|
-
|
25
23
|
static VALUE rb_ESI;
|
26
24
|
static VALUE rb_ESIParser;
|
27
25
|
|
28
|
-
// TODO: we can use rb_iv_set instead and just pass the whole parser as the user_data to each call back
|
29
|
-
typedef struct _ParserUserData{
|
30
|
-
VALUE output_block;
|
31
|
-
VALUE start_tag_block;
|
32
|
-
VALUE end_tag_block;
|
33
|
-
VALUE depth;
|
34
|
-
VALUE esi_tag;
|
35
|
-
char buffer[OUTPUT_BUFFER_SIZE]; /* buffer bytes before sending them to ruby */
|
36
|
-
size_t buffered; /* amount buffered */
|
37
|
-
}ParserUserData;
|
38
|
-
|
39
26
|
static
|
40
27
|
VALUE ESIParser_set_output_cb( VALUE self )
|
41
28
|
{
|
42
29
|
ESIParser *parser;
|
43
|
-
ParserUserData *user_data;
|
44
30
|
|
45
31
|
if( !rb_block_given_p() ){
|
46
32
|
rb_raise(rb_eArgError, "Block expected. Call this method with a closure. { ... }");
|
@@ -48,9 +34,7 @@ VALUE ESIParser_set_output_cb( VALUE self )
|
|
48
34
|
|
49
35
|
Data_Get_Struct( self, ESIParser, parser );
|
50
36
|
|
51
|
-
|
52
|
-
|
53
|
-
user_data->output_block = rb_block_proc();
|
37
|
+
rb_ivar_set( self, rb_intern("@output"), rb_block_proc() );
|
54
38
|
|
55
39
|
return Qnil;
|
56
40
|
}
|
@@ -59,7 +43,6 @@ static
|
|
59
43
|
VALUE ESIParser_set_start_tag_cb( VALUE self )
|
60
44
|
{
|
61
45
|
ESIParser *parser;
|
62
|
-
ParserUserData *user_data;
|
63
46
|
|
64
47
|
if( !rb_block_given_p() ){
|
65
48
|
rb_raise(rb_eArgError, "Block expected. Call this method with a closure. { ... }");
|
@@ -67,9 +50,7 @@ VALUE ESIParser_set_start_tag_cb( VALUE self )
|
|
67
50
|
|
68
51
|
Data_Get_Struct( self, ESIParser, parser );
|
69
52
|
|
70
|
-
|
71
|
-
|
72
|
-
user_data->start_tag_block = rb_block_proc();
|
53
|
+
rb_ivar_set( self, rb_intern("@start_tag_block"), rb_block_proc() );
|
73
54
|
|
74
55
|
return Qnil;
|
75
56
|
}
|
@@ -78,7 +59,6 @@ static
|
|
78
59
|
VALUE ESIParser_set_end_tag_cb( VALUE self )
|
79
60
|
{
|
80
61
|
ESIParser *parser;
|
81
|
-
ParserUserData *user_data;
|
82
62
|
|
83
63
|
if( !rb_block_given_p() ){
|
84
64
|
rb_raise(rb_eArgError, "Block expected. Call this method with a closure. { ... }");
|
@@ -86,9 +66,7 @@ VALUE ESIParser_set_end_tag_cb( VALUE self )
|
|
86
66
|
|
87
67
|
Data_Get_Struct( self, ESIParser, parser );
|
88
68
|
|
89
|
-
|
90
|
-
|
91
|
-
user_data->end_tag_block = rb_block_proc();
|
69
|
+
rb_ivar_set( self, rb_intern("@end_tag_block"), rb_block_proc() );
|
92
70
|
|
93
71
|
return Qnil;
|
94
72
|
}
|
@@ -96,32 +74,8 @@ VALUE ESIParser_set_end_tag_cb( VALUE self )
|
|
96
74
|
static
|
97
75
|
void ESIParser_free( ESIParser *parser )
|
98
76
|
{
|
99
|
-
ParserUserData *user_data = (ParserUserData*)parser->user_data;
|
100
|
-
|
101
|
-
free( user_data );
|
102
|
-
parser->user_data = NULL;
|
103
|
-
|
104
77
|
esi_parser_free( parser );
|
105
78
|
}
|
106
|
-
static
|
107
|
-
void ESIParser_mark( ESIParser *parser )
|
108
|
-
{
|
109
|
-
ParserUserData *user_data = (ParserUserData*)parser->user_data;
|
110
|
-
if( user_data ){
|
111
|
-
|
112
|
-
if( !NIL_P( user_data->output_block ) )
|
113
|
-
rb_gc_mark( user_data->output_block );
|
114
|
-
if( !NIL_P( user_data->start_tag_block ) )
|
115
|
-
rb_gc_mark( user_data->start_tag_block );
|
116
|
-
if( !NIL_P( user_data->end_tag_block ) )
|
117
|
-
rb_gc_mark( user_data->end_tag_block );
|
118
|
-
if( !NIL_P( user_data->depth ) )
|
119
|
-
rb_gc_mark( user_data->depth );
|
120
|
-
if( !NIL_P( user_data->esi_tag ) )
|
121
|
-
rb_gc_mark( user_data->esi_tag );
|
122
|
-
|
123
|
-
}
|
124
|
-
}
|
125
79
|
|
126
80
|
/* default callbacks */
|
127
81
|
static void
|
@@ -131,8 +85,9 @@ esi_parser_default_start_cb( const void *data,
|
|
131
85
|
ESIAttribute *attr,
|
132
86
|
void *user_data )
|
133
87
|
{
|
134
|
-
|
135
|
-
|
88
|
+
VALUE start_tag_block = rb_ivar_get( (VALUE)user_data, rb_intern("@start_tag_block") );
|
89
|
+
|
90
|
+
if( start_tag_block && !NIL_P(start_tag_block) && rb_respond_to( start_tag_block, rb_intern("call") ) ){
|
136
91
|
VALUE attr_hash = rb_hash_new();
|
137
92
|
VALUE tag_text = rb_str_new( name_start, name_length );
|
138
93
|
while( attr ){
|
@@ -141,7 +96,7 @@ esi_parser_default_start_cb( const void *data,
|
|
141
96
|
rb_hash_aset( attr_hash, name, value );
|
142
97
|
attr = attr->next;
|
143
98
|
}
|
144
|
-
rb_funcall(
|
99
|
+
rb_funcall( start_tag_block, rb_intern("call"), 2, tag_text, attr_hash );
|
145
100
|
}
|
146
101
|
}
|
147
102
|
|
@@ -151,10 +106,11 @@ esi_parser_default_end_cb( const void *data,
|
|
151
106
|
size_t name_length,
|
152
107
|
void *user_data )
|
153
108
|
{
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
109
|
+
VALUE end_tag_block = rb_ivar_get( (VALUE)user_data, rb_intern("@end_tag_block") );
|
110
|
+
|
111
|
+
if( end_tag_block && !NIL_P(end_tag_block) && rb_respond_to( end_tag_block, rb_intern("call") ) ){
|
112
|
+
VALUE tag_text = rb_str_new( name_start, name_length );
|
113
|
+
rb_funcall( end_tag_block, rb_intern("call"), 1, tag_text );
|
158
114
|
}
|
159
115
|
}
|
160
116
|
|
@@ -177,31 +133,14 @@ send_output( VALUE output, VALUE esi_tag_context, VALUE rbstr )
|
|
177
133
|
}
|
178
134
|
|
179
135
|
static void
|
180
|
-
esi_parser_default_output_cp( const void *data,
|
181
|
-
size_t length,
|
182
|
-
void *user_data )
|
136
|
+
esi_parser_default_output_cp( const void *data, size_t length, void *user_data )
|
183
137
|
{
|
184
|
-
VALUE
|
185
|
-
|
186
|
-
|
187
|
-
if(
|
188
|
-
rbstr = rb_str_new( data, length );
|
189
|
-
send_output(
|
190
|
-
/* buffer the output to the ruby script */
|
191
|
-
/*if( ud->buffered+length < OUTPUT_BUFFER_SIZE ){
|
192
|
-
memcpy( ud->buffer + ud->buffered, data, length );
|
193
|
-
ud->buffered += length;
|
194
|
-
}
|
195
|
-
else{
|
196
|
-
if( ud->buffered > 0 ){
|
197
|
-
rbstr = rb_str_new( ud->buffer, ud->buffered );
|
198
|
-
send_output( ud->output_block, ud->esi_tag, rbstr );
|
199
|
-
ud->buffered = 0;
|
200
|
-
}
|
201
|
-
rbstr = rb_str_new( data, length );
|
202
|
-
send_output( ud->output_block, ud->esi_tag, rbstr );
|
203
|
-
}*/
|
204
|
-
//rb_funcall( ud->output_block, rb_intern("call"), 1, rb_str_new( data, length ) );
|
138
|
+
VALUE output = rb_ivar_get( (VALUE)user_data, rb_intern("@output") );
|
139
|
+
VALUE esi_tag = rb_ivar_get( (VALUE)user_data, rb_intern("@esi_tag") );
|
140
|
+
|
141
|
+
if( output && !NIL_P(output) ){
|
142
|
+
VALUE rbstr = rb_str_new( data, length );
|
143
|
+
send_output( output, esi_tag, rbstr );
|
205
144
|
}
|
206
145
|
}
|
207
146
|
|
@@ -221,21 +160,11 @@ static
|
|
221
160
|
VALUE ESIParser_finish( VALUE self )
|
222
161
|
{
|
223
162
|
ESIParser *parser;
|
224
|
-
ParserUserData *user_data;
|
225
163
|
|
226
164
|
Data_Get_Struct( self, ESIParser, parser );
|
227
|
-
user_data = (ParserUserData*)parser->user_data;
|
228
165
|
|
229
166
|
esi_parser_finish( parser );
|
230
|
-
|
231
|
-
if( user_data->buffered > 0 ){
|
232
|
-
VALUE rbstr = rb_str_new( user_data->buffer, user_data->buffered );
|
233
|
-
send_output( user_data->output_block, user_data->esi_tag, rbstr );
|
234
|
-
memset( user_data->buffer, 0, OUTPUT_BUFFER_SIZE );
|
235
|
-
user_data->buffered = 0;
|
236
|
-
}
|
237
|
-
*/
|
238
|
-
|
167
|
+
|
239
168
|
return Qnil;
|
240
169
|
}
|
241
170
|
|
@@ -245,18 +174,6 @@ VALUE ESIParser_alloc(VALUE klass)
|
|
245
174
|
VALUE object;
|
246
175
|
ESIParser *parser = esi_parser_new();
|
247
176
|
|
248
|
-
ParserUserData *user_data = (ParserUserData*)malloc(sizeof(ParserUserData));
|
249
|
-
|
250
|
-
user_data->output_block = Qnil;
|
251
|
-
user_data->start_tag_block = Qnil;
|
252
|
-
user_data->end_tag_block = Qnil;
|
253
|
-
user_data->depth = rb_int_new(0);
|
254
|
-
user_data->esi_tag = Qnil;
|
255
|
-
memset( user_data->buffer, 0, OUTPUT_BUFFER_SIZE );
|
256
|
-
user_data->buffered = 0;
|
257
|
-
|
258
|
-
parser->user_data = user_data;
|
259
|
-
|
260
177
|
esi_parser_init( parser );
|
261
178
|
|
262
179
|
esi_parser_start_tag_handler( parser, esi_parser_default_start_cb );
|
@@ -265,7 +182,15 @@ VALUE ESIParser_alloc(VALUE klass)
|
|
265
182
|
|
266
183
|
esi_parser_output_handler( parser, esi_parser_default_output_cp );
|
267
184
|
|
268
|
-
object = Data_Wrap_Struct( klass,
|
185
|
+
object = Data_Wrap_Struct( klass, NULL, ESIParser_free, parser );
|
186
|
+
|
187
|
+
parser->user_data = (void*)object;
|
188
|
+
|
189
|
+
rb_ivar_set( object, rb_intern("@depth"), rb_int_new(0) );
|
190
|
+
rb_ivar_set( object, rb_intern("@output"), Qnil );
|
191
|
+
rb_ivar_set( object, rb_intern("@start_tag_block"), Qnil );
|
192
|
+
rb_ivar_set( object, rb_intern("@end_tag_block"), Qnil );
|
193
|
+
rb_ivar_set( object, rb_intern("@esi_tag"), Qnil );
|
269
194
|
|
270
195
|
return object;
|
271
196
|
}
|
@@ -273,85 +198,40 @@ VALUE ESIParser_alloc(VALUE klass)
|
|
273
198
|
static
|
274
199
|
VALUE ESIParser_set_esi_tag( VALUE self, VALUE esi_tag )
|
275
200
|
{
|
276
|
-
|
277
|
-
ParserUserData *user_data;
|
278
|
-
|
279
|
-
Data_Get_Struct( self, ESIParser, parser );
|
280
|
-
|
281
|
-
user_data = (ParserUserData*)parser->user_data;
|
282
|
-
|
283
|
-
user_data->esi_tag = esi_tag;
|
284
|
-
|
201
|
+
rb_ivar_set( self, rb_intern("@esi_tag"), esi_tag );
|
285
202
|
return esi_tag;
|
286
203
|
}
|
287
204
|
|
288
205
|
static
|
289
206
|
VALUE ESIParser_get_esi_tag( VALUE self )
|
290
207
|
{
|
291
|
-
|
292
|
-
ParserUserData *user_data;
|
293
|
-
|
294
|
-
Data_Get_Struct( self, ESIParser, parser );
|
295
|
-
|
296
|
-
user_data = (ParserUserData*)parser->user_data;
|
297
|
-
|
298
|
-
return user_data->esi_tag;
|
208
|
+
return rb_ivar_get( self, rb_intern("@esi_tag") );
|
299
209
|
}
|
300
210
|
|
301
211
|
static
|
302
212
|
VALUE ESIParser_set_depth( VALUE self, VALUE depth )
|
303
213
|
{
|
304
|
-
|
305
|
-
ParserUserData *user_data;
|
306
|
-
|
307
|
-
Data_Get_Struct( self, ESIParser, parser );
|
308
|
-
|
309
|
-
user_data = (ParserUserData*)parser->user_data;
|
310
|
-
|
311
|
-
user_data->depth = depth;
|
312
|
-
|
214
|
+
rb_ivar_set( self, rb_intern("@depth"), depth );
|
313
215
|
return depth;
|
314
216
|
}
|
315
217
|
|
316
218
|
static
|
317
219
|
VALUE ESIParser_get_depth( VALUE self )
|
318
220
|
{
|
319
|
-
|
320
|
-
ParserUserData *user_data;
|
321
|
-
|
322
|
-
Data_Get_Struct( self, ESIParser, parser );
|
323
|
-
|
324
|
-
user_data = (ParserUserData*)parser->user_data;
|
325
|
-
|
326
|
-
return user_data->depth;
|
221
|
+
return rb_ivar_get( self, rb_intern("@depth") );
|
327
222
|
}
|
328
223
|
|
329
224
|
static
|
330
225
|
VALUE ESIParser_set_output( VALUE self, VALUE output )
|
331
226
|
{
|
332
|
-
|
333
|
-
ParserUserData *user_data;
|
334
|
-
|
335
|
-
Data_Get_Struct( self, ESIParser, parser );
|
336
|
-
|
337
|
-
user_data = (ParserUserData*)parser->user_data;
|
338
|
-
|
339
|
-
user_data->output_block = output;
|
340
|
-
|
227
|
+
rb_ivar_set( self, rb_intern("@output"), output );
|
341
228
|
return output;
|
342
229
|
}
|
343
230
|
|
344
231
|
static
|
345
232
|
VALUE ESIParser_get_output( VALUE self )
|
346
233
|
{
|
347
|
-
|
348
|
-
ParserUserData *user_data;
|
349
|
-
|
350
|
-
Data_Get_Struct( self, ESIParser, parser );
|
351
|
-
|
352
|
-
user_data = (ParserUserData*)parser->user_data;
|
353
|
-
|
354
|
-
return user_data->output_block;
|
234
|
+
return rb_ivar_get( self, rb_intern("@output") );
|
355
235
|
}
|
356
236
|
static
|
357
237
|
VALUE ESIParser_send_output( VALUE self, VALUE output )
|
@@ -360,7 +240,7 @@ VALUE ESIParser_send_output( VALUE self, VALUE output )
|
|
360
240
|
|
361
241
|
Data_Get_Struct( self, ESIParser, parser );
|
362
242
|
|
363
|
-
esi_parser_default_output_cp( RSTRING_PTR(output), RSTRING_LEN(output),
|
243
|
+
esi_parser_default_output_cp( RSTRING_PTR(output), RSTRING_LEN(output), (void*)self );
|
364
244
|
|
365
245
|
return Qnil;
|
366
246
|
}
|
data/ext/esi/test/parser.c
CHANGED
@@ -3,7 +3,6 @@
|
|
3
3
|
#include <stdlib.h>
|
4
4
|
#include <string.h>
|
5
5
|
#include <ctype.h>
|
6
|
-
#include <unistd.h>
|
7
6
|
#include "parser.h"
|
8
7
|
|
9
8
|
/* define default callbacks */
|
@@ -81,18 +80,18 @@ static void ltrim_pointer( const char **ptr, const char *bounds, size_t *len )
|
|
81
80
|
}
|
82
81
|
}
|
83
82
|
|
84
|
-
#line
|
83
|
+
#line 198 "parser.rl"
|
85
84
|
|
86
85
|
|
87
86
|
|
88
|
-
#line
|
87
|
+
#line 88 "parser.c"
|
89
88
|
static const int esi_start = 56;
|
90
89
|
static const int esi_first_final = 56;
|
91
90
|
static const int esi_error = -1;
|
92
91
|
|
93
92
|
static const int esi_en_main = 56;
|
94
93
|
|
95
|
-
#line
|
94
|
+
#line 201 "parser.rl"
|
96
95
|
|
97
96
|
char *esi_strndup( const char *str, size_t len )
|
98
97
|
{
|
@@ -187,11 +186,11 @@ int esi_parser_init( ESIParser *parser )
|
|
187
186
|
{
|
188
187
|
int cs;
|
189
188
|
|
190
|
-
#line
|
189
|
+
#line 190 "parser.c"
|
191
190
|
{
|
192
191
|
cs = esi_start;
|
193
192
|
}
|
194
|
-
#line
|
193
|
+
#line 295 "parser.rl"
|
195
194
|
parser->prev_state = parser->cs = cs;
|
196
195
|
return 0;
|
197
196
|
}
|
@@ -248,7 +247,7 @@ int esi_parser_execute( ESIParser *parser, const char *data, size_t length )
|
|
248
247
|
// debug_string( "data", data, length );
|
249
248
|
|
250
249
|
|
251
|
-
#line
|
250
|
+
#line 251 "parser.c"
|
252
251
|
{
|
253
252
|
if ( p == pe )
|
254
253
|
goto _out;
|
@@ -1102,7 +1101,7 @@ case 55:
|
|
1102
1101
|
tr68: cs = 60; goto f8;
|
1103
1102
|
|
1104
1103
|
f0:
|
1105
|
-
#line
|
1104
|
+
#line 175 "parser.rl"
|
1106
1105
|
{
|
1107
1106
|
switch( cs ){
|
1108
1107
|
case 0:
|
@@ -1126,7 +1125,7 @@ f0:
|
|
1126
1125
|
}
|
1127
1126
|
goto _again;
|
1128
1127
|
f1:
|
1129
|
-
#line
|
1128
|
+
#line 175 "parser.rl"
|
1130
1129
|
{
|
1131
1130
|
switch( cs ){
|
1132
1131
|
case 0:
|
@@ -1148,14 +1147,14 @@ f1:
|
|
1148
1147
|
}
|
1149
1148
|
parser->prev_state = cs;
|
1150
1149
|
}
|
1151
|
-
#line
|
1150
|
+
#line 85 "parser.rl"
|
1152
1151
|
{
|
1153
1152
|
parser->mark = p;
|
1154
1153
|
//debug_string( "begin", p, 1 );
|
1155
1154
|
}
|
1156
1155
|
goto _again;
|
1157
1156
|
f9:
|
1158
|
-
#line
|
1157
|
+
#line 175 "parser.rl"
|
1159
1158
|
{
|
1160
1159
|
switch( cs ){
|
1161
1160
|
case 0:
|
@@ -1177,13 +1176,13 @@ f9:
|
|
1177
1176
|
}
|
1178
1177
|
parser->prev_state = cs;
|
1179
1178
|
}
|
1180
|
-
#line
|
1179
|
+
#line 89 "parser.rl"
|
1181
1180
|
{
|
1182
1181
|
// printf( "finish\n" );
|
1183
1182
|
}
|
1184
1183
|
goto _again;
|
1185
1184
|
f3:
|
1186
|
-
#line
|
1185
|
+
#line 175 "parser.rl"
|
1187
1186
|
{
|
1188
1187
|
switch( cs ){
|
1189
1188
|
case 0:
|
@@ -1205,7 +1204,7 @@ f3:
|
|
1205
1204
|
}
|
1206
1205
|
parser->prev_state = cs;
|
1207
1206
|
}
|
1208
|
-
#line
|
1207
|
+
#line 94 "parser.rl"
|
1209
1208
|
{
|
1210
1209
|
parser->tag_text = parser->mark+1;
|
1211
1210
|
parser->tag_text_length = p - (parser->mark+1);
|
@@ -1215,7 +1214,7 @@ f3:
|
|
1215
1214
|
}
|
1216
1215
|
goto _again;
|
1217
1216
|
f8:
|
1218
|
-
#line
|
1217
|
+
#line 175 "parser.rl"
|
1219
1218
|
{
|
1220
1219
|
switch( cs ){
|
1221
1220
|
case 0:
|
@@ -1237,7 +1236,7 @@ f8:
|
|
1237
1236
|
}
|
1238
1237
|
parser->prev_state = cs;
|
1239
1238
|
}
|
1240
|
-
#line
|
1239
|
+
#line 102 "parser.rl"
|
1241
1240
|
{
|
1242
1241
|
//debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
|
1243
1242
|
ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
|
@@ -1253,7 +1252,7 @@ f8:
|
|
1253
1252
|
}
|
1254
1253
|
goto _again;
|
1255
1254
|
f5:
|
1256
|
-
#line
|
1255
|
+
#line 175 "parser.rl"
|
1257
1256
|
{
|
1258
1257
|
switch( cs ){
|
1259
1258
|
case 0:
|
@@ -1275,7 +1274,7 @@ f5:
|
|
1275
1274
|
}
|
1276
1275
|
parser->prev_state = cs;
|
1277
1276
|
}
|
1278
|
-
#line
|
1277
|
+
#line 116 "parser.rl"
|
1279
1278
|
{
|
1280
1279
|
// debug_string( "parsed esi tag", parser->tag_text, parser->tag_text_length );
|
1281
1280
|
ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
|
@@ -1285,7 +1284,7 @@ f5:
|
|
1285
1284
|
}
|
1286
1285
|
goto _again;
|
1287
1286
|
f6:
|
1288
|
-
#line
|
1287
|
+
#line 175 "parser.rl"
|
1289
1288
|
{
|
1290
1289
|
switch( cs ){
|
1291
1290
|
case 0:
|
@@ -1307,7 +1306,7 @@ f6:
|
|
1307
1306
|
}
|
1308
1307
|
parser->prev_state = cs;
|
1309
1308
|
}
|
1310
|
-
#line
|
1309
|
+
#line 124 "parser.rl"
|
1311
1310
|
{
|
1312
1311
|
parser->attr_key = parser->mark;
|
1313
1312
|
parser->attr_key_length = p - parser->mark;
|
@@ -1318,7 +1317,7 @@ f6:
|
|
1318
1317
|
}
|
1319
1318
|
goto _again;
|
1320
1319
|
f7:
|
1321
|
-
#line
|
1320
|
+
#line 175 "parser.rl"
|
1322
1321
|
{
|
1323
1322
|
switch( cs ){
|
1324
1323
|
case 0:
|
@@ -1340,7 +1339,7 @@ f7:
|
|
1340
1339
|
}
|
1341
1340
|
parser->prev_state = cs;
|
1342
1341
|
}
|
1343
|
-
#line
|
1342
|
+
#line 133 "parser.rl"
|
1344
1343
|
{
|
1345
1344
|
ESIAttribute *attr;
|
1346
1345
|
parser->attr_value = parser->mark;
|
@@ -1364,7 +1363,7 @@ f7:
|
|
1364
1363
|
}
|
1365
1364
|
goto _again;
|
1366
1365
|
f4:
|
1367
|
-
#line
|
1366
|
+
#line 175 "parser.rl"
|
1368
1367
|
{
|
1369
1368
|
switch( cs ){
|
1370
1369
|
case 0:
|
@@ -1386,7 +1385,7 @@ f4:
|
|
1386
1385
|
}
|
1387
1386
|
parser->prev_state = cs;
|
1388
1387
|
}
|
1389
|
-
#line
|
1388
|
+
#line 155 "parser.rl"
|
1390
1389
|
{
|
1391
1390
|
parser->tag_text = parser->mark;
|
1392
1391
|
parser->tag_text_length = p - parser->mark;
|
@@ -1397,7 +1396,7 @@ f4:
|
|
1397
1396
|
}
|
1398
1397
|
goto _again;
|
1399
1398
|
f2:
|
1400
|
-
#line
|
1399
|
+
#line 175 "parser.rl"
|
1401
1400
|
{
|
1402
1401
|
switch( cs ){
|
1403
1402
|
case 0:
|
@@ -1419,7 +1418,7 @@ f2:
|
|
1419
1418
|
}
|
1420
1419
|
parser->prev_state = cs;
|
1421
1420
|
}
|
1422
|
-
#line
|
1421
|
+
#line 164 "parser.rl"
|
1423
1422
|
{
|
1424
1423
|
parser->tag_text = parser->mark+2;
|
1425
1424
|
parser->tag_text_length = p - (parser->mark+2);
|
@@ -1432,7 +1431,7 @@ f2:
|
|
1432
1431
|
}
|
1433
1432
|
goto _again;
|
1434
1433
|
f10:
|
1435
|
-
#line
|
1434
|
+
#line 175 "parser.rl"
|
1436
1435
|
{
|
1437
1436
|
switch( cs ){
|
1438
1437
|
case 0:
|
@@ -1454,18 +1453,18 @@ f10:
|
|
1454
1453
|
}
|
1455
1454
|
parser->prev_state = cs;
|
1456
1455
|
}
|
1457
|
-
#line
|
1456
|
+
#line 85 "parser.rl"
|
1458
1457
|
{
|
1459
1458
|
parser->mark = p;
|
1460
1459
|
//debug_string( "begin", p, 1 );
|
1461
1460
|
}
|
1462
|
-
#line
|
1461
|
+
#line 89 "parser.rl"
|
1463
1462
|
{
|
1464
1463
|
// printf( "finish\n" );
|
1465
1464
|
}
|
1466
1465
|
goto _again;
|
1467
1466
|
f11:
|
1468
|
-
#line
|
1467
|
+
#line 175 "parser.rl"
|
1469
1468
|
{
|
1470
1469
|
switch( cs ){
|
1471
1470
|
case 0:
|
@@ -1487,7 +1486,7 @@ f11:
|
|
1487
1486
|
}
|
1488
1487
|
parser->prev_state = cs;
|
1489
1488
|
}
|
1490
|
-
#line
|
1489
|
+
#line 102 "parser.rl"
|
1491
1490
|
{
|
1492
1491
|
//debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
|
1493
1492
|
ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
|
@@ -1501,13 +1500,13 @@ f11:
|
|
1501
1500
|
parser->mark = p;
|
1502
1501
|
//debug_string( "see_end_tag", p, 1 );
|
1503
1502
|
}
|
1504
|
-
#line
|
1503
|
+
#line 89 "parser.rl"
|
1505
1504
|
{
|
1506
1505
|
// printf( "finish\n" );
|
1507
1506
|
}
|
1508
1507
|
goto _again;
|
1509
1508
|
f13:
|
1510
|
-
#line
|
1509
|
+
#line 175 "parser.rl"
|
1511
1510
|
{
|
1512
1511
|
switch( cs ){
|
1513
1512
|
case 0:
|
@@ -1529,12 +1528,12 @@ f13:
|
|
1529
1528
|
}
|
1530
1529
|
parser->prev_state = cs;
|
1531
1530
|
}
|
1532
|
-
#line
|
1531
|
+
#line 85 "parser.rl"
|
1533
1532
|
{
|
1534
1533
|
parser->mark = p;
|
1535
1534
|
//debug_string( "begin", p, 1 );
|
1536
1535
|
}
|
1537
|
-
#line
|
1536
|
+
#line 102 "parser.rl"
|
1538
1537
|
{
|
1539
1538
|
//debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
|
1540
1539
|
ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
|
@@ -1548,13 +1547,13 @@ f13:
|
|
1548
1547
|
parser->mark = p;
|
1549
1548
|
//debug_string( "see_end_tag", p, 1 );
|
1550
1549
|
}
|
1551
|
-
#line
|
1550
|
+
#line 89 "parser.rl"
|
1552
1551
|
{
|
1553
1552
|
// printf( "finish\n" );
|
1554
1553
|
}
|
1555
1554
|
goto _again;
|
1556
1555
|
f12:
|
1557
|
-
#line
|
1556
|
+
#line 175 "parser.rl"
|
1558
1557
|
{
|
1559
1558
|
switch( cs ){
|
1560
1559
|
case 0:
|
@@ -1576,7 +1575,7 @@ f12:
|
|
1576
1575
|
}
|
1577
1576
|
parser->prev_state = cs;
|
1578
1577
|
}
|
1579
|
-
#line
|
1578
|
+
#line 102 "parser.rl"
|
1580
1579
|
{
|
1581
1580
|
//debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
|
1582
1581
|
ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
|
@@ -1590,7 +1589,7 @@ f12:
|
|
1590
1589
|
parser->mark = p;
|
1591
1590
|
//debug_string( "see_end_tag", p, 1 );
|
1592
1591
|
}
|
1593
|
-
#line
|
1592
|
+
#line 133 "parser.rl"
|
1594
1593
|
{
|
1595
1594
|
ESIAttribute *attr;
|
1596
1595
|
parser->attr_value = parser->mark;
|
@@ -1612,7 +1611,7 @@ f12:
|
|
1612
1611
|
// debug_string( "\tattribute value", parser->attr_value, parser->attr_value_length );
|
1613
1612
|
//debug_string( "see_attribute_value", p, 1 );
|
1614
1613
|
}
|
1615
|
-
#line
|
1614
|
+
#line 89 "parser.rl"
|
1616
1615
|
{
|
1617
1616
|
// printf( "finish\n" );
|
1618
1617
|
}
|
@@ -1623,7 +1622,7 @@ _again:
|
|
1623
1622
|
goto _resume;
|
1624
1623
|
_out: {}
|
1625
1624
|
}
|
1626
|
-
#line
|
1625
|
+
#line 351 "parser.rl"
|
1627
1626
|
|
1628
1627
|
parser->cs = cs;
|
1629
1628
|
|
@@ -1660,8 +1659,8 @@ _again:
|
|
1660
1659
|
int esi_parser_finish( ESIParser *parser )
|
1661
1660
|
{
|
1662
1661
|
|
1663
|
-
#line
|
1664
|
-
#line
|
1662
|
+
#line 1663 "parser.c"
|
1663
|
+
#line 387 "parser.rl"
|
1665
1664
|
return 0;
|
1666
1665
|
}
|
1667
1666
|
|