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.
Files changed (153) hide show
  1. data/README +8 -8
  2. data/Rakefile +4 -12
  3. data/doc/rdoc/classes/ESI.html +169 -0
  4. data/doc/rdoc/classes/ESI/Cache.html +178 -0
  5. data/doc/rdoc/classes/ESI/Cache.src/M000060.html +17 -0
  6. data/doc/rdoc/classes/ESI/Cache.src/M000061.html +20 -0
  7. data/doc/rdoc/classes/ESI/Config.html +291 -0
  8. data/doc/rdoc/classes/ESI/Config.src/M000043.html +18 -0
  9. data/doc/rdoc/classes/ESI/Config.src/M000044.html +18 -0
  10. data/doc/rdoc/classes/ESI/Config.src/M000045.html +35 -0
  11. data/doc/rdoc/classes/ESI/Config.src/M000046.html +38 -0
  12. data/doc/rdoc/classes/ESI/Config.src/M000047.html +23 -0
  13. data/doc/rdoc/classes/ESI/Config.src/M000048.html +18 -0
  14. data/doc/rdoc/classes/ESI/Config.src/M000049.html +20 -0
  15. data/doc/rdoc/classes/ESI/Config.src/M000050.html +18 -0
  16. data/doc/rdoc/classes/ESI/Config.src/M000051.html +24 -0
  17. data/doc/rdoc/classes/ESI/Config/CacheConfig.html +212 -0
  18. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html +19 -0
  19. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html +19 -0
  20. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html +18 -0
  21. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html +18 -0
  22. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html +18 -0
  23. data/doc/rdoc/classes/ESI/Config/ConfigRouter.html +187 -0
  24. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html +19 -0
  25. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html +21 -0
  26. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html +21 -0
  27. data/doc/rdoc/classes/ESI/Dispatcher.html +172 -0
  28. data/doc/rdoc/classes/ESI/Dispatcher.src/M000062.html +23 -0
  29. data/doc/rdoc/classes/ESI/Dispatcher.src/M000063.html +20 -0
  30. data/doc/rdoc/classes/ESI/Fragment.html +218 -0
  31. data/doc/rdoc/classes/ESI/Fragment.src/M000076.html +21 -0
  32. data/doc/rdoc/classes/ESI/Fragment.src/M000077.html +18 -0
  33. data/doc/rdoc/classes/ESI/Fragment.src/M000078.html +18 -0
  34. data/doc/rdoc/classes/ESI/Handler.html +236 -0
  35. data/doc/rdoc/classes/ESI/Handler.src/M000079.html +19 -0
  36. data/doc/rdoc/classes/ESI/Handler.src/M000080.html +161 -0
  37. data/doc/rdoc/classes/ESI/Handler.src/M000081.html +24 -0
  38. data/doc/rdoc/classes/ESI/Handler.src/M000082.html +18 -0
  39. data/doc/rdoc/classes/ESI/Handler.src/M000083.html +26 -0
  40. data/doc/rdoc/classes/ESI/Handler.src/M000084.html +30 -0
  41. data/doc/rdoc/classes/ESI/Invalidator.html +131 -0
  42. data/doc/rdoc/classes/ESI/Invalidator.src/M000004.html +41 -0
  43. data/doc/rdoc/classes/ESI/Log.html +251 -0
  44. data/doc/rdoc/classes/ESI/Log.src/M000005.html +18 -0
  45. data/doc/rdoc/classes/ESI/Log.src/M000006.html +18 -0
  46. data/doc/rdoc/classes/ESI/Log.src/M000007.html +18 -0
  47. data/doc/rdoc/classes/ESI/Log.src/M000008.html +18 -0
  48. data/doc/rdoc/classes/ESI/Log.src/M000009.html +18 -0
  49. data/doc/rdoc/classes/ESI/Log.src/M000010.html +18 -0
  50. data/doc/rdoc/classes/ESI/Log.src/M000011.html +18 -0
  51. data/doc/rdoc/classes/ESI/Log.src/M000012.html +18 -0
  52. data/doc/rdoc/classes/ESI/Log.src/M000013.html +18 -0
  53. data/doc/rdoc/classes/ESI/MemcachedCache.html +314 -0
  54. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html +24 -0
  55. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html +22 -0
  56. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html +19 -0
  57. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html +23 -0
  58. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html +18 -0
  59. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html +19 -0
  60. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html +18 -0
  61. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html +18 -0
  62. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html +17 -0
  63. data/doc/rdoc/classes/ESI/Router.html +229 -0
  64. data/doc/rdoc/classes/ESI/Router.src/M000073.html +36 -0
  65. data/doc/rdoc/classes/ESI/Router.src/M000074.html +25 -0
  66. data/doc/rdoc/classes/ESI/Router.src/M000075.html +24 -0
  67. data/doc/rdoc/classes/ESI/RubyCache.html +278 -0
  68. data/doc/rdoc/classes/ESI/RubyCache.src/M000064.html +20 -0
  69. data/doc/rdoc/classes/ESI/RubyCache.src/M000065.html +22 -0
  70. data/doc/rdoc/classes/ESI/RubyCache.src/M000066.html +21 -0
  71. data/doc/rdoc/classes/ESI/RubyCache.src/M000067.html +22 -0
  72. data/doc/rdoc/classes/ESI/RubyCache.src/M000068.html +18 -0
  73. data/doc/rdoc/classes/ESI/RubyCache.src/M000069.html +22 -0
  74. data/doc/rdoc/classes/ESI/RubyCache.src/M000070.html +18 -0
  75. data/doc/rdoc/classes/ESI/RubyCache.src/M000071.html +18 -0
  76. data/doc/rdoc/classes/ESI/RubyCache.src/M000072.html +18 -0
  77. data/doc/rdoc/classes/ESI/Tag.html +137 -0
  78. data/doc/rdoc/classes/ESI/Tag/Attempt.html +113 -0
  79. data/doc/rdoc/classes/ESI/Tag/Base.html +267 -0
  80. data/doc/rdoc/classes/ESI/Tag/Base.src/M000028.html +26 -0
  81. data/doc/rdoc/classes/ESI/Tag/Base.src/M000029.html +23 -0
  82. data/doc/rdoc/classes/ESI/Tag/Base.src/M000030.html +22 -0
  83. data/doc/rdoc/classes/ESI/Tag/Base.src/M000031.html +18 -0
  84. data/doc/rdoc/classes/ESI/Tag/Base.src/M000032.html +22 -0
  85. data/doc/rdoc/classes/ESI/Tag/Base.src/M000033.html +23 -0
  86. data/doc/rdoc/classes/ESI/Tag/Except.html +184 -0
  87. data/doc/rdoc/classes/ESI/Tag/Except.src/M000020.html +21 -0
  88. data/doc/rdoc/classes/ESI/Tag/Except.src/M000021.html +20 -0
  89. data/doc/rdoc/classes/ESI/Tag/Except.src/M000022.html +18 -0
  90. data/doc/rdoc/classes/ESI/Tag/Include.html +189 -0
  91. data/doc/rdoc/classes/ESI/Tag/Include.src/M000017.html +20 -0
  92. data/doc/rdoc/classes/ESI/Tag/Include.src/M000018.html +18 -0
  93. data/doc/rdoc/classes/ESI/Tag/Include.src/M000019.html +125 -0
  94. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.html +199 -0
  95. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html +18 -0
  96. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html +42 -0
  97. data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html +155 -0
  98. data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html +19 -0
  99. data/doc/rdoc/classes/ESI/Tag/Invalidate.html +171 -0
  100. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html +19 -0
  101. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html +51 -0
  102. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html +19 -0
  103. data/doc/rdoc/classes/ESI/Tag/Try.html +161 -0
  104. data/doc/rdoc/classes/ESI/Tag/Try.src/M000023.html +40 -0
  105. data/doc/rdoc/classes/ESI/Tag/Try.src/M000024.html +18 -0
  106. data/doc/rdoc/classes/MultiDirHandler.html +198 -0
  107. data/doc/rdoc/classes/MultiDirHandler.src/M000001.html +20 -0
  108. data/doc/rdoc/classes/MultiDirHandler.src/M000002.html +28 -0
  109. data/doc/rdoc/classes/MultiDirHandler.src/M000003.html +22 -0
  110. data/doc/rdoc/classes/Net.html +119 -0
  111. data/doc/rdoc/classes/Net/An.html +114 -0
  112. data/doc/rdoc/classes/Net/An/HTTP.html +137 -0
  113. data/doc/rdoc/classes/Net/An/HTTP.src/M000087.html +17 -0
  114. data/doc/rdoc/classes/Net/An/IORequest.html +139 -0
  115. data/doc/rdoc/classes/Net/An/IORequest.src/M000088.html +17 -0
  116. data/doc/rdoc/classes/Net/An/IOResponse.html +139 -0
  117. data/doc/rdoc/classes/Net/An/IOResponse.src/M000085.html +17 -0
  118. data/doc/rdoc/classes/Net/An/IOSocket.html +137 -0
  119. data/doc/rdoc/classes/Net/An/IOSocket.src/M000086.html +17 -0
  120. data/doc/rdoc/created.rid +1 -0
  121. data/doc/rdoc/files/COPYING.html +168 -0
  122. data/doc/rdoc/files/LICENSE.html +605 -0
  123. data/doc/rdoc/files/README.html +361 -0
  124. data/doc/rdoc/files/lib/esi/cache_rb.html +113 -0
  125. data/doc/rdoc/files/lib/esi/config_rb.html +108 -0
  126. data/doc/rdoc/files/lib/esi/dispatcher_rb.html +109 -0
  127. data/doc/rdoc/files/lib/esi/handler_rb.html +121 -0
  128. data/doc/rdoc/files/lib/esi/invalidator_rb.html +117 -0
  129. data/doc/rdoc/files/lib/esi/logger_rb.html +108 -0
  130. data/doc/rdoc/files/lib/esi/router_rb.html +101 -0
  131. data/doc/rdoc/files/lib/esi/tag/attempt_rb.html +101 -0
  132. data/doc/rdoc/files/lib/esi/tag/base_rb.html +108 -0
  133. data/doc/rdoc/files/lib/esi/tag/except_rb.html +101 -0
  134. data/doc/rdoc/files/lib/esi/tag/include_rb.html +109 -0
  135. data/doc/rdoc/files/lib/esi/tag/invalidate_rb.html +109 -0
  136. data/doc/rdoc/files/lib/esi/tag/try_rb.html +108 -0
  137. data/doc/rdoc/files/lib/multi_dirhandler_rb.html +109 -0
  138. data/doc/rdoc/files/lib/net/ahttp_rb.html +109 -0
  139. data/doc/rdoc/fr_class_index.html +55 -0
  140. data/doc/rdoc/fr_file_index.html +44 -0
  141. data/doc/rdoc/fr_method_index.html +114 -0
  142. data/doc/rdoc/index.html +24 -0
  143. data/doc/rdoc/rdoc-style.css +208 -0
  144. data/ext/esi/esi_parser.c +36 -156
  145. data/ext/esi/test/parser.c +42 -43
  146. data/ext/esi/test1.rb +2 -2
  147. data/lib/esi/cache.rb +83 -72
  148. data/lib/esi/handler.rb +5 -20
  149. data/lib/multi_dirhandler.rb +13 -0
  150. data/lib/net/ahttp.rb +36 -0
  151. data/test/integration/handler_test.rb +1 -1
  152. metadata +222 -45
  153. data/test/unit/sample.html +0 -21
