mongrel_esi 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/Rakefile +15 -8
  2. data/bin/mongrel_esi +0 -0
  3. data/ext/esi/common.rl +32 -27
  4. data/ext/esi/esi_parser.c +11 -4
  5. data/ext/esi/parser.c +4536 -901
  6. data/ext/esi/parser.h +7 -0
  7. data/ext/esi/parser.rl +171 -53
  8. data/ext/esi/run-test.rb +0 -0
  9. data/ext/esi/test/common.rl +32 -27
  10. data/ext/esi/test/parser.c +322 -1342
  11. data/ext/esi/test/parser.h +7 -0
  12. data/ext/esi/test/parser.rl +171 -53
  13. data/ext/esi/test/test.c +13 -4
  14. data/ext/esi/test1.rb +35 -3
  15. data/lib/esi/cache.rb +2 -1
  16. data/lib/esi/config.rb +37 -0
  17. data/lib/esi/dispatcher.rb +3 -5
  18. data/lib/esi/invalidator.rb +3 -0
  19. data/lib/esi/logger.rb +0 -7
  20. data/lib/esi/parser.rb +70 -0
  21. data/lib/esi/processor.rb +88 -0
  22. data/lib/esi/proxy.rb +104 -0
  23. data/lib/esi/response.rb +106 -0
  24. data/lib/esi/router.rb +3 -0
  25. data/lib/esi/tag/attempt.rb +3 -0
  26. data/lib/esi/tag/base.rb +3 -1
  27. data/lib/esi/tag/except.rb +2 -0
  28. data/lib/esi/tag/include.rb +131 -132
  29. data/lib/esi/tag/invalidate.rb +2 -0
  30. data/lib/esi/tag/try.rb +3 -0
  31. data/test/integration/basic_test.rb +0 -1
  32. data/test/integration/docs/esi_max_age_varies.html +10 -0
  33. data/test/integration/handler_test.rb +31 -5
  34. data/test/integration/help.rb +13 -1
  35. data/test/load_test.rb +133 -0
  36. data/test/unit/include_request_test.rb +1 -1
  37. data/test/unit/parser_test.rb +41 -5
  38. data/test/unit/response_test.rb +184 -0
  39. metadata +50 -224
  40. data/doc/rdoc/classes/ESI/Cache.html +0 -178
  41. data/doc/rdoc/classes/ESI/Cache.src/M000060.html +0 -17
  42. data/doc/rdoc/classes/ESI/Cache.src/M000061.html +0 -20
  43. data/doc/rdoc/classes/ESI/Config/CacheConfig.html +0 -212
  44. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html +0 -19
  45. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html +0 -19
  46. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html +0 -18
  47. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html +0 -18
  48. data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html +0 -18
  49. data/doc/rdoc/classes/ESI/Config/ConfigRouter.html +0 -187
  50. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html +0 -19
  51. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html +0 -21
  52. data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html +0 -21
  53. data/doc/rdoc/classes/ESI/Config.html +0 -291
  54. data/doc/rdoc/classes/ESI/Config.src/M000043.html +0 -18
  55. data/doc/rdoc/classes/ESI/Config.src/M000044.html +0 -18
  56. data/doc/rdoc/classes/ESI/Config.src/M000045.html +0 -35
  57. data/doc/rdoc/classes/ESI/Config.src/M000046.html +0 -38
  58. data/doc/rdoc/classes/ESI/Config.src/M000047.html +0 -23
  59. data/doc/rdoc/classes/ESI/Config.src/M000048.html +0 -18
  60. data/doc/rdoc/classes/ESI/Config.src/M000049.html +0 -20
  61. data/doc/rdoc/classes/ESI/Config.src/M000050.html +0 -18
  62. data/doc/rdoc/classes/ESI/Config.src/M000051.html +0 -24
  63. data/doc/rdoc/classes/ESI/Dispatcher.html +0 -172
  64. data/doc/rdoc/classes/ESI/Dispatcher.src/M000062.html +0 -23
  65. data/doc/rdoc/classes/ESI/Dispatcher.src/M000063.html +0 -20
  66. data/doc/rdoc/classes/ESI/Fragment.html +0 -218
  67. data/doc/rdoc/classes/ESI/Fragment.src/M000076.html +0 -21
  68. data/doc/rdoc/classes/ESI/Fragment.src/M000077.html +0 -18
  69. data/doc/rdoc/classes/ESI/Fragment.src/M000078.html +0 -18
  70. data/doc/rdoc/classes/ESI/Handler.html +0 -236
  71. data/doc/rdoc/classes/ESI/Handler.src/M000079.html +0 -19
  72. data/doc/rdoc/classes/ESI/Handler.src/M000080.html +0 -161
  73. data/doc/rdoc/classes/ESI/Handler.src/M000081.html +0 -24
  74. data/doc/rdoc/classes/ESI/Handler.src/M000082.html +0 -18
  75. data/doc/rdoc/classes/ESI/Handler.src/M000083.html +0 -26
  76. data/doc/rdoc/classes/ESI/Handler.src/M000084.html +0 -30
  77. data/doc/rdoc/classes/ESI/Invalidator.html +0 -131
  78. data/doc/rdoc/classes/ESI/Invalidator.src/M000004.html +0 -41
  79. data/doc/rdoc/classes/ESI/Log.html +0 -251
  80. data/doc/rdoc/classes/ESI/Log.src/M000005.html +0 -18
  81. data/doc/rdoc/classes/ESI/Log.src/M000006.html +0 -18
  82. data/doc/rdoc/classes/ESI/Log.src/M000007.html +0 -18
  83. data/doc/rdoc/classes/ESI/Log.src/M000008.html +0 -18
  84. data/doc/rdoc/classes/ESI/Log.src/M000009.html +0 -18
  85. data/doc/rdoc/classes/ESI/Log.src/M000010.html +0 -18
  86. data/doc/rdoc/classes/ESI/Log.src/M000011.html +0 -18
  87. data/doc/rdoc/classes/ESI/Log.src/M000012.html +0 -18
  88. data/doc/rdoc/classes/ESI/Log.src/M000013.html +0 -18
  89. data/doc/rdoc/classes/ESI/MemcachedCache.html +0 -314
  90. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html +0 -24
  91. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html +0 -22
  92. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html +0 -19
  93. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html +0 -23
  94. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html +0 -18
  95. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html +0 -19
  96. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html +0 -18
  97. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html +0 -18
  98. data/doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html +0 -17
  99. data/doc/rdoc/classes/ESI/Router.html +0 -229
  100. data/doc/rdoc/classes/ESI/Router.src/M000073.html +0 -36
  101. data/doc/rdoc/classes/ESI/Router.src/M000074.html +0 -25
  102. data/doc/rdoc/classes/ESI/Router.src/M000075.html +0 -24
  103. data/doc/rdoc/classes/ESI/RubyCache.html +0 -278
  104. data/doc/rdoc/classes/ESI/RubyCache.src/M000064.html +0 -20
  105. data/doc/rdoc/classes/ESI/RubyCache.src/M000065.html +0 -22
  106. data/doc/rdoc/classes/ESI/RubyCache.src/M000066.html +0 -21
  107. data/doc/rdoc/classes/ESI/RubyCache.src/M000067.html +0 -22
  108. data/doc/rdoc/classes/ESI/RubyCache.src/M000068.html +0 -18
  109. data/doc/rdoc/classes/ESI/RubyCache.src/M000069.html +0 -22
  110. data/doc/rdoc/classes/ESI/RubyCache.src/M000070.html +0 -18
  111. data/doc/rdoc/classes/ESI/RubyCache.src/M000071.html +0 -18
  112. data/doc/rdoc/classes/ESI/RubyCache.src/M000072.html +0 -18
  113. data/doc/rdoc/classes/ESI/Tag/Attempt.html +0 -113
  114. data/doc/rdoc/classes/ESI/Tag/Base.html +0 -267
  115. data/doc/rdoc/classes/ESI/Tag/Base.src/M000028.html +0 -26
  116. data/doc/rdoc/classes/ESI/Tag/Base.src/M000029.html +0 -23
  117. data/doc/rdoc/classes/ESI/Tag/Base.src/M000030.html +0 -22
  118. data/doc/rdoc/classes/ESI/Tag/Base.src/M000031.html +0 -18
  119. data/doc/rdoc/classes/ESI/Tag/Base.src/M000032.html +0 -22
  120. data/doc/rdoc/classes/ESI/Tag/Base.src/M000033.html +0 -23
  121. data/doc/rdoc/classes/ESI/Tag/Except.html +0 -184
  122. data/doc/rdoc/classes/ESI/Tag/Except.src/M000020.html +0 -21
  123. data/doc/rdoc/classes/ESI/Tag/Except.src/M000021.html +0 -20
  124. data/doc/rdoc/classes/ESI/Tag/Except.src/M000022.html +0 -18
  125. data/doc/rdoc/classes/ESI/Tag/Include.html +0 -189
  126. data/doc/rdoc/classes/ESI/Tag/Include.src/M000017.html +0 -20
  127. data/doc/rdoc/classes/ESI/Tag/Include.src/M000018.html +0 -18
  128. data/doc/rdoc/classes/ESI/Tag/Include.src/M000019.html +0 -125
  129. data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html +0 -155
  130. data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html +0 -19
  131. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.html +0 -199
  132. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html +0 -18
  133. data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html +0 -42
  134. data/doc/rdoc/classes/ESI/Tag/Invalidate.html +0 -171
  135. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html +0 -19
  136. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html +0 -51
  137. data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html +0 -19
  138. data/doc/rdoc/classes/ESI/Tag/Try.html +0 -161
  139. data/doc/rdoc/classes/ESI/Tag/Try.src/M000023.html +0 -40
  140. data/doc/rdoc/classes/ESI/Tag/Try.src/M000024.html +0 -18
  141. data/doc/rdoc/classes/ESI/Tag.html +0 -137
  142. data/doc/rdoc/classes/ESI.html +0 -169
  143. data/doc/rdoc/classes/MultiDirHandler.html +0 -198
  144. data/doc/rdoc/classes/MultiDirHandler.src/M000001.html +0 -20
  145. data/doc/rdoc/classes/MultiDirHandler.src/M000002.html +0 -28
  146. data/doc/rdoc/classes/MultiDirHandler.src/M000003.html +0 -22
  147. data/doc/rdoc/classes/Net/An/HTTP.html +0 -137
  148. data/doc/rdoc/classes/Net/An/HTTP.src/M000087.html +0 -17
  149. data/doc/rdoc/classes/Net/An/IORequest.html +0 -139
  150. data/doc/rdoc/classes/Net/An/IORequest.src/M000088.html +0 -17
  151. data/doc/rdoc/classes/Net/An/IOResponse.html +0 -139
  152. data/doc/rdoc/classes/Net/An/IOResponse.src/M000085.html +0 -17
  153. data/doc/rdoc/classes/Net/An/IOSocket.html +0 -137
  154. data/doc/rdoc/classes/Net/An/IOSocket.src/M000086.html +0 -17
  155. data/doc/rdoc/classes/Net/An.html +0 -114
  156. data/doc/rdoc/classes/Net.html +0 -119
  157. data/doc/rdoc/created.rid +0 -1
  158. data/doc/rdoc/files/COPYING.html +0 -168
  159. data/doc/rdoc/files/LICENSE.html +0 -605
  160. data/doc/rdoc/files/README.html +0 -361
  161. data/doc/rdoc/files/lib/esi/cache_rb.html +0 -113
  162. data/doc/rdoc/files/lib/esi/config_rb.html +0 -108
  163. data/doc/rdoc/files/lib/esi/dispatcher_rb.html +0 -109
  164. data/doc/rdoc/files/lib/esi/handler_rb.html +0 -121
  165. data/doc/rdoc/files/lib/esi/invalidator_rb.html +0 -117
  166. data/doc/rdoc/files/lib/esi/logger_rb.html +0 -108
  167. data/doc/rdoc/files/lib/esi/router_rb.html +0 -101
  168. data/doc/rdoc/files/lib/esi/tag/attempt_rb.html +0 -101
  169. data/doc/rdoc/files/lib/esi/tag/base_rb.html +0 -108
  170. data/doc/rdoc/files/lib/esi/tag/except_rb.html +0 -101
  171. data/doc/rdoc/files/lib/esi/tag/include_rb.html +0 -109
  172. data/doc/rdoc/files/lib/esi/tag/invalidate_rb.html +0 -109
  173. data/doc/rdoc/files/lib/esi/tag/try_rb.html +0 -108
  174. data/doc/rdoc/files/lib/multi_dirhandler_rb.html +0 -109
  175. data/doc/rdoc/files/lib/net/ahttp_rb.html +0 -109
  176. data/doc/rdoc/fr_class_index.html +0 -55
  177. data/doc/rdoc/fr_file_index.html +0 -44
  178. data/doc/rdoc/fr_method_index.html +0 -114
  179. data/doc/rdoc/index.html +0 -24
  180. data/doc/rdoc/rdoc-style.css +0 -208
  181. data/ext/esi/parser.rb +0 -49
  182. data/ext/esi/ruby_esi.rl +0 -135
  183. data/lib/esi/handler.rb +0 -221
  184. data/lib/net/ahttp.rb +0 -36
