mongrel_esi 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +15 -8
- data/bin/mongrel_esi +0 -0
- data/ext/esi/common.rl +32 -27
- data/ext/esi/esi_parser.c +11 -4
- data/ext/esi/parser.c +4536 -901
- data/ext/esi/parser.h +7 -0
- data/ext/esi/parser.rl +171 -53
- data/ext/esi/run-test.rb +0 -0
- data/ext/esi/test/common.rl +32 -27
- data/ext/esi/test/parser.c +322 -1342
- data/ext/esi/test/parser.h +7 -0
- data/ext/esi/test/parser.rl +171 -53
- data/ext/esi/test/test.c +13 -4
- data/ext/esi/test1.rb +35 -3
- data/lib/esi/cache.rb +2 -1
- data/lib/esi/config.rb +37 -0
- data/lib/esi/dispatcher.rb +3 -5
- data/lib/esi/invalidator.rb +3 -0
- data/lib/esi/logger.rb +0 -7
- data/lib/esi/parser.rb +70 -0
- data/lib/esi/processor.rb +88 -0
- data/lib/esi/proxy.rb +104 -0
- data/lib/esi/response.rb +106 -0
- data/lib/esi/router.rb +3 -0
- data/lib/esi/tag/attempt.rb +3 -0
- data/lib/esi/tag/base.rb +3 -1
- data/lib/esi/tag/except.rb +2 -0
- data/lib/esi/tag/include.rb +131 -132
- data/lib/esi/tag/invalidate.rb +2 -0
- data/lib/esi/tag/try.rb +3 -0
- data/test/integration/basic_test.rb +0 -1
- data/test/integration/docs/esi_max_age_varies.html +10 -0
- data/test/integration/handler_test.rb +31 -5
- data/test/integration/help.rb +13 -1
- data/test/load_test.rb +133 -0
- data/test/unit/include_request_test.rb +1 -1
- data/test/unit/parser_test.rb +41 -5
- data/test/unit/response_test.rb +184 -0
- metadata +50 -224
- data/doc/rdoc/classes/ESI/Cache.html +0 -178
- data/doc/rdoc/classes/ESI/Cache.src/M000060.html +0 -17
- data/doc/rdoc/classes/ESI/Cache.src/M000061.html +0 -20
- data/doc/rdoc/classes/ESI/Config/CacheConfig.html +0 -212
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000055.html +0 -19
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000056.html +0 -19
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000057.html +0 -18
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000058.html +0 -18
- data/doc/rdoc/classes/ESI/Config/CacheConfig.src/M000059.html +0 -18
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.html +0 -187
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000052.html +0 -19
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000053.html +0 -21
- data/doc/rdoc/classes/ESI/Config/ConfigRouter.src/M000054.html +0 -21
- data/doc/rdoc/classes/ESI/Config.html +0 -291
- data/doc/rdoc/classes/ESI/Config.src/M000043.html +0 -18
- data/doc/rdoc/classes/ESI/Config.src/M000044.html +0 -18
- data/doc/rdoc/classes/ESI/Config.src/M000045.html +0 -35
- data/doc/rdoc/classes/ESI/Config.src/M000046.html +0 -38
- data/doc/rdoc/classes/ESI/Config.src/M000047.html +0 -23
- data/doc/rdoc/classes/ESI/Config.src/M000048.html +0 -18
- data/doc/rdoc/classes/ESI/Config.src/M000049.html +0 -20
- data/doc/rdoc/classes/ESI/Config.src/M000050.html +0 -18
- data/doc/rdoc/classes/ESI/Config.src/M000051.html +0 -24
- data/doc/rdoc/classes/ESI/Dispatcher.html +0 -172
- data/doc/rdoc/classes/ESI/Dispatcher.src/M000062.html +0 -23
- data/doc/rdoc/classes/ESI/Dispatcher.src/M000063.html +0 -20
- data/doc/rdoc/classes/ESI/Fragment.html +0 -218
- data/doc/rdoc/classes/ESI/Fragment.src/M000076.html +0 -21
- data/doc/rdoc/classes/ESI/Fragment.src/M000077.html +0 -18
- data/doc/rdoc/classes/ESI/Fragment.src/M000078.html +0 -18
- data/doc/rdoc/classes/ESI/Handler.html +0 -236
- data/doc/rdoc/classes/ESI/Handler.src/M000079.html +0 -19
- data/doc/rdoc/classes/ESI/Handler.src/M000080.html +0 -161
- data/doc/rdoc/classes/ESI/Handler.src/M000081.html +0 -24
- data/doc/rdoc/classes/ESI/Handler.src/M000082.html +0 -18
- data/doc/rdoc/classes/ESI/Handler.src/M000083.html +0 -26
- data/doc/rdoc/classes/ESI/Handler.src/M000084.html +0 -30
- data/doc/rdoc/classes/ESI/Invalidator.html +0 -131
- data/doc/rdoc/classes/ESI/Invalidator.src/M000004.html +0 -41
- data/doc/rdoc/classes/ESI/Log.html +0 -251
- data/doc/rdoc/classes/ESI/Log.src/M000005.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000006.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000007.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000008.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000009.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000010.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000011.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000012.html +0 -18
- data/doc/rdoc/classes/ESI/Log.src/M000013.html +0 -18
- data/doc/rdoc/classes/ESI/MemcachedCache.html +0 -314
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000034.html +0 -24
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000035.html +0 -22
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000036.html +0 -19
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000037.html +0 -23
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000038.html +0 -18
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000039.html +0 -19
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000040.html +0 -18
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000041.html +0 -18
- data/doc/rdoc/classes/ESI/MemcachedCache.src/M000042.html +0 -17
- data/doc/rdoc/classes/ESI/Router.html +0 -229
- data/doc/rdoc/classes/ESI/Router.src/M000073.html +0 -36
- data/doc/rdoc/classes/ESI/Router.src/M000074.html +0 -25
- data/doc/rdoc/classes/ESI/Router.src/M000075.html +0 -24
- data/doc/rdoc/classes/ESI/RubyCache.html +0 -278
- data/doc/rdoc/classes/ESI/RubyCache.src/M000064.html +0 -20
- data/doc/rdoc/classes/ESI/RubyCache.src/M000065.html +0 -22
- data/doc/rdoc/classes/ESI/RubyCache.src/M000066.html +0 -21
- data/doc/rdoc/classes/ESI/RubyCache.src/M000067.html +0 -22
- data/doc/rdoc/classes/ESI/RubyCache.src/M000068.html +0 -18
- data/doc/rdoc/classes/ESI/RubyCache.src/M000069.html +0 -22
- data/doc/rdoc/classes/ESI/RubyCache.src/M000070.html +0 -18
- data/doc/rdoc/classes/ESI/RubyCache.src/M000071.html +0 -18
- data/doc/rdoc/classes/ESI/RubyCache.src/M000072.html +0 -18
- data/doc/rdoc/classes/ESI/Tag/Attempt.html +0 -113
- data/doc/rdoc/classes/ESI/Tag/Base.html +0 -267
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000028.html +0 -26
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000029.html +0 -23
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000030.html +0 -22
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000031.html +0 -18
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000032.html +0 -22
- data/doc/rdoc/classes/ESI/Tag/Base.src/M000033.html +0 -23
- data/doc/rdoc/classes/ESI/Tag/Except.html +0 -184
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000020.html +0 -21
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000021.html +0 -20
- data/doc/rdoc/classes/ESI/Tag/Except.src/M000022.html +0 -18
- data/doc/rdoc/classes/ESI/Tag/Include.html +0 -189
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000017.html +0 -20
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000018.html +0 -18
- data/doc/rdoc/classes/ESI/Tag/Include.src/M000019.html +0 -125
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.html +0 -155
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest/Error.src/M000016.html +0 -19
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.html +0 -199
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000014.html +0 -18
- data/doc/rdoc/classes/ESI/Tag/IncludeRequest.src/M000015.html +0 -42
- data/doc/rdoc/classes/ESI/Tag/Invalidate.html +0 -171
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000025.html +0 -19
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000026.html +0 -51
- data/doc/rdoc/classes/ESI/Tag/Invalidate.src/M000027.html +0 -19
- data/doc/rdoc/classes/ESI/Tag/Try.html +0 -161
- data/doc/rdoc/classes/ESI/Tag/Try.src/M000023.html +0 -40
- data/doc/rdoc/classes/ESI/Tag/Try.src/M000024.html +0 -18
- data/doc/rdoc/classes/ESI/Tag.html +0 -137
- data/doc/rdoc/classes/ESI.html +0 -169
- data/doc/rdoc/classes/MultiDirHandler.html +0 -198
- data/doc/rdoc/classes/MultiDirHandler.src/M000001.html +0 -20
- data/doc/rdoc/classes/MultiDirHandler.src/M000002.html +0 -28
- data/doc/rdoc/classes/MultiDirHandler.src/M000003.html +0 -22
- data/doc/rdoc/classes/Net/An/HTTP.html +0 -137
- data/doc/rdoc/classes/Net/An/HTTP.src/M000087.html +0 -17
- data/doc/rdoc/classes/Net/An/IORequest.html +0 -139
- data/doc/rdoc/classes/Net/An/IORequest.src/M000088.html +0 -17
- data/doc/rdoc/classes/Net/An/IOResponse.html +0 -139
- data/doc/rdoc/classes/Net/An/IOResponse.src/M000085.html +0 -17
- data/doc/rdoc/classes/Net/An/IOSocket.html +0 -137
- data/doc/rdoc/classes/Net/An/IOSocket.src/M000086.html +0 -17
- data/doc/rdoc/classes/Net/An.html +0 -114
- data/doc/rdoc/classes/Net.html +0 -119
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/COPYING.html +0 -168
- data/doc/rdoc/files/LICENSE.html +0 -605
- data/doc/rdoc/files/README.html +0 -361
- data/doc/rdoc/files/lib/esi/cache_rb.html +0 -113
- data/doc/rdoc/files/lib/esi/config_rb.html +0 -108
- data/doc/rdoc/files/lib/esi/dispatcher_rb.html +0 -109
- data/doc/rdoc/files/lib/esi/handler_rb.html +0 -121
- data/doc/rdoc/files/lib/esi/invalidator_rb.html +0 -117
- data/doc/rdoc/files/lib/esi/logger_rb.html +0 -108
- data/doc/rdoc/files/lib/esi/router_rb.html +0 -101
- data/doc/rdoc/files/lib/esi/tag/attempt_rb.html +0 -101
- data/doc/rdoc/files/lib/esi/tag/base_rb.html +0 -108
- data/doc/rdoc/files/lib/esi/tag/except_rb.html +0 -101
- data/doc/rdoc/files/lib/esi/tag/include_rb.html +0 -109
- data/doc/rdoc/files/lib/esi/tag/invalidate_rb.html +0 -109
- data/doc/rdoc/files/lib/esi/tag/try_rb.html +0 -108
- data/doc/rdoc/files/lib/multi_dirhandler_rb.html +0 -109
- data/doc/rdoc/files/lib/net/ahttp_rb.html +0 -109
- data/doc/rdoc/fr_class_index.html +0 -55
- data/doc/rdoc/fr_file_index.html +0 -44
- data/doc/rdoc/fr_method_index.html +0 -114
- data/doc/rdoc/index.html +0 -24
- data/doc/rdoc/rdoc-style.css +0 -208
- data/ext/esi/parser.rb +0 -49
- data/ext/esi/ruby_esi.rl +0 -135
- data/lib/esi/handler.rb +0 -221
- data/lib/net/ahttp.rb +0 -36
data/ext/esi/run-test.rb
CHANGED
|
File without changes
|
data/ext/esi/test/common.rl
CHANGED
|
@@ -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
|
-
#
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
#
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
40
|
+
# match the attribute value and return to matching attribute start
|
|
41
|
+
space* attr_value @see_attribute_value -> start_attribute
|
|
31
42
|
)
|
|
32
|
-
) >begin
|
|
33
|
-
|
|
34
|
-
echo_state = (
|
|
35
|
-
start: (
|
|
36
|
-
/./ @echo
|
|
37
|
-
)
|
|
38
|
-
);
|
|
43
|
+
) >begin %finish;
|
|
39
44
|
|
|
40
|
-
main := ((/.*/)? @echo (
|
|
45
|
+
main := ((/.*/)? @echo (esi_tags) )*;
|
|
41
46
|
}%%
|
data/ext/esi/test/parser.c
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
#include <stdio.h>
|
|
3
3
|
#include <stdlib.h>
|
|
4
4
|
#include <string.h>
|
|
5
|
-
#include <
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
353
|
+
#line 354 "parser.c"
|
|
190
354
|
{
|
|
191
355
|
cs = esi_start;
|
|
192
356
|
}
|
|
193
|
-
#line
|
|
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
|
|
231
|
-
parser->tag_text = ( tag_text_offset
|
|
232
|
-
parser->attr_key = ( attr_key_offset
|
|
233
|
-
parser->attr_value = ( attr_value_offset
|
|
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
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
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
|
-
|
|
490
|
+
// printf( "begin\n" );
|
|
1154
491
|
}
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
#line
|
|
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
|
-
|
|
1184
|
-
|
|
1185
|
-
#line
|
|
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
|
-
|
|
507
|
+
break;
|
|
508
|
+
case 3:
|
|
509
|
+
#line 87 "parser.rl"
|
|
1240
510
|
{
|
|
1241
|
-
|
|
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
|
-
|
|
1254
|
-
|
|
1255
|
-
#line
|
|
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
|
-
|
|
1286
|
-
|
|
1287
|
-
#line
|
|
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
|
-
|
|
1319
|
-
|
|
1320
|
-
#line
|
|
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
|
-
|
|
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
|
-
|
|
1398
|
-
|
|
1399
|
-
#line
|
|
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
|
-
|
|
1555
|
-
|
|
1556
|
-
#line
|
|
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
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
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
|
|
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
|
|
1645
|
-
parser->tag_text = ( tag_text_offset
|
|
1646
|
-
parser->attr_key = ( attr_key_offset
|
|
1647
|
-
parser->attr_value = ( attr_value_offset
|
|
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
|
-
#line
|
|
642
|
+
#line 643 "parser.c"
|
|
643
|
+
#line 328 "parser.rl"
|
|
1664
644
|
return 0;
|
|
1665
645
|
}
|
|
1666
646
|
|