@@ -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
- user_data = (ParserUserData*)parser->user_data;
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
- user_data = (ParserUserData*)parser->user_data;
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
- user_data = (ParserUserData*)parser->user_data;
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
- ParserUserData *ud = (ParserUserData*)user_data;
135
- if( ud->start_tag_block && !NIL_P(ud->start_tag_block) && rb_respond_to( ud->start_tag_block, rb_intern("call") ) ){
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( ud->start_tag_block, rb_intern("call"), 2, tag_text, attr_hash );
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
- ParserUserData *ud = (ParserUserData*)user_data;
155
- if( ud->end_tag_block && !NIL_P(ud->end_tag_block) && rb_respond_to( ud->end_tag_block, rb_intern("call") ) ){
156
- VALUE tag_text = rb_str_new( name_start, name_length );
157
- rb_funcall( ud->end_tag_block, rb_intern("call"), 1, tag_text );
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 rbstr;
185
- ParserUserData *ud = (ParserUserData*)user_data;
186
-
187
- if( ud->output_block && !NIL_P(ud->output_block) ){
188
- rbstr = rb_str_new( data, length );
189
- send_output( ud->output_block, ud->esi_tag, rbstr );
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, ESIParser_mark, ESIParser_free, parser );
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
- ESIParser *parser;
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
- ESIParser *parser;
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
- ESIParser *parser;
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
- ESIParser *parser;
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
- ESIParser *parser;
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
- ESIParser *parser;
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), parser->user_data );
243
+ esi_parser_default_output_cp( RSTRING_PTR(output), RSTRING_LEN(output), (void*)self );
364
244
 