data/ext/esi/run-test.rb CHANGED
File without changes
@@ -1,41 +1,46 @@
1
+ /**
2
+ * Copyright (c) 2008 Todd A. Fisher
3
+ * see LICENSE
4
+ */
1
5
  %%{
2
6
  machine esi_common_parser;
3
7
 
4
- # inline tags e.g. <esi:comment text='some useless text'/> or <esi:include src='/foo/'/>, etc...
5
- esi_inline_tag = (
6
- start: (
7
- '<esi:' [a-z]+ space @see_start_tag -> start_attribute |
8
- '<esi:' [a-z]+ space* '/>' >see_start_tag %see_end_tag -> final
9
- ),
10
- start_attribute: (
11
- space* [a-zA-Z_\-]+ [a-zA-Z_\-0-9]* '=' @see_attribute_key -> end_attribute |
12
- space* '/>' @see_end_tag -> final
13
- ),
14
- end_attribute: (
15
- space* ['"][!{}#-&(-/:-@a-zA-Z0-9+_\-]+['"] @see_attribute_value -> start_attribute
16
- )
17
- ) >begin %finish;
8
+ # valid attribute key characters
9
+ attr_key = [a-zA-Z_\-]+ [a-zA-Z_\-0-9]*;
10
+
11
+ # attribute values can be contained within either double or single quotes, when single quoted then double quotes are valid
12
+ # when double quoted then single quotes are valid
13
+ attr_valueq1 = ('"' ("\\\""| [^"])* '"');
14
+ attr_valueq2 = ("'" ("\\\'"| [^'])* "'");
18
15
 
19
- # block tags e.g. <esi:try> <esi:attempt>, etc..
20
- esi_block_tag = (
16
+ # an attribute value is either single or double quoted
17
+ attr_value = ( attr_valueq1 | attr_valueq2 );
18
+
19
+ # inline tags e.g. <esi:comment text='some useless text'/> or <esi:include src='/foo/'/>, etc...
20
+ # block tags e.g. <esi:try><esi:attempt></esi:attempt></esi:try>
21
+ # NOTE: not verifying the tag nesting
22
+ esi_tags = (
21
23
  start: (
22
- '<esi:' [a-z]+ '>' @block_start_tag -> start |
24
+ # first match block start tag with no attributes
25
+ '<esi:' [a-z]+ '>' @block_start_tag -> final |
26
+ # next match either an inline or block tag with attributes
23
27
  '<esi:' [a-z]+ space @see_start_tag -> start_attribute |
28
+ # finally match a closing block tag
24
29
  '</esi:' [a-z]+ '>' @block_end_tag
25
30
  ),
26
31
  start_attribute: (
27
- space* [a-zA-Z_\-]+ [a-zA-Z_\-0-9]* '=' @see_attribute_key -> end_attribute | '>' @see_block_start_with_attributes -> final
32
+ # match the attribute key up to the begining = allowing for arbitrary whitespace before the start of the key
33
+ space* attr_key '=' @see_attribute_key -> end_attribute |
34
+ # match the end of an inline tag, triggers start and end callbacks
35
+ space* '/>' @see_end_tag -> final |
36
+ # matching the end of a block tag, triggers start callback
37
+ '>' @see_block_start_with_attributes -> final
28
38
  ),
29
39
  end_attribute: (
30
- space* ['"][!{}#-&(-/:-@a-zA-Z0-9+_\-]+['"] @see_attribute_value -> start_attribute
40
+ # match the attribute value and return to matching attribute start
41
+ space* attr_value @see_attribute_value -> start_attribute
31
42
  )
32
- ) >begin %finish;
33
-
34
- echo_state = (
35
- start: (
36
- /./ @echo
37
- )
38
- );
43
+ ) >begin %finish;
39
44
 
40
- main := ((/.*/)? @echo (esi_inline_tag|esi_block_tag) )*;
45
+ main := ((/.*/)? @echo (esi_tags) )*;
41
46
  }%%
@@ -2,7 +2,7 @@
2
2
  #include <stdio.h>
3
3
  #include <stdlib.h>
4
4
  #include <string.h>
5
- #include <ctype.h>
5
+ #include <unistd.h>
6
6
  #include "parser.h"
7
7
 
8
8
  /* define default callbacks */
@@ -27,7 +27,8 @@ esi_parser_default_output_cp(const void *data,
27
27
  void *user_data)
28
28
  {
29
29
  }
30
- #ifdef DEBUG
30
+
31
+ #if defined(DEBUG)
31
32
  static void debug_string( const char *msg, const char *str, size_t len )
32
33
  {
33
34
  char *pstr = esi_strndup( str, len );
@@ -65,33 +66,219 @@ static void esi_parser_concat_to_echobuffer( ESIParser *parser, char ch )
65
66
  // debug_string( "echo buffer", parser->echobuffer, parser->echobuffer_index+1 );
66
67
  }
67
68
 
68
- static void ltrim_pointer( const char **ptr, const char *bounds, size_t *len )
69
- {
70
- // remove any spaces or = at the before the value
71
- while( isspace( **ptr ) ||
72
- **ptr == '=' ||
73
- **ptr == '"' ||
74
- **ptr == '<' ||
75
- **ptr == '\'' &&
76
- *len > 0 &&
77
- (*ptr != bounds) ){
78
- (*ptr)++;
79
- (*len)--;
80
- }
81
- }
69
+ #line 164 "parser.rl"
82
70
 
83
- #line 198 "parser.rl"
84
71
 
85
72
 
73
+ #line 74 "parser.c"
74
+ static const char _esi_actions[] = {
75
+ 0, 1, 9, 2, 9, 0, 2, 9,
76
+ 1, 2, 9, 2, 2, 9, 3, 2,
77
+ 9, 4, 2, 9, 5, 2, 9, 6,
78
+ 2, 9, 7, 2, 9, 8, 3, 9,
79
+ 0, 1, 3, 9, 3, 1, 4, 9,
80
+ 0, 3, 1, 4, 9, 3, 6, 1
81
+
82
+ };
83
+
84
+ static const short _esi_key_offsets[] = {
85
+ 0, 1, 4, 6, 8, 10, 12, 15,
86
+ 19, 21, 23, 25, 28, 36, 48, 59,
87
+ 69, 75, 85, 94, 106, 117, 119, 130,
88
+ 140, 150, 160, 170, 180, 191, 201, 211,
89
+ 221, 231, 246, 256, 265, 277, 288, 298,
90
+ 304, 314, 325, 335, 345, 355, 365, 375,
91
+ 386, 396, 406, 416, 426, 441, 451, 453,
92
+ 455, 456, 457, 466, 475
93
+ };
94
+
95
+ static const char _esi_trans_keys[] = {
96
+ 60, 47, 60, 101, 60, 101, 60, 115,
97
+ 60, 105, 58, 60, 60, 97, 122, 60,
98
+ 62, 97, 122, 60, 115, 60, 105, 58,
99
+ 60, 60, 97, 122, 32, 47, 60, 62,
100
+ 9, 13, 97, 122, 32, 45, 47, 60,
101
+ 62, 95, 9, 13, 65, 90, 97, 122,
102
+ 32, 45, 47, 60, 95, 9, 13, 65,
103
+ 90, 97, 122, 45, 60, 61, 95, 48,
104
+ 57, 65, 90, 97, 122, 32, 34, 39,
105
+ 60, 9, 13, 33, 60, 95, 125, 35,
106
+ 38, 40, 90, 97, 123, 34, 39, 60,
107
+ 95, 125, 33, 90, 97, 123, 32, 45,
108
+ 47, 60, 62, 95, 9, 13, 65, 90,
109
+ 97, 122, 32, 45, 47, 60, 95, 9,
110
+ 13, 65, 90, 97, 122, 60, 62, 34,
111
+ 39, 47, 60, 95, 101, 125, 33, 90,
112
+ 97, 123, 34, 39, 60, 95, 101, 125,
113
+ 33, 90, 97, 123, 34, 39, 60, 95,
114
+ 115, 125, 33, 90, 97, 123, 34, 39,
115
+ 60, 95, 105, 125, 33, 90, 97, 123,
116
+ 34, 39, 58, 60, 95, 125, 33, 90,
117
+ 97, 123, 34, 39, 60, 95, 123, 125,
118
+ 33, 90, 97, 122, 34, 39, 60, 62,
119
+ 95, 123, 125, 33, 90, 97, 122, 34,
120
+ 39, 60, 95, 115, 125, 33, 90, 97,
121
+ 123, 34, 39, 60, 95, 105, 125, 33,
122
+ 90, 97, 123, 34, 39, 58, 60, 95,
123
+ 125, 33, 90, 97, 123, 34, 39, 60,
124
+ 95, 123, 125, 33, 90, 97, 122, 32,
125
+ 34, 39, 47, 60, 62, 95, 123, 125,
126
+ 9, 13, 33, 90, 97, 122, 34, 39,
127
+ 60, 62, 95, 125, 33, 90, 97, 123,
128
+ 34, 39, 60, 95, 125, 33, 90, 97,
129
+ 123, 32, 45, 47, 60, 62, 95, 9,
130
+ 13, 65, 90, 97, 122, 32, 45, 47,
131
+ 60, 95, 9, 13, 65, 90, 97, 122,
132
+ 45, 60, 61, 95, 48, 57, 65, 90,
133
+ 97, 122, 32, 34, 39, 60, 9, 13,
134
+ 33, 60, 95, 125, 35, 38, 40, 90,
135
+ 97, 123, 34, 39, 47, 60, 95, 101,
136
+ 125, 33, 90, 97, 123, 34, 39, 60,
137
+ 95, 101, 125, 33, 90, 97, 123, 34,
138
+ 39, 60, 95, 115, 125, 33, 90, 97,
139
+ 123, 34, 39, 60, 95, 105, 125, 33,
140
+ 90, 97, 123, 34, 39, 58, 60, 95,
141
+ 125, 33, 90, 97, 123, 34, 39, 60,
142
+ 95, 123, 125, 33, 90, 97, 122, 34,
143
+ 39, 60, 62, 95, 123, 125, 33, 90,
144
+ 97, 122, 34, 39, 60, 95, 115, 125,
145
+ 33, 90, 97, 123, 34, 39, 60, 95,
146
+ 105, 125, 33, 90, 97, 123, 34, 39,
147
+ 58, 60, 95, 125, 33, 90, 97, 123,
148
+ 34, 39, 60, 95, 123, 125, 33, 90,
149
+ 97, 122, 32, 34, 39, 47, 60, 62,
150
+ 95, 123, 125, 9, 13, 33, 90, 97,
151
+ 122, 34, 39, 60, 62, 95, 125, 33,
152
+ 90, 97, 123, 60, 62, 60, 62, 60,
153
+ 60, 34, 39, 60, 95, 125, 33, 90,
154
+ 97, 123, 34, 39, 60, 95, 125, 33,
155
+ 90, 97, 123, 60, 0
156
+ };
157
+
158
+ static const char _esi_single_lengths[] = {
159
+ 1, 3, 2, 2, 2, 2, 1, 2,
160
+ 2, 2, 2, 1, 4, 6, 5, 4,
161
+ 4, 4, 5, 6, 5, 2, 7, 6,
162
+ 6, 6, 6, 6, 7, 6, 6, 6,
163
+ 6, 9, 6, 5, 6, 5, 4, 4,
164
+ 4, 7, 6, 6, 6, 6, 6, 7,
165
+ 6, 6, 6, 6, 9, 6, 2, 2,
166
+ 1, 1, 5, 5, 1
167
+ };
168
+
169
+ static const char _esi_range_lengths[] = {
170
+ 0, 0, 0, 0, 0, 0, 1, 1,
171
+ 0, 0, 0, 1, 2, 3, 3, 3,
172
+ 1, 3, 2, 3, 3, 0, 2, 2,
173
+ 2, 2, 2, 2, 2, 2, 2, 2,
174
+ 2, 3, 2, 2, 3, 3, 3, 1,
175
+ 3, 2, 2, 2, 2, 2, 2, 2,
176
+ 2, 2, 2, 2, 3, 2, 0, 0,
177
+ 0, 0, 2, 2, 0
178
+ };
179
+
180
+ static const short _esi_index_offsets[] = {
181
+ 0, 2, 6, 9, 12, 15, 18, 21,
182
+ 25, 28, 31, 34, 37, 44, 54, 63,
183
+ 71, 77, 85, 93, 103, 112, 115, 125,
184
+ 134, 143, 152, 161, 170, 180, 189, 198,
185
+ 207, 216, 229, 238, 246, 256, 265, 273,
186
+ 279, 287, 297, 306, 315, 324, 333, 342,
187
+ 352, 361, 370, 379, 388, 401, 410, 413,
188
+ 416, 418, 420, 428, 436
189
+ };
190
+
191
+ static const char _esi_indicies[] = {
192
+ 1, 0, 2, 1, 3, 0, 1, 4,
193
+ 0, 1, 5, 0, 1, 6, 0, 7,
194
+ 1, 0, 1, 8, 0, 1, 9, 8,
195
+ 0, 1, 10, 0, 1, 11, 0, 12,
196
+ 1, 0, 1, 13, 0, 14, 15, 1,
197
+ 16, 14, 13, 0, 17, 18, 19, 1,
198
+ 20, 18, 17, 18, 18, 0, 17, 18,
199
+ 19, 1, 18, 17, 18, 18, 0, 18,
200
+ 1, 21, 18, 18, 18, 18, 0, 22,
201
+ 23, 23, 1, 22, 0, 24, 25, 24,
202
+ 24, 24, 24, 24, 0, 26, 26, 25,
203
+ 24, 24, 24, 24, 0, 27, 18, 28,
204
+ 1, 20, 18, 27, 18, 18, 0, 27,
205
+ 18, 28, 1, 18, 27, 18, 18, 0,
206
+ 1, 29, 0, 26, 26, 30, 25, 24,
207
+ 31, 24, 24, 24, 0, 26, 26, 25,
208
+ 24, 32, 24, 24, 24, 0, 26, 26,
209
+ 25, 24, 33, 24, 24, 24, 0, 26,
210
+ 26, 25, 24, 34, 24, 24, 24, 0,
211
+ 26, 26, 35, 25, 24, 24, 24, 24,
212
+ 0, 26, 26, 25, 24, 24, 24, 24,
213
+ 36, 0, 26, 26, 25, 37, 24, 24,
214
+ 24, 24, 36, 0, 26, 26, 25, 24,
215
+ 38, 24, 24, 24, 0, 26, 26, 25,
216
+ 24, 39, 24, 24, 24, 0, 26, 26,
217
+ 40, 25, 24, 24, 24, 24, 0, 26,
218
+ 26, 25, 24, 24, 24, 24, 41, 0,
219
+ 14, 26, 26, 42, 25, 43, 24, 24,
220
+ 24, 14, 24, 41, 0, 26, 26, 25,
221
+ 44, 24, 24, 24, 24, 0, 46, 46,
222
+ 47, 45, 45, 45, 45, 0, 48, 49,
223
+ 28, 1, 20, 49, 48, 49, 49, 0,
224
+ 48, 49, 28, 1, 49, 48, 49, 49,
225
+ 0, 49, 1, 50, 49, 49, 49, 49,
226
+ 0, 51, 52, 52, 1, 51, 0, 45,
227
+ 47, 45, 45, 45, 45, 45, 0, 46,
228
+ 46, 53, 47, 45, 54, 45, 45, 45,
229
+ 0, 46, 46, 47, 45, 55, 45, 45,
230
+ 45, 0, 46, 46, 47, 45, 56, 45,
231
+ 45, 45, 0, 46, 46, 47, 45, 57,
232
+ 45, 45, 45, 0, 46, 46, 58, 47,
233
+ 45, 45, 45, 45, 0, 46, 46, 47,
234
+ 45, 45, 45, 45, 59, 0, 46, 46,
235
+ 47, 60, 45, 45, 45, 45, 59, 0,
236
+ 46, 46, 47, 45, 61, 45, 45, 45,
237
+ 0, 46, 46, 47, 45, 62, 45, 45,
238
+ 45, 0, 46, 46, 63, 47, 45, 45,
239
+ 45, 45, 0, 46, 46, 47, 45, 45,
240
+ 45, 45, 64, 0, 14, 46, 46, 65,
241
+ 47, 66, 45, 45, 45, 14, 45, 64,
242
+ 0, 46, 46, 47, 67, 45, 45, 45,
243
+ 45, 0, 1, 68, 0, 1, 69, 0,
244
+ 1, 0, 71, 70, 74, 74, 75, 73,
245
+ 73, 73, 73, 72, 74, 74, 75, 73,
246
+ 73, 73, 73, 72, 76, 72, 0
247
+ };
248
+
249
+ static const char _esi_trans_targs_wi[] = {
250
+ 0, 1, 2, 8, 3, 4, 5, 6,
251
+ 7, 0, 9, 10, 11, 12, 13, 55,
252
+ 0, 14, 15, 54, 57, 16, 16, 17,
253
+ 18, 22, 19, 20, 21, 57, 23, 29,
254
+ 24, 25, 26, 27, 28, 18, 30, 31,
255
+ 32, 33, 34, 18, 58, 35, 36, 41,
256
+ 37, 38, 39, 39, 40, 42, 48, 43,
257
+ 44, 45, 46, 47, 35, 49, 50, 51,
258
+ 52, 53, 35, 59, 60, 60, 0, 1,
259
+ 0, 35, 36, 41, 1
260
+ };
261
+
262
+ static const char _esi_trans_actions_wi[] = {
263
+ 1, 3, 1, 1, 1, 1, 1, 1,
264
+ 1, 27, 1, 1, 1, 1, 9, 9,
265
+ 24, 1, 1, 9, 15, 18, 1, 1,
266
+ 1, 3, 21, 1, 1, 12, 1, 1,
267
+ 1, 1, 1, 1, 1, 27, 1, 1,
268
+ 1, 1, 9, 24, 1, 1, 21, 3,
269
+ 1, 1, 18, 1, 1, 1, 1, 1,
270
+ 1, 1, 1, 1, 27, 1, 1, 1,
271
+ 1, 9, 24, 1, 12, 1, 6, 30,
272
+ 34, 34, 43, 38, 38
273
+ };
86
274
 
87
- #line 88 "parser.c"
88
275
  static const int esi_start = 56;
89
276
  static const int esi_first_final = 56;
90
277
  static const int esi_error = -1;
91
278
 
92
279
  static const int esi_en_main = 56;
93
280
 
94
- #line 201 "parser.rl"
281
+ #line 167 "parser.rl"
95
282
 
96
283
  char *esi_strndup( const char *str, size_t len )
97
284
  {
@@ -110,29 +297,6 @@ ESIAttribute *esi_attribute_new( const char *name, size_t name_length, const cha
110
297
  return attr;
111
298
  }
112
299
 
113
- ESIAttribute *esi_attribute_copy( ESIAttribute *attribute )
114
- {
115
- ESIAttribute *head, *nattr;
116
- if( !attribute ){ return NULL; }
117
-
118
- // copy the first attribute
119
- nattr = esi_attribute_new( attribute->name, strlen( attribute->name ),
120
- attribute->value, strlen( attribute->value ) );
121
- // save a pointer for return
122
- head = nattr;
123
- // copy next attributes
124
- attribute = attribute->next;
125
- while( attribute ) {
126
- // set the next attribute
127
- nattr->next = esi_attribute_new( attribute->name, strlen( attribute->name ),
128
- attribute->value, strlen( attribute->value ) );
129
- // next attribute
130
- nattr = nattr->next;
131
- attribute = attribute->next;
132
- }
133
- return head;
134
- }
135
-
136
300
  void esi_attribute_free( ESIAttribute *attribute )
137
301
  {
138
302
  ESIAttribute *ptr;
@@ -186,11 +350,11 @@ int esi_parser_init( ESIParser *parser )
186
350
  {
187
351
  int cs;
188
352
 
189
- #line 190 "parser.c"
353
+ #line 354 "parser.c"
190
354
  {
191
355
  cs = esi_start;
192
356
  }
193
- #line 295 "parser.rl"
357
+ #line 238 "parser.rl"
194
358
  parser->prev_state = parser->cs = cs;
195
359
  return 0;
196
360
  }
@@ -227,10 +391,10 @@ int esi_parser_execute( ESIParser *parser, const char *data, size_t length )
227
391
  p = parser->overflow_data + parser->overflow_data_size;
228
392
 
229
393
  // in our new memory space mark will now be
230
- parser->mark = ( mark_offset >= 0 ) ? parser->overflow_data + mark_offset : NULL;
231
- parser->tag_text = ( tag_text_offset >= 0 ) ? parser->overflow_data + tag_text_offset : NULL;
232
- parser->attr_key = ( attr_key_offset >= 0 ) ? parser->overflow_data + attr_key_offset : NULL;
233
- parser->attr_value = ( attr_value_offset >= 0 ) ? parser->overflow_data + attr_value_offset : NULL;
394
+ parser->mark = ( mark_offset > 0 ) ? parser->overflow_data + mark_offset : NULL;
395
+ parser->tag_text = ( tag_text_offset > 0 ) ? parser->overflow_data + tag_text_offset : NULL;
396
+ parser->attr_key = ( attr_key_offset > 0 ) ? parser->overflow_data + attr_key_offset : NULL;
397
+ parser->attr_value = ( attr_value_offset > 0 ) ? parser->overflow_data + attr_value_offset : NULL;
234
398
 
235
399
  data = parser->overflow_data;
236
400
  parser->overflow_data_size = length = length + parser->overflow_data_size;
@@ -247,1107 +411,135 @@ int esi_parser_execute( ESIParser *parser, const char *data, size_t length )
247
411
  // debug_string( "data", data, length );
248
412
 
249
413
 
250
- #line 251 "parser.c"
414
+ #line 415 "parser.c"
251
415
  {
416
+ int _klen;
417
+ unsigned int _trans;
418
+ const char *_acts;
419
+ unsigned int _nacts;
420
+ const char *_keys;
421
+
252
422
  if ( p == pe )
253
423
  goto _out;
254
424
  _resume:
255
- switch ( cs ) {
256
- case 56:
257
- if ( (*p) == 60 )
258
- goto tr1;
259
- goto tr0;
260
- case 0:
261
- if ( (*p) == 60 )
262
- goto tr1;
263
- goto tr0;
264
- case 1:
265
- switch( (*p) ) {
266
- case 47: goto tr2;
267
- case 60: goto tr1;
268
- case 101: goto tr3;
269
- }
270
- goto tr0;
271
- case 2:
272
- switch( (*p) ) {
273
- case 60: goto tr1;
274
- case 101: goto tr4;
275
- }
276
- goto tr0;
277
- case 3:
278
- switch( (*p) ) {
279
- case 60: goto tr1;
280
- case 115: goto tr5;
281
- }
282
- goto tr0;
283
- case 4:
284
- switch( (*p) ) {
285
- case 60: goto tr1;
286
- case 105: goto tr6;
287
- }
288
- goto tr0;
289
- case 5:
290
- switch( (*p) ) {
291
- case 58: goto tr7;
292
- case 60: goto tr1;
293
- }
294
- goto tr0;
295
- case 6:
296
- if ( (*p) == 60 )
297
- goto tr1;
298
- if ( 97 <= (*p) && (*p) <= 122 )
299
- goto tr8;
300
- goto tr0;
301
- case 7:
302
- switch( (*p) ) {
303
- case 60: goto tr1;
304
- case 62: goto tr9;
305
- }
306
- if ( 97 <= (*p) && (*p) <= 122 )
307
- goto tr8;
308
- goto tr0;
309
- case 8:
310
- switch( (*p) ) {
311
- case 60: goto tr1;
312
- case 115: goto tr10;
313
- }
314
- goto tr0;
315
- case 9:
316
- switch( (*p) ) {
317
- case 60: goto tr1;
318
- case 105: goto tr11;
319
- }
320
- goto tr0;
321
- case 10:
322
- switch( (*p) ) {
323
- case 58: goto tr12;
324
- case 60: goto tr1;
325
- }
326
- goto tr0;
327
- case 11:
328
- if ( (*p) == 60 )
329
- goto tr1;
330
- if ( 97 <= (*p) && (*p) <= 122 )
331
- goto tr13;
332
- goto tr0;
333
- case 12:
334
- switch( (*p) ) {
335
- case 32: goto tr14;
336
- case 47: goto tr15;
337
- case 60: goto tr1;
338
- case 62: goto tr16;
339
- }
340
- if ( (*p) > 13 ) {
341
- if ( 97 <= (*p) && (*p) <= 122 )
342
- goto tr13;
343
- } else if ( (*p) >= 9 )
344
- goto tr14;
345
- goto tr0;
346
- case 13:
347
- switch( (*p) ) {
348
- case 32: goto tr17;
349
- case 45: goto tr18;
350
- case 47: goto tr19;
351
- case 60: goto tr1;
352
- case 62: goto tr20;
353
- case 95: goto tr18;
354
- }
355
- if ( (*p) < 65 ) {
356
- if ( 9 <= (*p) && (*p) <= 13 )
357
- goto tr17;
358
- } else if ( (*p) > 90 ) {
359
- if ( 97 <= (*p) && (*p) <= 122 )
360
- goto tr18;
361
- } else
362
- goto tr18;
363
- goto tr0;
364
- case 14:
365
- switch( (*p) ) {
366
- case 32: goto tr17;
367
- case 45: goto tr18;
368
- case 47: goto tr19;
369
- case 60: goto tr1;
370
- case 95: goto tr18;
371
- }
372
- if ( (*p) < 65 ) {
373
- if ( 9 <= (*p) && (*p) <= 13 )
374
- goto tr17;
375
- } else if ( (*p) > 90 ) {
376
- if ( 97 <= (*p) && (*p) <= 122 )
377
- goto tr18;
378
- } else
379
- goto tr18;
380
- goto tr0;
381
- case 15:
382
- switch( (*p) ) {
383
- case 45: goto tr18;
384
- case 60: goto tr1;
385
- case 61: goto tr21;
386
- case 95: goto tr18;
387
- }
388
- if ( (*p) < 65 ) {
389
- if ( 48 <= (*p) && (*p) <= 57 )
390
- goto tr18;
391
- } else if ( (*p) > 90 ) {
392
- if ( 97 <= (*p) && (*p) <= 122 )
393
- goto tr18;
394
- } else
395
- goto tr18;
396
- goto tr0;
397
- case 16:
398
- switch( (*p) ) {
399
- case 32: goto tr22;
400
- case 34: goto tr23;
401
- case 39: goto tr23;
402
- case 60: goto tr1;
403
- }
404
- if ( 9 <= (*p) && (*p) <= 13 )
405
- goto tr22;
406
- goto tr0;
407
- case 17:
408
- switch( (*p) ) {
409
- case 33: goto tr24;
410
- case 60: goto tr25;
411
- case 95: goto tr24;
412
- case 125: goto tr24;
413
- }
414
- if ( (*p) < 40 ) {
415
- if ( 35 <= (*p) && (*p) <= 38 )
416
- goto tr24;
417
- } else if ( (*p) > 90 ) {
418
- if ( 97 <= (*p) && (*p) <= 123 )
419
- goto tr24;
420
- } else
421
- goto tr24;
422
- goto tr0;
423
- case 18:
424
- switch( (*p) ) {
425
- case 34: goto tr26;
426
- case 39: goto tr26;
427
- case 60: goto tr25;
428
- case 95: goto tr24;
429
- case 125: goto tr24;
430
- }
431
- if ( (*p) > 90 ) {
432
- if ( 97 <= (*p) && (*p) <= 123 )
433
- goto tr24;
434
- } else if ( (*p) >= 33 )
435
- goto tr24;
436
- goto tr0;
437
- case 19:
438
- switch( (*p) ) {
439
- case 32: goto tr27;
440
- case 45: goto tr18;
441
- case 47: goto tr28;
442
- case 60: goto tr1;
443
- case 62: goto tr20;
444
- case 95: goto tr18;
445
- }
446
- if ( (*p) < 65 ) {
447
- if ( 9 <= (*p) && (*p) <= 13 )
448
- goto tr27;
449
- } else if ( (*p) > 90 ) {
450
- if ( 97 <= (*p) && (*p) <= 122 )
451
- goto tr18;
452
- } else
453
- goto tr18;
454
- goto tr0;
455
- case 20:
456
- switch( (*p) ) {
457
- case 32: goto tr27;
458
- case 45: goto tr18;
459
- case 47: goto tr28;
460
- case 60: goto tr1;
461
- case 95: goto tr18;
462
- }
463
- if ( (*p) < 65 ) {
464
- if ( 9 <= (*p) && (*p) <= 13 )
465
- goto tr27;
466
- } else if ( (*p) > 90 ) {
467
- if ( 97 <= (*p) && (*p) <= 122 )
468
- goto tr18;
469
- } else
470
- goto tr18;
471
- goto tr0;
472
- case 21:
473
- switch( (*p) ) {
474
- case 60: goto tr1;
475
- case 62: goto tr29;
476
- }
477
- goto tr0;
478
- case 57:
479
- if ( (*p) == 60 )
480
- goto tr71;
481
- goto tr70;
482
- case 22:
483
- switch( (*p) ) {
484
- case 34: goto tr26;
485
- case 39: goto tr26;
486
- case 47: goto tr30;
487
- case 60: goto tr25;
488
- case 95: goto tr24;
489
- case 101: goto tr31;
490
- case 125: goto tr24;
491
- }
492
- if ( (*p) > 90 ) {
493
- if ( 97 <= (*p) && (*p) <= 123 )
494
- goto tr24;
495
- } else if ( (*p) >= 33 )
496
- goto tr24;
497
- goto tr0;
498
- case 23:
499
- switch( (*p) ) {
500
- case 34: goto tr26;
501
- case 39: goto tr26;
502
- case 60: goto tr25;
503
- case 95: goto tr24;
504
- case 101: goto tr32;
505
- case 125: goto tr24;
506
- }
507
- if ( (*p) > 90 ) {
508
- if ( 97 <= (*p) && (*p) <= 123 )
509
- goto tr24;
510
- } else if ( (*p) >= 33 )
511
- goto tr24;
512
- goto tr0;
513
- case 24:
514
- switch( (*p) ) {
515
- case 34: goto tr26;
516
- case 39: goto tr26;
517
- case 60: goto tr25;
518
- case 95: goto tr24;
519
- case 115: goto tr33;
520
- case 125: goto tr24;
521
- }
522
- if ( (*p) > 90 ) {
523
- if ( 97 <= (*p) && (*p) <= 123 )
524
- goto tr24;
525
- } else if ( (*p) >= 33 )
526
- goto tr24;
527
- goto tr0;
528
- case 25:
529
- switch( (*p) ) {
530
- case 34: goto tr26;
531
- case 39: goto tr26;
532
- case 60: goto tr25;
533
- case 95: goto tr24;
534
- case 105: goto tr34;
535
- case 125: goto tr24;
536
- }
537
- if ( (*p) > 90 ) {
538
- if ( 97 <= (*p) && (*p) <= 123 )
539
- goto tr24;
540
- } else if ( (*p) >= 33 )
541
- goto tr24;
542
- goto tr0;
543
- case 26:
544
- switch( (*p) ) {
545
- case 34: goto tr26;
546
- case 39: goto tr26;
547
- case 58: goto tr35;
548
- case 60: goto tr25;
549
- case 95: goto tr24;
550
- case 125: goto tr24;
551
- }
552
- if ( (*p) > 90 ) {
553
- if ( 97 <= (*p) && (*p) <= 123 )
554
- goto tr24;
555
- } else if ( (*p) >= 33 )
556
- goto tr24;
557
- goto tr0;
558
- case 27:
559
- switch( (*p) ) {
560
- case 34: goto tr26;
561
- case 39: goto tr26;
562
- case 60: goto tr25;
563
- case 95: goto tr24;
564
- case 123: goto tr24;
565
- case 125: goto tr24;
566
- }
567
- if ( (*p) > 90 ) {
568
- if ( 97 <= (*p) && (*p) <= 122 )
569
- goto tr36;
570
- } else if ( (*p) >= 33 )
571
- goto tr24;
572
- goto tr0;
573
- case 28:
574
- switch( (*p) ) {
575
- case 34: goto tr26;
576
- case 39: goto tr26;
577
- case 60: goto tr25;
578
- case 62: goto tr37;
579
- case 95: goto tr24;
580
- case 123: goto tr24;
581
- case 125: goto tr24;
582
- }
583
- if ( (*p) > 90 ) {
584
- if ( 97 <= (*p) && (*p) <= 122 )
585
- goto tr36;
586
- } else if ( (*p) >= 33 )
587
- goto tr24;
588
- goto tr0;
589
- case 29:
590
- switch( (*p) ) {
591
- case 34: goto tr26;
592
- case 39: goto tr26;
593
- case 60: goto tr25;
594
- case 95: goto tr24;
595
- case 115: goto tr38;
596
- case 125: goto tr24;
597
- }
598
- if ( (*p) > 90 ) {
599
- if ( 97 <= (*p) && (*p) <= 123 )
600
- goto tr24;
601
- } else if ( (*p) >= 33 )
602
- goto tr24;
603
- goto tr0;
604
- case 30:
605
- switch( (*p) ) {
606
- case 34: goto tr26;
607
- case 39: goto tr26;
608
- case 60: goto tr25;
609
- case 95: goto tr24;
610
- case 105: goto tr39;
611
- case 125: goto tr24;
612
- }
613
- if ( (*p) > 90 ) {
614
- if ( 97 <= (*p) && (*p) <= 123 )
615
- goto tr24;
616
- } else if ( (*p) >= 33 )
617
- goto tr24;
618
- goto tr0;
619
- case 31:
620
- switch( (*p) ) {
621
- case 34: goto tr26;
622
- case 39: goto tr26;
623
- case 58: goto tr40;
624
- case 60: goto tr25;
625
- case 95: goto tr24;
626
- case 125: goto tr24;
627
- }
628
- if ( (*p) > 90 ) {
629
- if ( 97 <= (*p) && (*p) <= 123 )
630
- goto tr24;
631
- } else if ( (*p) >= 33 )
632
- goto tr24;
633
- goto tr0;
634
- case 32:
635
- switch( (*p) ) {
636
- case 34: goto tr26;
637
- case 39: goto tr26;
638
- case 60: goto tr25;
639
- case 95: goto tr24;
640
- case 123: goto tr24;
641
- case 125: goto tr24;
642
- }
643
- if ( (*p) > 90 ) {
644
- if ( 97 <= (*p) && (*p) <= 122 )
645
- goto tr41;
646
- } else if ( (*p) >= 33 )
647
- goto tr24;
648
- goto tr0;
649
- case 33:
650
- switch( (*p) ) {
651
- case 32: goto tr14;
652
- case 34: goto tr26;
653
- case 39: goto tr26;
654
- case 47: goto tr42;
655
- case 60: goto tr25;
656
- case 62: goto tr43;
657
- case 95: goto tr24;
658
- case 123: goto tr24;
659
- case 125: goto tr24;
660
- }
661
- if ( (*p) < 33 ) {
662
- if ( 9 <= (*p) && (*p) <= 13 )
663
- goto tr14;
664
- } else if ( (*p) > 90 ) {
665
- if ( 97 <= (*p) && (*p) <= 122 )
666
- goto tr41;
667
- } else
668
- goto tr24;
669
- goto tr0;
670
- case 34:
671
- switch( (*p) ) {
672
- case 34: goto tr26;
673
- case 39: goto tr26;
674
- case 60: goto tr25;
675
- case 62: goto tr44;
676
- case 95: goto tr24;
677
- case 125: goto tr24;
678
- }
679
- if ( (*p) > 90 ) {
680
- if ( 97 <= (*p) && (*p) <= 123 )
681
- goto tr24;
682
- } else if ( (*p) >= 33 )
683
- goto tr24;
684
- goto tr0;
685
- case 58:
686
- switch( (*p) ) {
687
- case 34: goto tr74;
688
- case 39: goto tr74;
689
- case 60: goto tr75;
690
- case 95: goto tr73;
691
- case 125: goto tr73;
692
- }
693
- if ( (*p) > 90 ) {
694
- if ( 97 <= (*p) && (*p) <= 123 )
695
- goto tr73;
696
- } else if ( (*p) >= 33 )
697
- goto tr73;
698
- goto tr72;
699
- case 35:
700
- switch( (*p) ) {
701
- case 34: goto tr46;
702
- case 39: goto tr46;
703
- case 60: goto tr47;
704
- case 95: goto tr45;
705
- case 125: goto tr45;
706
- }
707
- if ( (*p) > 90 ) {
708
- if ( 97 <= (*p) && (*p) <= 123 )
709
- goto tr45;
710
- } else if ( (*p) >= 33 )
711
- goto tr45;
712
- goto tr0;
713
- case 36:
714
- switch( (*p) ) {
715
- case 32: goto tr48;
716
- case 45: goto tr49;
717
- case 47: goto tr28;
718
- case 60: goto tr1;
719
- case 62: goto tr20;
720
- case 95: goto tr49;
721
- }
722
- if ( (*p) < 65 ) {
723
- if ( 9 <= (*p) && (*p) <= 13 )
724
- goto tr48;
725
- } else if ( (*p) > 90 ) {
726
- if ( 97 <= (*p) && (*p) <= 122 )
727
- goto tr49;
728
- } else
729
- goto tr49;
730
- goto tr0;
731
- case 37:
732
- switch( (*p) ) {
733
- case 32: goto tr48;
734
- case 45: goto tr49;
735
- case 47: goto tr28;
736
- case 60: goto tr1;
737
- case 95: goto tr49;
738
- }
739
- if ( (*p) < 65 ) {
740
- if ( 9 <= (*p) && (*p) <= 13 )
741
- goto tr48;
742
- } else if ( (*p) > 90 ) {
743
- if ( 97 <= (*p) && (*p) <= 122 )
744
- goto tr49;
745
- } else
746
- goto tr49;
747
- goto tr0;
748
- case 38:
749
- switch( (*p) ) {
750
- case 45: goto tr49;
751
- case 60: goto tr1;
752
- case 61: goto tr50;
753
- case 95: goto tr49;
754
- }
755
- if ( (*p) < 65 ) {
756
- if ( 48 <= (*p) && (*p) <= 57 )
757
- goto tr49;
758
- } else if ( (*p) > 90 ) {
759
- if ( 97 <= (*p) && (*p) <= 122 )
760
- goto tr49;
761
- } else
762
- goto tr49;
763
- goto tr0;
764
- case 39:
765
- switch( (*p) ) {
766
- case 32: goto tr51;
767
- case 34: goto tr52;
768
- case 39: goto tr52;
769
- case 60: goto tr1;
770
- }
771
- if ( 9 <= (*p) && (*p) <= 13 )
772
- goto tr51;
773
- goto tr0;
774
- case 40:
775
- switch( (*p) ) {
776
- case 33: goto tr45;
777
- case 60: goto tr47;
778
- case 95: goto tr45;
779
- case 125: goto tr45;
780
- }
781
- if ( (*p) < 40 ) {
782
- if ( 35 <= (*p) && (*p) <= 38 )
783
- goto tr45;
784
- } else if ( (*p) > 90 ) {
785
- if ( 97 <= (*p) && (*p) <= 123 )
786
- goto tr45;
787
- } else
788
- goto tr45;
789
- goto tr0;
790
- case 41:
791
- switch( (*p) ) {
792
- case 34: goto tr46;
793
- case 39: goto tr46;
794
- case 47: goto tr53;
795
- case 60: goto tr47;
796
- case 95: goto tr45;
797
- case 101: goto tr54;
798
- case 125: goto tr45;
799
- }
800
- if ( (*p) > 90 ) {
801
- if ( 97 <= (*p) && (*p) <= 123 )
802
- goto tr45;
803
- } else if ( (*p) >= 33 )
804
- goto tr45;
805
- goto tr0;
806
- case 42:
807
- switch( (*p) ) {
808
- case 34: goto tr46;
809
- case 39: goto tr46;
810
- case 60: goto tr47;
811
- case 95: goto tr45;
812
- case 101: goto tr55;
813
- case 125: goto tr45;
814
- }
815
- if ( (*p) > 90 ) {
816
- if ( 97 <= (*p) && (*p) <= 123 )
817
- goto tr45;
818
- } else if ( (*p) >= 33 )
819
- goto tr45;
820
- goto tr0;
821
- case 43:
822
- switch( (*p) ) {
823
- case 34: goto tr46;
824
- case 39: goto tr46;
825
- case 60: goto tr47;
826
- case 95: goto tr45;
827
- case 115: goto tr56;
828
- case 125: goto tr45;
829
- }
830
- if ( (*p) > 90 ) {
831
- if ( 97 <= (*p) && (*p) <= 123 )
832
- goto tr45;
833
- } else if ( (*p) >= 33 )
834
- goto tr45;
835
- goto tr0;
836
- case 44:
837
- switch( (*p) ) {
838
- case 34: goto tr46;
839
- case 39: goto tr46;
840
- case 60: goto tr47;
841
- case 95: goto tr45;
842
- case 105: goto tr57;
843
- case 125: goto tr45;
844
- }
845
- if ( (*p) > 90 ) {
846
- if ( 97 <= (*p) && (*p) <= 123 )
847
- goto tr45;
848
- } else if ( (*p) >= 33 )
849
- goto tr45;
850
- goto tr0;
851
- case 45:
852
- switch( (*p) ) {
853
- case 34: goto tr46;
854
- case 39: goto tr46;
855
- case 58: goto tr58;
856
- case 60: goto tr47;
857
- case 95: goto tr45;
858
- case 125: goto tr45;
859
- }
860
- if ( (*p) > 90 ) {
861
- if ( 97 <= (*p) && (*p) <= 123 )
862
- goto tr45;
863
- } else if ( (*p) >= 33 )
864
- goto tr45;
865
- goto tr0;
866
- case 46:
867
- switch( (*p) ) {
868
- case 34: goto tr46;
869
- case 39: goto tr46;
870
- case 60: goto tr47;
871
- case 95: goto tr45;
872
- case 123: goto tr45;
873
- case 125: goto tr45;
874
- }
875
- if ( (*p) > 90 ) {
876
- if ( 97 <= (*p) && (*p) <= 122 )
877
- goto tr59;
878
- } else if ( (*p) >= 33 )
879
- goto tr45;
880
- goto tr0;
881
- case 47:
882
- switch( (*p) ) {
883
- case 34: goto tr46;
884
- case 39: goto tr46;
885
- case 60: goto tr47;
886
- case 62: goto tr60;
887
- case 95: goto tr45;
888
- case 123: goto tr45;
889
- case 125: goto tr45;
890
- }
891
- if ( (*p) > 90 ) {
892
- if ( 97 <= (*p) && (*p) <= 122 )
893
- goto tr59;
894
- } else if ( (*p) >= 33 )
895
- goto tr45;
896
- goto tr0;
897
- case 48:
898
- switch( (*p) ) {
899
- case 34: goto tr46;
900
- case 39: goto tr46;
901
- case 60: goto tr47;
902
- case 95: goto tr45;
903
- case 115: goto tr61;
904
- case 125: goto tr45;
905
- }
906
- if ( (*p) > 90 ) {
907
- if ( 97 <= (*p) && (*p) <= 123 )
908
- goto tr45;
909
- } else if ( (*p) >= 33 )
910
- goto tr45;
911
- goto tr0;
912
- case 49:
913
- switch( (*p) ) {
914
- case 34: goto tr46;
915
- case 39: goto tr46;
916
- case 60: goto tr47;
917
- case 95: goto tr45;
918
- case 105: goto tr62;
919
- case 125: goto tr45;
920
- }
921
- if ( (*p) > 90 ) {
922
- if ( 97 <= (*p) && (*p) <= 123 )
923
- goto tr45;
924
- } else if ( (*p) >= 33 )
925
- goto tr45;
926
- goto tr0;
927
- case 50:
928
- switch( (*p) ) {
929
- case 34: goto tr46;
930
- case 39: goto tr46;
931
- case 58: goto tr63;
932
- case 60: goto tr47;
933
- case 95: goto tr45;
934
- case 125: goto tr45;
935
- }
936
- if ( (*p) > 90 ) {
937
- if ( 97 <= (*p) && (*p) <= 123 )
938
- goto tr45;
939
- } else if ( (*p) >= 33 )
940
- goto tr45;
941
- goto tr0;
942
- case 51:
943
- switch( (*p) ) {
944
- case 34: goto tr46;
945
- case 39: goto tr46;
946
- case 60: goto tr47;
947
- case 95: goto tr45;
948
- case 123: goto tr45;
949
- case 125: goto tr45;
950
- }
951
- if ( (*p) > 90 ) {
952
- if ( 97 <= (*p) && (*p) <= 122 )
953
- goto tr64;
954
- } else if ( (*p) >= 33 )
955
- goto tr45;
956
- goto tr0;
957
- case 52:
958
- switch( (*p) ) {
959
- case 32: goto tr14;
960
- case 34: goto tr46;
961
- case 39: goto tr46;
962
- case 47: goto tr65;
963
- case 60: goto tr47;
964
- case 62: goto tr66;
965
- case 95: goto tr45;
966
- case 123: goto tr45;
967
- case 125: goto tr45;
968
- }
969
- if ( (*p) < 33 ) {
970
- if ( 9 <= (*p) && (*p) <= 13 )
971
- goto tr14;
972
- } else if ( (*p) > 90 ) {
973
- if ( 97 <= (*p) && (*p) <= 122 )
974
- goto tr64;
975
- } else
976
- goto tr45;
977
- goto tr0;
978
- case 53:
979
- switch( (*p) ) {
980
- case 34: goto tr46;
981
- case 39: goto tr46;
982
- case 60: goto tr47;
983
- case 62: goto tr67;
984
- case 95: goto tr45;
985
- case 125: goto tr45;
986
- }
987
- if ( (*p) > 90 ) {
988
- if ( 97 <= (*p) && (*p) <= 123 )
989
- goto tr45;
990
- } else if ( (*p) >= 33 )
991
- goto tr45;
992
- goto tr0;
993
- case 59:
994
- switch( (*p) ) {
995
- case 34: goto tr74;
996
- case 39: goto tr74;
997
- case 60: goto tr75;
998
- case 95: goto tr73;
999
- case 125: goto tr73;
1000
- }
1001
- if ( (*p) > 90 ) {
1002
- if ( 97 <= (*p) && (*p) <= 123 )
1003
- goto tr73;
1004
- } else if ( (*p) >= 33 )
1005
- goto tr73;
1006
- goto tr72;
1007
- case 54:
1008
- switch( (*p) ) {
1009
- case 60: goto tr1;
1010
- case 62: goto tr68;
1011
- }
1012
- goto tr0;
1013
- case 60:
1014
- if ( (*p) == 60 )
1015
- goto tr76;
1016
- goto tr72;
1017
- case 55:
1018
- switch( (*p) ) {
1019
- case 60: goto tr1;
1020
- case 62: goto tr69;
1021
- }
1022
- goto tr0;
1023
- }
1024
-
1025
- tr0: cs = 0; goto f0;
1026
- tr9: cs = 0; goto f2;
1027
- tr16: cs = 0; goto f4;
1028
- tr70: cs = 0; goto f9;
1029
- tr72: cs = 0; goto f11;
1030
- tr1: cs = 1; goto f1;
1031
- tr71: cs = 1; goto f10;
1032
- tr76: cs = 1; goto f13;
1033
- tr2: cs = 2; goto f0;
1034
- tr4: cs = 3; goto f0;
1035
- tr5: cs = 4; goto f0;
1036
- tr6: cs = 5; goto f0;
1037
- tr7: cs = 6; goto f0;
1038
- tr8: cs = 7; goto f0;
1039
- tr3: cs = 8; goto f0;
1040
- tr10: cs = 9; goto f0;
1041
- tr11: cs = 10; goto f0;
1042
- tr12: cs = 11; goto f0;
1043
- tr13: cs = 12; goto f0;
1044
- tr14: cs = 13; goto f3;
1045
- tr17: cs = 14; goto f0;
1046
- tr18: cs = 15; goto f0;
1047
- tr22: cs = 16; goto f0;
1048
- tr21: cs = 16; goto f6;
1049
- tr23: cs = 17; goto f0;
1050
- tr24: cs = 18; goto f0;
1051
- tr37: cs = 18; goto f2;
1052
- tr43: cs = 18; goto f4;
1053
- tr26: cs = 19; goto f7;
1054
- tr27: cs = 20; goto f0;
1055
- tr28: cs = 21; goto f0;
1056
- tr25: cs = 22; goto f1;
1057
- tr30: cs = 23; goto f0;
1058
- tr32: cs = 24; goto f0;
1059
- tr33: cs = 25; goto f0;
1060
- tr34: cs = 26; goto f0;
1061
- tr35: cs = 27; goto f0;
1062
- tr36: cs = 28; goto f0;
1063
- tr31: cs = 29; goto f0;
1064
- tr38: cs = 30; goto f0;
1065
- tr39: cs = 31; goto f0;
1066
- tr40: cs = 32; goto f0;
1067
- tr41: cs = 33; goto f0;
1068
- tr42: cs = 34; goto f3;
1069
- tr45: cs = 35; goto f0;
1070
- tr60: cs = 35; goto f2;
1071
- tr66: cs = 35; goto f4;
1072
- tr73: cs = 35; goto f11;
1073
- tr46: cs = 36; goto f7;
1074
- tr74: cs = 36; goto f12;
1075
- tr48: cs = 37; goto f0;
1076
- tr49: cs = 38; goto f0;
1077
- tr51: cs = 39; goto f0;
1078
- tr50: cs = 39; goto f6;
1079
- tr52: cs = 40; goto f0;
1080
- tr47: cs = 41; goto f1;
1081
- tr75: cs = 41; goto f13;
1082
- tr53: cs = 42; goto f0;
1083
- tr55: cs = 43; goto f0;
1084
- tr56: cs = 44; goto f0;
1085
- tr57: cs = 45; goto f0;
1086
- tr58: cs = 46; goto f0;
1087
- tr59: cs = 47; goto f0;
1088
- tr54: cs = 48; goto f0;
1089
- tr61: cs = 49; goto f0;
1090
- tr62: cs = 50; goto f0;
1091
- tr63: cs = 51; goto f0;
1092
- tr64: cs = 52; goto f0;
1093
- tr65: cs = 53; goto f3;
1094
- tr19: cs = 54; goto f3;
1095
- tr15: cs = 55; goto f3;
1096
- tr20: cs = 57; goto f5;
1097
- tr29: cs = 57; goto f8;
1098
- tr44: cs = 58; goto f0;
1099
- tr67: cs = 59; goto f0;
1100
- tr69: cs = 60; goto f0;
1101
- tr68: cs = 60; goto f8;
1102
-
1103
- f0:
1104
- #line 175 "parser.rl"
1105
- {
1106
- switch( cs ){
1107
- case 0:
1108
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1109
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1110
- // stream echobuffer
1111
- esi_parser_echo_buffer( parser );
1112
- }
1113
- // printf( "[%d: %c]", cs, *p );
1114
- // stream the current character
1115
- esi_parser_echo_char( parser, *p );
1116
- }
1117
- // clear the echobuffer
1118
- esi_parser_echobuffer_clear( parser );
1119
- break;
1120
- default:
1121
- // append characters to echobuffer
1122
- esi_parser_concat_to_echobuffer( parser, *p );
1123
- }
1124
- parser->prev_state = cs;
1125
- }
1126
- goto _again;
1127
- f1:
1128
- #line 175 "parser.rl"
1129
- {
1130
- switch( cs ){
1131
- case 0:
1132
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1133
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1134
- // stream echobuffer
1135
- esi_parser_echo_buffer( parser );
1136
- }
1137
- // printf( "[%d: %c]", cs, *p );
1138
- // stream the current character
1139
- esi_parser_echo_char( parser, *p );
1140
- }
1141
- // clear the echobuffer
1142
- esi_parser_echobuffer_clear( parser );
1143
- break;
1144
- default:
1145
- // append characters to echobuffer
1146
- esi_parser_concat_to_echobuffer( parser, *p );
1147
- }
1148
- parser->prev_state = cs;
1149
- }
1150
- #line 85 "parser.rl"
425
+ _keys = _esi_trans_keys + _esi_key_offsets[cs];
426
+ _trans = _esi_index_offsets[cs];
427
+
428
+ _klen = _esi_single_lengths[cs];
429
+ if ( _klen > 0 ) {
430
+ const char *_lower = _keys;
431
+ const char *_mid;
432
+ const char *_upper = _keys + _klen - 1;
433
+ while (1) {
434
+ if ( _upper < _lower )
435
+ break;
436
+
437
+ _mid = _lower + ((_upper-_lower) >> 1);
438
+ if ( (*p) < *_mid )
439
+ _upper = _mid - 1;
440
+ else if ( (*p) > *_mid )
441
+ _lower = _mid + 1;
442
+ else {
443
+ _trans += (_mid - _keys);
444
+ goto _match;
445
+ }
446
+ }
447
+ _keys += _klen;
448
+ _trans += _klen;
449
+ }
450
+
451
+ _klen = _esi_range_lengths[cs];
452
+ if ( _klen > 0 ) {
453
+ const char *_lower = _keys;
454
+ const char *_mid;
455
+ const char *_upper = _keys + (_klen<<1) - 2;
456
+ while (1) {
457
+ if ( _upper < _lower )
458
+ break;
459
+
460
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
461
+ if ( (*p) < _mid[0] )
462
+ _upper = _mid - 2;
463
+ else if ( (*p) > _mid[1] )
464
+ _lower = _mid + 2;
465
+ else {
466
+ _trans += ((_mid - _keys)>>1);
467
+ goto _match;
468
+ }
469
+ }
470
+ _trans += _klen;
471
+ }
472
+
473
+ _match:
474
+ _trans = _esi_indicies[_trans];
475
+ cs = _esi_trans_targs_wi[_trans];
476
+
477
+ if ( _esi_trans_actions_wi[_trans] == 0 )
478
+ goto _again;
479
+
480
+ _acts = _esi_actions + _esi_trans_actions_wi[_trans];
481
+ _nacts = (unsigned int) *_acts++;
482
+ while ( _nacts-- > 0 )
483
+ {
484
+ switch ( *_acts++ )
485
+ {
486
+ case 0:
487
+ #line 71 "parser.rl"
1151
488
  {
1152
489
  parser->mark = p;
1153
- //debug_string( "begin", p, 1 );
490
+ // printf( "begin\n" );
1154
491
  }
1155
- goto _again;
1156
- f9:
1157
- #line 175 "parser.rl"
1158
- {
1159
- switch( cs ){
1160
- case 0:
1161
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1162
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1163
- // stream echobuffer
1164
- esi_parser_echo_buffer( parser );
1165
- }
1166
- // printf( "[%d: %c]", cs, *p );
1167
- // stream the current character
1168
- esi_parser_echo_char( parser, *p );
1169
- }
1170
- // clear the echobuffer
1171
- esi_parser_echobuffer_clear( parser );
1172
- break;
1173
- default:
1174
- // append characters to echobuffer
1175
- esi_parser_concat_to_echobuffer( parser, *p );
1176
- }
1177
- parser->prev_state = cs;
1178
- }
1179
- #line 89 "parser.rl"
492
+ break;
493
+ case 1:
494
+ #line 75 "parser.rl"
1180
495
  {
1181
496
  // printf( "finish\n" );
1182
497
  }
1183
- goto _again;
1184
- f3:
1185
- #line 175 "parser.rl"
1186
- {
1187
- switch( cs ){
1188
- case 0:
1189
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1190
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1191
- // stream echobuffer
1192
- esi_parser_echo_buffer( parser );
1193
- }
1194
- // printf( "[%d: %c]", cs, *p );
1195
- // stream the current character
1196
- esi_parser_echo_char( parser, *p );
1197
- }
1198
- // clear the echobuffer
1199
- esi_parser_echobuffer_clear( parser );
1200
- break;
1201
- default:
1202
- // append characters to echobuffer
1203
- esi_parser_concat_to_echobuffer( parser, *p );
1204
- }
1205
- parser->prev_state = cs;
1206
- }
1207
- #line 94 "parser.rl"
498
+ break;
499
+ case 2:
500
+ #line 80 "parser.rl"
1208
501
  {
1209
502
  parser->tag_text = parser->mark+1;
1210
503
  parser->tag_text_length = p - (parser->mark+1);
1211
504
  // debug_string( "have esi start", parser->tag_text, parser->tag_text_length );
1212
505
  parser->mark = p;
1213
- //debug_string( "see_start_tag", p, 1 );
1214
- }
1215
- goto _again;
1216
- f8:
1217
- #line 175 "parser.rl"
1218
- {
1219
- switch( cs ){
1220
- case 0:
1221
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1222
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1223
- // stream echobuffer
1224
- esi_parser_echo_buffer( parser );
1225
- }
1226
- // printf( "[%d: %c]", cs, *p );
1227
- // stream the current character
1228
- esi_parser_echo_char( parser, *p );
1229
- }
1230
- // clear the echobuffer
1231
- esi_parser_echobuffer_clear( parser );
1232
- break;
1233
- default:
1234
- // append characters to echobuffer
1235
- esi_parser_concat_to_echobuffer( parser, *p );
1236
- }
1237
- parser->prev_state = cs;
1238
506
  }
1239
- #line 102 "parser.rl"
507
+ break;
508
+ case 3:
509
+ #line 87 "parser.rl"
1240
510
  {
1241
- //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1242
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1243
- //debug_string( "see_end_tag: after parsed esi tag", parser->tag_text, parser->tag_text_length );
511
+ // debug_string( "parsed esi tag", parser->tag_text, parser->tag_text_length );
1244
512
  parser->start_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->attributes, parser->user_data );
1245
- //debug_string( "see_end_tag: after start parsed esi tag", parser->tag_text, parser->tag_text_length );
1246
513
  parser->end_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->user_data );
1247
- //debug_string( "see_end_tag: after end parsed esi tag", parser->tag_text, parser->tag_text_length );
1248
514
  parser->tag_text = NULL;
1249
515
  parser->tag_text_length = 0;
1250
- parser->mark = p;
1251
- //debug_string( "see_end_tag", p, 1 );
1252
516
  }
1253
- goto _again;
1254
- f5:
1255
- #line 175 "parser.rl"
1256
- {
1257
- switch( cs ){
1258
- case 0:
1259
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1260
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1261
- // stream echobuffer
1262
- esi_parser_echo_buffer( parser );
1263
- }
1264
- // printf( "[%d: %c]", cs, *p );
1265
- // stream the current character
1266
- esi_parser_echo_char( parser, *p );
1267
- }
1268
- // clear the echobuffer
1269
- esi_parser_echobuffer_clear( parser );
1270
- break;
1271
- default:
1272
- // append characters to echobuffer
1273
- esi_parser_concat_to_echobuffer( parser, *p );
1274
- }
1275
- parser->prev_state = cs;
1276
- }
1277
- #line 116 "parser.rl"
517
+ break;
518
+ case 4:
519
+ #line 95 "parser.rl"
1278
520
  {
1279
521
  // debug_string( "parsed esi tag", parser->tag_text, parser->tag_text_length );
1280
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1281
522
  parser->start_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->attributes, parser->user_data );
