mongrel_esi 0.4.0 → 0.4.1
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/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
|
|