365
245
  return Qnil;
366
246
  }
@@ -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 199 "parser.rl"
83
+ #line 198 "parser.rl"
85
84
 
86
85
 
87
86
 
88
- #line 89 "parser.c"
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 202 "parser.rl"
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 191 "parser.c"
189
+ #line 190 "parser.c"
191
190
  {
192
191
  cs = esi_start;
193
192
  }
194
- #line 296 "parser.rl"
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 252 "parser.c"
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 176 "parser.rl"
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 176 "parser.rl"
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 86 "parser.rl"
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 176 "parser.rl"
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 90 "parser.rl"
1179
+ #line 89 "parser.rl"
1181
1180
  {
1182
1181
  // printf( "finish\n" );
1183
1182
  }
1184
1183
  goto _again;
1185
1184
  f3:
1186
- #line 176 "parser.rl"
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 95 "parser.rl"
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 176 "parser.rl"
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 103 "parser.rl"
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 176 "parser.rl"
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 117 "parser.rl"
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 176 "parser.rl"
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 125 "parser.rl"
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 176 "parser.rl"
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 134 "parser.rl"
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 176 "parser.rl"
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 156 "parser.rl"
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 176 "parser.rl"
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 165 "parser.rl"
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 176 "parser.rl"
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 86 "parser.rl"
1456
+ #line 85 "parser.rl"
1458
1457
  {
1459
1458
  parser->mark = p;
1460
1459
  //debug_string( "begin", p, 1 );
1461
1460
  }