1282
523
  parser->tag_text = NULL;
1283
524
  parser->tag_text_length = 0;
1284
525
  }
1285
- goto _again;
1286
- f6:
1287
- #line 175 "parser.rl"
1288
- {
1289
- switch( cs ){
1290
- case 0:
1291
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1292
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1293
- // stream echobuffer
1294
- esi_parser_echo_buffer( parser );
1295
- }
1296
- // printf( "[%d: %c]", cs, *p );
1297
- // stream the current character
1298
- esi_parser_echo_char( parser, *p );
1299
- }
1300
- // clear the echobuffer
1301
- esi_parser_echobuffer_clear( parser );
1302
- break;
1303
- default:
1304
- // append characters to echobuffer
1305
- esi_parser_concat_to_echobuffer( parser, *p );
1306
- }
1307
- parser->prev_state = cs;
1308
- }
1309
- #line 124 "parser.rl"
526
+ break;
527
+ case 5:
528
+ #line 102 "parser.rl"
1310
529
  {
1311
530
  parser->attr_key = parser->mark;
1312
531
  parser->attr_key_length = p - parser->mark;
1313
532
  parser->mark = p;
1314
- ltrim_pointer( &(parser->attr_key), p, &(parser->attr_key_length) );
1315
533
  // debug_string( "\tattribute key", parser->attr_key, parser->attr_key_length );
1316
- //debug_string( "see_attribute_key", p, 1 );
1317
534
  }
1318
- goto _again;
1319
- f7:
1320
- #line 175 "parser.rl"
1321
- {
1322
- switch( cs ){
1323
- case 0:
1324
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1325
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1326
- // stream echobuffer
1327
- esi_parser_echo_buffer( parser );
1328
- }
1329
- // printf( "[%d: %c]", cs, *p );
1330
- // stream the current character
1331
- esi_parser_echo_char( parser, *p );
1332
- }
1333
- // clear the echobuffer
1334
- esi_parser_echobuffer_clear( parser );
1335
- break;
1336
- default:
1337
- // append characters to echobuffer
1338
- esi_parser_concat_to_echobuffer( parser, *p );
1339
- }
1340
- parser->prev_state = cs;
1341
- }
1342
- #line 133 "parser.rl"
535
+ break;
536
+ case 6:
537
+ #line 109 "parser.rl"
1343
538
  {
1344
539
  ESIAttribute *attr;
1345
540
  parser->attr_value = parser->mark;
1346
541
  parser->attr_value_length = p - parser->mark;
1347
542
  parser->mark = p;
1348
-
1349
- ltrim_pointer( &(parser->attr_value), p, &(parser->attr_value_length) );
1350
-
1351
543
  // allocate a new attribute
1352
544
  attr = esi_attribute_new( parser->attr_key, parser->attr_key_length,
1353
545
  parser->attr_value, parser->attr_value_length );
@@ -1359,201 +551,28 @@ f7:
1359
551
  parser->last = parser->attributes = attr;
1360
552
  }