1462
- #line 90 "parser.rl"
1461
+ #line 89 "parser.rl"
1463
1462
  {
1464
1463
  // printf( "finish\n" );
1465
1464
  }
1466
1465
  goto _again;
1467
1466
  f11:
1468
- #line 176 "parser.rl"
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 103 "parser.rl"
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 90 "parser.rl"
1503
+ #line 89 "parser.rl"
1505
1504
  {
1506
1505
  // printf( "finish\n" );
1507
1506
  }
1508
1507
  goto _again;
1509
1508
  f13:
1510
- #line 176 "parser.rl"
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 86 "parser.rl"
1531
+ #line 85 "parser.rl"
1533
1532
  {
1534
1533
  parser->mark = p;
1535
1534
  //debug_string( "begin", p, 1 );
1536
1535
  }
1537
- #line 103 "parser.rl"
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 90 "parser.rl"
1550
+ #line 89 "parser.rl"
1552
1551
  {
1553
1552
  // printf( "finish\n" );
1554
1553
  }
1555
1554
  goto _again;
1556
1555
  f12:
1557
- #line 176 "parser.rl"
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 103 "parser.rl"
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 134 "parser.rl"
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 90 "parser.rl"
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 352 "parser.rl"
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 "parser.c"
1664
- #line 388 "parser.rl"
1662
+ #line 1663 "parser.c"
1663
+ #line 387 "parser.rl"
1665
1664
  return 0;
1666
1665
  }
1667
1666