1361
553
  // debug_string( "\tattribute value", parser->attr_value, parser->attr_value_length );
1362
- //debug_string( "see_attribute_value", p, 1 );
1363
- }
1364
- goto _again;
1365
- f4:
1366
- #line 175 "parser.rl"
1367
- {
1368
- switch( cs ){
1369
- case 0:
1370
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1371
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1372
- // stream echobuffer
1373
- esi_parser_echo_buffer( parser );
1374
- }
1375
- // printf( "[%d: %c]", cs, *p );
1376
- // stream the current character
1377
- esi_parser_echo_char( parser, *p );
1378
- }
1379
- // clear the echobuffer
1380
- esi_parser_echobuffer_clear( parser );
1381
- break;
1382
- default:
1383
- // append characters to echobuffer
1384
- esi_parser_concat_to_echobuffer( parser, *p );
1385
- }
1386
- parser->prev_state = cs;
1387
554
  }
1388
- #line 155 "parser.rl"
555
+ break;
556
+ case 7:
557
+ #line 127 "parser.rl"
1389
558
  {
1390
559
  parser->tag_text = parser->mark;
1391
560
  parser->tag_text_length = p - parser->mark;
1392
561
  parser->mark = p;
1393
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1394
562
  parser->start_tag_handler( data, parser->tag_text, parser->tag_text_length, NULL, parser->user_data );
1395
- //debug_string( "block_start_tag", p, 1 );
1396
563
  }
1397
- goto _again;
1398
- f2:
1399
- #line 175 "parser.rl"
1400
- {
1401
- switch( cs ){
1402
- case 0:
1403
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1404
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1405
- // stream echobuffer
1406
- esi_parser_echo_buffer( parser );
1407
- }
1408
- // printf( "[%d: %c]", cs, *p );
1409
- // stream the current character
1410
- esi_parser_echo_char( parser, *p );
1411
- }
1412
- // clear the echobuffer
1413
- esi_parser_echobuffer_clear( parser );
1414
- break;
1415
- default:
1416
- // append characters to echobuffer
1417
- esi_parser_concat_to_echobuffer( parser, *p );
1418
- }
1419
- parser->prev_state = cs;
1420
- }
1421
- #line 164 "parser.rl"
564
+ break;
565
+ case 8:
566
+ #line 134 "parser.rl"
1422
567
  {
1423
568
  parser->tag_text = parser->mark+2;
1424
569
  parser->tag_text_length = p - (parser->mark+2);
1425
- //printf( "mark: [%s], p: [%s], length: %d\n", parser->mark, p, parser->tag_text_length );
1426
- parser->mark = p;
1427
- //debug_string( "block_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1428
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1429
- //debug_string( "block_end_tag: after parsed esi tag", parser->tag_text, parser->tag_text_length );
1430
- parser->end_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->user_data );
1431
- }
1432
- goto _again;
1433
- f10:
1434
- #line 175 "parser.rl"
1435
- {
1436
- switch( cs ){
1437
- case 0:
1438
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1439
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1440
- // stream echobuffer
1441
- esi_parser_echo_buffer( parser );
1442
- }
1443
- // printf( "[%d: %c]", cs, *p );
1444
- // stream the current character
1445
- esi_parser_echo_char( parser, *p );
1446
- }
1447
- // clear the echobuffer
1448
- esi_parser_echobuffer_clear( parser );
1449
- break;
1450
- default:
1451
- // append characters to echobuffer
1452
- esi_parser_concat_to_echobuffer( parser, *p );
1453
- }
1454
- parser->prev_state = cs;
1455
- }
1456
- #line 85 "parser.rl"
1457
- {
1458
- parser->mark = p;
1459
- //debug_string( "begin", p, 1 );
1460
- }
1461
- #line 89 "parser.rl"
1462
- {
1463
- // printf( "finish\n" );
1464
- }
1465
- goto _again;
1466
- f11:
1467
- #line 175 "parser.rl"
1468
- {
1469
- switch( cs ){
1470
- case 0:
1471
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1472
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1473
- // stream echobuffer
1474
- esi_parser_echo_buffer( parser );
1475
- }
1476
- // printf( "[%d: %c]", cs, *p );
1477
- // stream the current character
1478
- esi_parser_echo_char( parser, *p );
1479
- }
1480
- // clear the echobuffer
1481
- esi_parser_echobuffer_clear( parser );
1482
- break;
1483
- default:
1484
- // append characters to echobuffer
1485
- esi_parser_concat_to_echobuffer( parser, *p );
1486
- }
1487
- parser->prev_state = cs;
1488
- }
1489
- #line 102 "parser.rl"
1490
- {
1491
- //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1492
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1493
- //debug_string( "see_end_tag: after parsed esi tag", parser->tag_text, parser->tag_text_length );
1494
- parser->start_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->attributes, parser->user_data );
1495
- //debug_string( "see_end_tag: after start parsed esi tag", parser->tag_text, parser->tag_text_length );
1496
- parser->end_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->user_data );
1497
- //debug_string( "see_end_tag: after end parsed esi tag", parser->tag_text, parser->tag_text_length );
1498
- parser->tag_text = NULL;
1499
- parser->tag_text_length = 0;
1500
- parser->mark = p;
1501
- //debug_string( "see_end_tag", p, 1 );
1502
- }
1503
- #line 89 "parser.rl"
1504
- {
1505
- // printf( "finish\n" );
1506
- }
1507
- goto _again;
1508
- f13:
1509
- #line 175 "parser.rl"
1510
- {
1511
- switch( cs ){
1512
- case 0:
1513
- if( parser->prev_state != 12 && parser->prev_state != 7 ){
1514
- if( parser->echobuffer && (parser->prev_state != (esi_en_main +1)) && parser->prev_state != 60 ){
1515
- // stream echobuffer
1516
- esi_parser_echo_buffer( parser );
1517
- }
1518
- // printf( "[%d: %c]", cs, *p );
1519
- // stream the current character
1520
- esi_parser_echo_char( parser, *p );
1521
- }
1522
- // clear the echobuffer
1523
- esi_parser_echobuffer_clear( parser );
1524
- break;
1525
- default:
1526
- // append characters to echobuffer
1527
- esi_parser_concat_to_echobuffer( parser, *p );
1528
- }
1529
- parser->prev_state = cs;
1530
- }
1531
- #line 85 "parser.rl"
1532
- {
1533
570
  parser->mark = p;
1534
- //debug_string( "begin", p, 1 );
1535
- }
1536
- #line 102 "parser.rl"
1537
- {
1538
- //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1539
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1540
- //debug_string( "see_end_tag: after parsed esi tag", parser->tag_text, parser->tag_text_length );
1541
- parser->start_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->attributes, parser->user_data );
1542
- //debug_string( "see_end_tag: after start parsed esi tag", parser->tag_text, parser->tag_text_length );
1543
571
  parser->end_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->user_data );
1544
- //debug_string( "see_end_tag: after end parsed esi tag", parser->tag_text, parser->tag_text_length );
1545
- parser->tag_text = NULL;
1546
- parser->tag_text_length = 0;
1547
- parser->mark = p;
1548
- //debug_string( "see_end_tag", p, 1 );
1549
- }
1550
- #line 89 "parser.rl"
1551
- {
1552
- // printf( "finish\n" );
1553
572
  }
1554
- goto _again;
1555
- f12:
1556
- #line 175 "parser.rl"
573
+ break;
574
+ case 9:
575
+ #line 141 "parser.rl"
1557
576
  {
1558
577
  switch( cs ){
1559
578
  case 0:
@@ -1575,54 +594,17 @@ f12:
1575
594
  }
1576
595
  parser->prev_state = cs;
1577
596
  }
1578
- #line 102 "parser.rl"
1579
- {
1580
- //debug_string( "see_end_tag: before parsed esi tag", parser->tag_text, parser->tag_text_length );
1581
- ltrim_pointer( &(parser->tag_text), p, &(parser->tag_text_length) );
1582
- //debug_string( "see_end_tag: after parsed esi tag", parser->tag_text, parser->tag_text_length );
1583
- parser->start_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->attributes, parser->user_data );
1584
- //debug_string( "see_end_tag: after start parsed esi tag", parser->tag_text, parser->tag_text_length );
1585
- parser->end_tag_handler( data, parser->tag_text, parser->tag_text_length, parser->user_data );
1586
- //debug_string( "see_end_tag: after end parsed esi tag", parser->tag_text, parser->tag_text_length );
1587
- parser->tag_text = NULL;
1588
- parser->tag_text_length = 0;
1589
- parser->mark = p;
1590
- //debug_string( "see_end_tag", p, 1 );
1591
- }
1592
- #line 133 "parser.rl"
1593
- {
1594
- ESIAttribute *attr;
1595
- parser->attr_value = parser->mark;
1596
- parser->attr_value_length = p - parser->mark;
1597
- parser->mark = p;
1598
-
1599
- ltrim_pointer( &(parser->attr_value), p, &(parser->attr_value_length) );
1600
-
1601
- // allocate a new attribute
1602
- attr = esi_attribute_new( parser->attr_key, parser->attr_key_length,
1603
- parser->attr_value, parser->attr_value_length );
1604
- if( parser->attributes ){
1605
- parser->last->next = attr;
1606
- parser->last = attr;
1607
- }
1608
- else{
1609
- parser->last = parser->attributes = attr;
1610
- }
1611
- // debug_string( "\tattribute value", parser->attr_value, parser->attr_value_length );
1612
- //debug_string( "see_attribute_value", p, 1 );
1613
- }
1614
- #line 89 "parser.rl"
1615
- {
1616
- // printf( "finish\n" );
1617
- }
1618
- goto _again;
597
+ break;
598
+ #line 599 "parser.c"
599
+ }
600
+ }
1619
601
 
1620
602
  _again:
1621
603
  if ( ++p != pe )
1622
604
  goto _resume;
1623
605
  _out: {}
1624
606
  }
1625
- #line 351 "parser.rl"
607
+ #line 294 "parser.rl"
1626
608
 
1627
609
  parser->cs = cs;
1628
610
 
@@ -1634,18 +616,16 @@ _again:
1634
616
  int tag_text_offset = compute_offset( parser->tag_text, data );
1635
617
  int attr_key_offset = compute_offset( parser->attr_key, data );
1636
618
  int attr_value_offset = compute_offset( parser->attr_value, data );
1637
- //debug_string( "mark before move", parser->mark, 1 );
1638
619
 
1639
620
  parser->overflow_data = (char*)malloc( sizeof( char ) * length );
1640
621
  memcpy( parser->overflow_data, data, length );
1641
622
  parser->overflow_data_size = length;
1642
623
 
1643
624
  // in our new memory space mark will now be
1644
- parser->mark = ( mark_offset >= 0 ) ? parser->overflow_data + mark_offset : NULL;
1645
- parser->tag_text = ( tag_text_offset >= 0 ) ? parser->overflow_data + tag_text_offset : NULL;
1646
- parser->attr_key = ( attr_key_offset >= 0 ) ? parser->overflow_data + attr_key_offset : NULL;
1647
- parser->attr_value = ( attr_value_offset >= 0 ) ? parser->overflow_data + attr_value_offset : NULL;
1648
- //if( parser->mark ){ debug_string( "mark after move", parser->mark, 1 ); } else { printf( "mark is now empty\n" ); }
625
+ parser->mark = ( mark_offset > 0 ) ? parser->overflow_data + mark_offset : NULL;
626
+ parser->tag_text = ( tag_text_offset > 0 ) ? parser->overflow_data + tag_text_offset : NULL;
627
+ parser->attr_key = ( attr_key_offset > 0 ) ? parser->overflow_data + attr_key_offset : NULL;
628
+ parser->attr_value = ( attr_value_offset > 0 ) ? parser->overflow_data + attr_value_offset : NULL;
1649
629
  }
1650
630
 
1651
631
  }else if( parser->overflow_data ){
@@ -1659,8 +639,8 @@ _again:
1659
639
  int esi_parser_finish( ESIParser *parser )
1660
640
  {
1661
641
 
1662
- #line 1663 "parser.c"
1663
- #line 387 "parser.rl"
642
+ #line 643 "parser.c"
643
+ #line 328 "parser.rl"
1664
644
  return 0;
1665
645
  }
1666
646