hpricot 0.8.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/CHANGELOG +88 -0
  2. data/COPYING +18 -0
  3. data/README +275 -0
  4. data/Rakefile +272 -0
  5. data/ext/fast_xs/FastXsService.java +1030 -0
  6. data/ext/fast_xs/extconf.rb +4 -0
  7. data/ext/fast_xs/fast_xs.c +201 -0
  8. data/ext/hpricot_scan/HpricotCss.java +831 -0
  9. data/ext/hpricot_scan/HpricotScanService.java +2086 -0
  10. data/ext/hpricot_scan/extconf.rb +6 -0
  11. data/ext/hpricot_scan/hpricot_common.rl +76 -0
  12. data/ext/hpricot_scan/hpricot_css.c +3503 -0
  13. data/ext/hpricot_scan/hpricot_css.java.rl +155 -0
  14. data/ext/hpricot_scan/hpricot_css.rl +115 -0
  15. data/ext/hpricot_scan/hpricot_scan.c +6927 -0
  16. data/ext/hpricot_scan/hpricot_scan.h +79 -0
  17. data/ext/hpricot_scan/hpricot_scan.java.rl +1152 -0
  18. data/ext/hpricot_scan/hpricot_scan.rl +788 -0
  19. data/extras/mingw-rbconfig.rb +176 -0
  20. data/lib/fast_xs.jar +0 -0
  21. data/lib/hpricot.rb +26 -0
  22. data/lib/hpricot/blankslate.rb +63 -0
  23. data/lib/hpricot/builder.rb +216 -0
  24. data/lib/hpricot/elements.rb +510 -0
  25. data/lib/hpricot/htmlinfo.rb +691 -0
  26. data/lib/hpricot/inspect.rb +103 -0
  27. data/lib/hpricot/modules.rb +40 -0
  28. data/lib/hpricot/parse.rb +38 -0
  29. data/lib/hpricot/tag.rb +219 -0
  30. data/lib/hpricot/tags.rb +164 -0
  31. data/lib/hpricot/traverse.rb +839 -0
  32. data/lib/hpricot/xchar.rb +94 -0
  33. data/lib/hpricot_scan.jar +0 -0
  34. data/test/files/basic.xhtml +17 -0
  35. data/test/files/boingboing.html +2266 -0
  36. data/test/files/cy0.html +3653 -0
  37. data/test/files/immob.html +400 -0
  38. data/test/files/pace_application.html +1320 -0
  39. data/test/files/tenderlove.html +16 -0
  40. data/test/files/uswebgen.html +220 -0
  41. data/test/files/utf8.html +1054 -0
  42. data/test/files/week9.html +1723 -0
  43. data/test/files/why.xml +19 -0
  44. data/test/load_files.rb +7 -0
  45. data/test/nokogiri-bench.rb +64 -0
  46. data/test/test_alter.rb +96 -0
  47. data/test/test_builder.rb +37 -0
  48. data/test/test_parser.rb +428 -0
  49. data/test/test_paths.rb +25 -0
  50. data/test/test_preserved.rb +88 -0
  51. data/test/test_xml.rb +28 -0
  52. metadata +112 -0
@@ -0,0 +1,4 @@
1
+ require 'mkmf'
2
+ have_header('stdio.h') or exit
3
+ dir_config('fast_xs')
4
+ create_makefile('fast_xs')
@@ -0,0 +1,201 @@
1
+ #define VERSION "0.1"
2
+
3
+ #include <ruby.h>
4
+ #include <assert.h>
5
+ /* #include <stdio.h> */
6
+
7
+ #ifndef RARRAY_LEN
8
+ #define RARRAY_LEN(arr) RARRAY(arr)->len
9
+ #define RARRAY_PTR(arr) RARRAY(arr)->ptr
10
+ #define RSTRING_LEN(str) RSTRING(str)->len
11
+ #define RSTRING_PTR(str) RSTRING(str)->ptr
12
+ #endif
13
+
14
+ static ID unpack_id;
15
+ static VALUE U_fmt, C_fmt;
16
+
17
+ /* give GCC hints for better branch prediction
18
+ * (we layout branches so that ASCII characters are handled faster) */
19
+ #if defined(__GNUC__) && (__GNUC__ >= 3)
20
+ # define likely(x) __builtin_expect (!!(x), 1)
21
+ # define unlikely(x) __builtin_expect (!!(x), 0)
22
+ #else
23
+ # define unlikely(x) (x)
24
+ # define likely(x) (x)
25
+ #endif
26
+
27
+ /* pass-through certain characters for CP-1252 */
28
+ #define p(x) (x-128)
29
+
30
+ static const int cp_1252[] = {
31
+ 8364, /* 128 => 8364, euro sign */
32
+ p(129), /* 129 => 129, pass-through */
33
+ 8218, /* 130 => 8218, single low-9 quotation mark */
34
+ 402, /* 131 => 402, latin small letter f with hook */
35
+ 8222, /* 132 => 8222, double low-9 quotation mark */
36
+ 8230, /* 133 => 8230, horizontal ellipsis */
37
+ 8224, /* 134 => 8224, dagger */
38
+ 8225, /* 135 => 8225, double dagger */
39
+ 710, /* 136 => 710, modifier letter circumflex accent */
40
+ 8240, /* 137 => 8240, per mille sign */
41
+ 352, /* 138 => 352, latin capital letter s with caron */
42
+ 8249, /* 139 => 8249, single left-pointing angle quotation mark */
43
+ 338, /* 140 => 338, latin capital ligature oe */
44
+ p(141), /* 141 => 141, pass-through */
45
+ 381, /* 142 => 381, latin capital letter z with caron */
46
+ p(143), /* 143 => 143, pass-through */
47
+ p(144), /* 144 => 144, pass-through */
48
+ 8216, /* 145 => 8216, left single quotation mark */
49
+ 8217, /* 146 => 8217, right single quotation mark */
50
+ 8220, /* 147 => 8220, left double quotation mark */
51
+ 8221, /* 148 => 8221, right double quotation mark */
52
+ 8226, /* 149 => 8226, bullet */
53
+ 8211, /* 150 => 8211, en dash */
54
+ 8212, /* 151 => 8212, em dash */
55
+ 732, /* 152 => 732, small tilde */
56
+ 8482, /* 153 => 8482, trade mark sign */
57
+ 353, /* 154 => 353, latin small letter s with caron */
58
+ 8250, /* 155 => 8250, single right-pointing angle quotation mark */
59
+ 339, /* 156 => 339, latin small ligature oe */
60
+ p(157), /* 157 => 157, pass-through */
61
+ 382, /* 158 => 382, latin small letter z with caron */
62
+ 376 /* 159 => 376} latin capital letter y with diaeresis */
63
+ };
64
+
65
+ #define VALID_VALUE(n) \
66
+ (n >= 0x20 && n <= 0xD7FF) || \
67
+ (n >= 0xE000 && n <= 0xFFFD) || \
68
+ (n >= 0x10000 && n <= 0x10FFFF)
69
+
70
+ #define CP_1252_ESCAPE(n) do { \
71
+ if (n >= 128 && n <= 159) \
72
+ n = cp_1252[n - 128]; \
73
+ } while(0)
74
+
75
+ #define return_const_len(x) do { \
76
+ memcpy(buf, x, sizeof(x) - 1); \
77
+ return (sizeof(x) - 1); \
78
+ } while (0)
79
+
80
+ static inline size_t bytes_for(int n)
81
+ {
82
+ if (n < 1000)
83
+ return sizeof("&#999;") - 1;
84
+ if (n < 10000)
85
+ return sizeof("&#9999;") - 1;
86
+ if (n < 100000)
87
+ return sizeof("&#99999;") - 1;
88
+ if (n < 1000000)
89
+ return sizeof("&#999999;") - 1;
90
+ /* if (n < 10000000), we won't have cases above 0x10FFFF */
91
+ return sizeof("&#9999999;") - 1;
92
+ }
93
+
94
+ static long escape(char *buf, int n)
95
+ {
96
+ /* handle ASCII first */
97
+ if (likely(n < 128)) {
98
+ if (likely(n >= 0x20 || n == 0x9 || n == 0xA || n == 0xD)) {
99
+ if (unlikely(n == 34))
100
+ return_const_len("&quot;");
101
+ if (unlikely(n == 38))
102
+ return_const_len("&amp;");
103
+ if (unlikely(n == 60))
104
+ return_const_len("&lt;");
105
+ if (unlikely(n == 62))
106
+ return_const_len("&gt;");
107
+ buf[0] = (char)n;
108
+ return 1;
109
+ }
110
+
111
+ buf[0] = '*';
112
+ return 1;
113
+ }
114
+
115
+ CP_1252_ESCAPE(n);
116
+
117
+ if (VALID_VALUE(n)) {
118
+ /* return snprintf(buf, sizeof("&#1114111;"), "&#%i;", n); */
119
+ RUBY_EXTERN const char ruby_digitmap[];
120
+ int rv = 3; /* &#; */
121
+ buf += bytes_for(n);
122
+ *--buf = ';';
123
+ do {
124
+ *--buf = ruby_digitmap[(int)(n % 10)];
125
+ ++rv;
126
+ } while (n /= 10);
127
+ *--buf = '#';
128
+ *--buf = '&';
129
+ return rv;
130
+ }
131
+ buf[0] = '*';
132
+ return 1;
133
+ }
134
+
135
+ #undef return_const_len
136
+
137
+ static long escaped_len(int n)
138
+ {
139
+ if (likely(n < 128)) {
140
+ if (unlikely(n == 34))
141
+ return (sizeof("&quot;") - 1);
142
+ if (unlikely(n == 38))
143
+ return (sizeof("&amp;") - 1);
144
+ if (unlikely(n == 60 || n == 62))
145
+ return (sizeof("&gt;") - 1);
146
+ return 1;
147
+ }
148
+
149
+ CP_1252_ESCAPE(n);
150
+
151
+ if (VALID_VALUE(n))
152
+ return bytes_for(n);
153
+ return 1;
154
+ }
155
+
156
+ static VALUE unpack_utf8(VALUE self)
157
+ {
158
+ return rb_funcall(self, unpack_id, 1, U_fmt);
159
+ }
160
+
161
+ static VALUE unpack_uchar(VALUE self)
162
+ {
163
+ return rb_funcall(self, unpack_id, 1, C_fmt);
164
+ }
165
+
166
+ VALUE fast_xs(VALUE self)
167
+ {
168
+ long i;
169
+ struct RArray *array;
170
+ char *s, *c;
171
+ long s_len = 0;
172
+ VALUE *tmp;
173
+
174
+ array = RARRAY(rb_rescue(unpack_utf8, self, unpack_uchar, self));
175
+
176
+ tmp = RARRAY_PTR(array);
177
+ for (i = RARRAY_LEN(array); --i >= 0; tmp++)
178
+ s_len += escaped_len(NUM2INT(*tmp));
179
+
180
+ c = s = alloca(s_len + 1);
181
+
182
+ tmp = RARRAY_PTR(array);
183
+ for (i = RARRAY_LEN(array); --i >= 0; tmp++)
184
+ c += escape(c, NUM2INT(*tmp));
185
+
186
+ *c = '\0';
187
+ return rb_str_new(s, s_len);
188
+ }
189
+
190
+ void Init_fast_xs(void)
191
+ {
192
+ assert(cp_1252[159 - 128] == 376); /* just in case I skipped a line */
193
+
194
+ unpack_id = rb_intern("unpack");
195
+ U_fmt = rb_str_new("U*", 2);
196
+ C_fmt = rb_str_new("C*", 2);
197
+ rb_global_variable(&U_fmt);
198
+ rb_global_variable(&C_fmt);
199
+
200
+ rb_define_method(rb_cString, "fast_xs", fast_xs, 0);
201
+ }
@@ -0,0 +1,831 @@
1
+ // line 1 "hpricot_css.java.rl"
2
+ import java.io.IOException;
3
+
4
+ import org.jruby.Ruby;
5
+ import org.jruby.RubyArray;
6
+ import org.jruby.RubyClass;
7
+ import org.jruby.RubyHash;
8
+ import org.jruby.RubyModule;
9
+ import org.jruby.RubyNumeric;
10
+ import org.jruby.RubyObject;
11
+ import org.jruby.RubyObjectAdapter;
12
+ import org.jruby.RubyRegexp;
13
+ import org.jruby.RubyString;
14
+ import org.jruby.anno.JRubyMethod;
15
+ import org.jruby.exceptions.RaiseException;
16
+ import org.jruby.javasupport.JavaEmbedUtils;
17
+ import org.jruby.runtime.Arity;
18
+ import org.jruby.runtime.Block;
19
+ import org.jruby.runtime.ObjectAllocator;
20
+ import org.jruby.runtime.ThreadContext;
21
+ import org.jruby.runtime.builtin.IRubyObject;
22
+ import org.jruby.runtime.callback.Callback;
23
+ import org.jruby.exceptions.RaiseException;
24
+ import org.jruby.runtime.load.BasicLibraryService;
25
+ import org.jruby.util.ByteList;
26
+
27
+ public class HpricotCss {
28
+ public void FILTER(String id) {
29
+ IRubyObject[] args = new IRubyObject[fargs];
30
+ System.arraycopy(fvals, 0, args, 0, fargs);
31
+ mod.callMethod(ctx, id, args);
32
+ tmpt.rb_clear();
33
+ fargs = 1;
34
+ }
35
+
36
+ public void FILTERAUTO() {
37
+ try {
38
+ FILTER(new String(data, ts, te - ts, "ISO-8859-1"));
39
+ } catch(java.io.UnsupportedEncodingException e) {}
40
+ }
41
+
42
+ public void PUSH(int aps, int ape) {
43
+ RubyString str = RubyString.newString(runtime, data, aps, ape-aps);
44
+ fvals[fargs++] = str;
45
+ tmpt.append(str);
46
+ }
47
+
48
+ private IRubyObject self, mod, str, node;
49
+ private int cs, act, eof, p, pe, ts, te, aps, ape, aps2, ape2;
50
+ private byte[] data;
51
+
52
+ private int fargs = 1;
53
+ private IRubyObject[] fvals = new IRubyObject[6];
54
+ private RubyArray focus;
55
+ private RubyArray tmpt;
56
+ private Ruby runtime;
57
+ private ThreadContext ctx;
58
+
59
+ public HpricotCss(IRubyObject self, IRubyObject mod, IRubyObject str, IRubyObject node) {
60
+ this.self = self;
61
+ this.mod = mod;
62
+ this.str = str;
63
+ this.node = node;
64
+ this.runtime = self.getRuntime();
65
+ this.ctx = runtime.getCurrentContext();
66
+ this.focus = RubyArray.newArray(runtime, node);
67
+ this.tmpt = runtime.newArray();
68
+
69
+ fvals[0] = focus;
70
+
71
+ if(!(str instanceof RubyString)) {
72
+ throw runtime.newArgumentError("bad CSS selector, String only please.");
73
+ }
74
+
75
+ ByteList bl = ((RubyString)str).getByteList();
76
+
77
+ data = bl.bytes;
78
+ p = bl.begin;
79
+ pe = p + bl.realSize;
80
+ eof = pe;
81
+ }
82
+
83
+
84
+ // line 85 "HpricotCss.java"
85
+ private static byte[] init__hpricot_css_actions_0()
86
+ {
87
+ return new byte [] {
88
+ 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 6, 1,
89
+ 7, 1, 15, 1, 19, 1, 22, 1, 24, 1, 28, 1,
90
+ 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1,
91
+ 35, 2, 0, 3, 2, 1, 14, 2, 1, 16, 2, 1,
92
+ 17, 2, 1, 18, 2, 1, 20, 2, 1, 21, 2, 1,
93
+ 23, 2, 1, 25, 2, 1, 26, 2, 1, 27, 2, 4,
94
+ 5, 2, 7, 8, 2, 7, 9, 2, 7, 10, 2, 7,
95
+ 11, 2, 7, 12, 2, 7, 13, 3, 0, 1, 16, 3,
96
+ 0, 1, 18, 3, 7, 0, 8, 3, 7, 0, 9, 3,
97
+ 7, 0, 10, 3, 7, 0, 13, 3, 7, 1, 13
98
+ };
99
+ }
100
+
101
+ private static final byte _hpricot_css_actions[] = init__hpricot_css_actions_0();
102
+
103
+
104
+ private static short[] init__hpricot_css_key_offsets_0()
105
+ {
106
+ return new short [] {
107
+ 0, 0, 4, 20, 21, 23, 25, 27, 29, 30, 32, 34,
108
+ 36, 38, 54, 55, 57, 59, 61, 63, 85, 89, 92, 95,
109
+ 98, 99, 100, 101, 103, 107, 111, 114, 115, 116, 118, 119,
110
+ 120, 122, 123, 125, 127, 129, 131, 137, 142, 153, 161, 165,
111
+ 169, 173, 176, 180, 184, 201, 221, 222, 228, 229, 235, 237,
112
+ 238, 239, 241, 242, 246, 253, 259, 261, 264, 267, 270, 272,
113
+ 275, 277, 278, 299, 320, 341, 361, 384, 401, 403, 406, 409,
114
+ 412, 415, 417, 419, 449, 453, 456, 472, 477, 495, 511, 527,
115
+ 544, 563, 580, 598, 616, 634, 652, 670, 688, 705, 723, 741,
116
+ 759, 777, 795, 812, 830, 849, 867, 885, 904, 922, 940, 958,
117
+ 975, 976, 977, 994, 1011, 1027, 1044
118
+ };
119
+ }
120
+
121
+ private static final short _hpricot_css_key_offsets[] = init__hpricot_css_key_offsets_0();
122
+
123
+
124
+ private static char[] init__hpricot_css_trans_keys_0()
125
+ {
126
+ return new char [] {
127
+ 32, 44, 9, 13, 45, 92, 95, 196, 48, 57, 65, 90,
128
+ 97, 122, 197, 223, 224, 239, 240, 244, 46, 168, 191, 128,
129
+ 191, 128, 191, 128, 191, 46, 168, 191, 128, 191, 128, 191,
130
+ 128, 191, 45, 92, 95, 196, 48, 57, 65, 90, 97, 122,
131
+ 197, 223, 224, 239, 240, 244, 46, 168, 191, 128, 191, 128,
132
+ 191, 128, 191, 45, 92, 95, 101, 102, 103, 108, 110, 111,
133
+ 196, 48, 57, 65, 90, 97, 122, 197, 223, 224, 239, 240,
134
+ 244, 34, 39, 40, 41, 34, 40, 41, 34, 40, 41, 34,
135
+ 40, 41, 41, 41, 41, 34, 40, 34, 39, 40, 41, 34,
136
+ 39, 40, 41, 39, 40, 41, 41, 41, 39, 40, 41, 41,
137
+ 40, 41, 46, 168, 191, 128, 191, 128, 191, 128, 191, 34,
138
+ 39, 40, 41, 48, 57, 34, 40, 41, 48, 57, 34, 39,
139
+ 40, 41, 43, 45, 101, 110, 111, 48, 57, 34, 40, 41,
140
+ 43, 45, 110, 48, 57, 34, 40, 41, 118, 34, 40, 41,
141
+ 101, 34, 40, 41, 110, 34, 40, 41, 34, 40, 41, 100,
142
+ 34, 40, 41, 100, 45, 92, 95, 110, 196, 48, 57, 65,
143
+ 90, 97, 122, 197, 223, 224, 239, 240, 244, 32, 45, 61,
144
+ 92, 95, 196, 9, 13, 48, 57, 65, 90, 97, 122, 197,
145
+ 223, 224, 239, 240, 244, 61, 32, 34, 39, 93, 9, 13,
146
+ 93, 32, 34, 39, 93, 9, 13, 34, 93, 34, 93, 39,
147
+ 93, 39, 32, 61, 9, 13, 32, 34, 39, 61, 93, 9,
148
+ 13, 32, 34, 39, 93, 9, 13, 46, 61, 61, 168, 191,
149
+ 61, 128, 191, 61, 128, 191, 128, 191, 61, 128, 191, 128,
150
+ 191, 46, 32, 45, 61, 92, 95, 97, 196, 9, 13, 48,
151
+ 57, 65, 90, 98, 122, 197, 223, 224, 239, 240, 244, 32,
152
+ 45, 61, 92, 95, 109, 196, 9, 13, 48, 57, 65, 90,
153
+ 97, 122, 197, 223, 224, 239, 240, 244, 32, 45, 61, 92,
154
+ 95, 101, 196, 9, 13, 48, 57, 65, 90, 97, 122, 197,
155
+ 223, 224, 239, 240, 244, 32, 45, 61, 92, 95, 196, 9,
156
+ 13, 48, 57, 65, 90, 97, 122, 197, 223, 224, 239, 240,
157
+ 244, 32, 34, 39, 45, 61, 92, 93, 95, 196, 9, 13,
158
+ 48, 57, 65, 90, 97, 122, 197, 223, 224, 239, 240, 244,
159
+ 45, 92, 93, 95, 196, 48, 57, 65, 90, 97, 122, 197,
160
+ 223, 224, 239, 240, 244, 46, 93, 93, 168, 191, 93, 128,
161
+ 191, 93, 128, 191, 93, 128, 191, 168, 191, 128, 191, 32,
162
+ 35, 43, 44, 45, 46, 58, 62, 91, 92, 95, 101, 110,
163
+ 111, 126, 196, 9, 13, 48, 57, 65, 90, 97, 122, 197,
164
+ 223, 224, 239, 240, 244, 32, 44, 9, 13, 32, 9, 13,
165
+ 45, 92, 95, 196, 48, 57, 65, 90, 97, 122, 197, 223,
166
+ 224, 239, 240, 244, 43, 45, 110, 48, 57, 43, 45, 92,
167
+ 95, 110, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
168
+ 239, 240, 244, 45, 92, 95, 196, 48, 57, 65, 90, 97,
169
+ 122, 197, 223, 224, 239, 240, 244, 45, 92, 95, 196, 48,
170
+ 57, 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40,
171
+ 45, 92, 95, 196, 48, 57, 65, 90, 97, 122, 197, 223,
172
+ 224, 239, 240, 244, 40, 45, 92, 95, 113, 118, 196, 48,
173
+ 57, 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40,
174
+ 45, 92, 95, 196, 48, 57, 65, 90, 97, 122, 197, 223,
175
+ 224, 239, 240, 244, 40, 45, 92, 95, 101, 196, 48, 57,
176
+ 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45,
177
+ 92, 95, 110, 196, 48, 57, 65, 90, 97, 122, 197, 223,
178
+ 224, 239, 240, 244, 40, 45, 92, 95, 105, 196, 48, 57,
179
+ 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45,
180
+ 92, 95, 114, 196, 48, 57, 65, 90, 97, 122, 197, 223,
181
+ 224, 239, 240, 244, 40, 45, 92, 95, 115, 196, 48, 57,
182
+ 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45,
183
+ 92, 95, 116, 196, 48, 57, 65, 90, 97, 122, 197, 223,
184
+ 224, 239, 240, 244, 40, 45, 92, 95, 196, 48, 57, 65,
185
+ 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45, 92,
186
+ 95, 99, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
187
+ 239, 240, 244, 40, 45, 92, 95, 104, 196, 48, 57, 65,
188
+ 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45, 92,
189
+ 95, 105, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
190
+ 239, 240, 244, 40, 45, 92, 95, 108, 196, 48, 57, 65,
191
+ 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45, 92,
192
+ 95, 100, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
193
+ 239, 240, 244, 40, 45, 92, 95, 196, 48, 57, 65, 90,
194
+ 97, 122, 197, 223, 224, 239, 240, 244, 40, 45, 92, 95,
195
+ 116, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224, 239,
196
+ 240, 244, 40, 45, 92, 95, 97, 116, 196, 48, 57, 65,
197
+ 90, 98, 122, 197, 223, 224, 239, 240, 244, 40, 45, 92,
198
+ 95, 116, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
199
+ 239, 240, 244, 40, 45, 92, 95, 104, 196, 48, 57, 65,
200
+ 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45, 92,
201
+ 95, 100, 110, 196, 48, 57, 65, 90, 97, 122, 197, 223,
202
+ 224, 239, 240, 244, 40, 45, 92, 95, 100, 196, 48, 57,
203
+ 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45,
204
+ 92, 95, 108, 196, 48, 57, 65, 90, 97, 122, 197, 223,
205
+ 224, 239, 240, 244, 40, 45, 92, 95, 121, 196, 48, 57,
206
+ 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 40, 45,
207
+ 92, 95, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
208
+ 239, 240, 244, 34, 39, 45, 92, 95, 118, 196, 48, 57,
209
+ 65, 90, 97, 122, 197, 223, 224, 239, 240, 244, 45, 92,
210
+ 95, 101, 196, 48, 57, 65, 90, 97, 122, 197, 223, 224,
211
+ 239, 240, 244, 45, 92, 95, 196, 48, 57, 65, 90, 97,
212
+ 122, 197, 223, 224, 239, 240, 244, 45, 92, 95, 100, 196,
213
+ 48, 57, 65, 90, 97, 122, 197, 223, 224, 239, 240, 244,
214
+ 45, 92, 95, 196, 48, 57, 65, 90, 97, 122, 197, 223,
215
+ 224, 239, 240, 244, 0
216
+ };
217
+ }
218
+
219
+ private static final char _hpricot_css_trans_keys[] = init__hpricot_css_trans_keys_0();
220
+
221
+
222
+ private static byte[] init__hpricot_css_single_lengths_0()
223
+ {
224
+ return new byte [] {
225
+ 0, 2, 4, 1, 0, 0, 0, 0, 1, 0, 0, 0,
226
+ 0, 4, 1, 0, 0, 0, 0, 10, 4, 3, 3, 1,
227
+ 1, 1, 1, 2, 4, 4, 1, 1, 1, 2, 1, 1,
228
+ 2, 1, 0, 0, 0, 0, 4, 3, 9, 6, 4, 4,
229
+ 4, 3, 4, 4, 5, 6, 1, 4, 1, 4, 2, 1,
230
+ 1, 2, 1, 2, 5, 4, 2, 1, 1, 1, 0, 1,
231
+ 0, 1, 7, 7, 7, 6, 9, 5, 2, 1, 1, 1,
232
+ 1, 0, 0, 16, 2, 1, 4, 3, 6, 4, 4, 5,
233
+ 7, 5, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6,
234
+ 6, 6, 5, 6, 7, 6, 6, 7, 6, 6, 6, 5,
235
+ 1, 1, 5, 5, 4, 5, 4
236
+ };
237
+ }
238
+
239
+ private static final byte _hpricot_css_single_lengths[] = init__hpricot_css_single_lengths_0();
240
+
241
+
242
+ private static byte[] init__hpricot_css_range_lengths_0()
243
+ {
244
+ return new byte [] {
245
+ 0, 1, 6, 0, 1, 1, 1, 1, 0, 1, 1, 1,
246
+ 1, 6, 0, 1, 1, 1, 1, 6, 0, 0, 0, 1,
247
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
248
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
249
+ 0, 0, 0, 0, 6, 7, 0, 1, 0, 1, 0, 0,
250
+ 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
251
+ 1, 0, 7, 7, 7, 7, 7, 6, 0, 1, 1, 1,
252
+ 1, 1, 1, 7, 1, 1, 6, 1, 6, 6, 6, 6,
253
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
254
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
255
+ 0, 0, 6, 6, 6, 6, 6
256
+ };
257
+ }
258
+
259
+ private static final byte _hpricot_css_range_lengths[] = init__hpricot_css_range_lengths_0();
260
+
261
+
262
+ private static short[] init__hpricot_css_index_offsets_0()
263
+ {
264
+ return new short [] {
265
+ 0, 0, 4, 15, 17, 19, 21, 23, 25, 27, 29, 31,
266
+ 33, 35, 46, 48, 50, 52, 54, 56, 73, 78, 82, 86,
267
+ 89, 91, 93, 95, 98, 103, 108, 111, 113, 115, 118, 120,
268
+ 122, 125, 127, 129, 131, 133, 135, 141, 146, 157, 165, 170,
269
+ 175, 180, 184, 189, 194, 206, 220, 222, 228, 230, 236, 239,
270
+ 241, 243, 246, 248, 252, 259, 265, 268, 271, 274, 277, 279,
271
+ 282, 284, 286, 301, 316, 331, 345, 362, 374, 377, 380, 383,
272
+ 386, 389, 391, 393, 417, 421, 424, 435, 440, 453, 464, 475,
273
+ 487, 501, 513, 526, 539, 552, 565, 578, 591, 603, 616, 629,
274
+ 642, 655, 668, 680, 693, 707, 720, 733, 747, 760, 773, 786,
275
+ 798, 800, 802, 814, 826, 837, 849
276
+ };
277
+ }
278
+
279
+ private static final short _hpricot_css_index_offsets[] = init__hpricot_css_index_offsets_0();
280
+
281
+
282
+ private static byte[] init__hpricot_css_trans_targs_wi_0()
283
+ {
284
+ return new byte [] {
285
+ 1, 89, 1, 87, 90, 3, 90, 4, 90, 90, 90, 5,
286
+ 6, 7, 0, 90, 87, 90, 87, 90, 87, 5, 87, 6,
287
+ 87, 93, 87, 93, 87, 93, 87, 10, 87, 11, 87, 94,
288
+ 14, 94, 15, 94, 94, 94, 16, 17, 18, 0, 94, 87,
289
+ 94, 87, 94, 87, 16, 87, 17, 87, 95, 37, 95, 96,
290
+ 100, 111, 112, 113, 115, 38, 95, 95, 95, 39, 40, 41,
291
+ 0, 22, 28, 34, 87, 21, 87, 87, 87, 21, 24, 25,
292
+ 87, 23, 24, 87, 23, 87, 87, 87, 26, 27, 26, 24,
293
+ 25, 87, 30, 21, 31, 87, 29, 30, 21, 87, 87, 29,
294
+ 24, 87, 30, 87, 32, 33, 32, 24, 31, 87, 87, 35,
295
+ 36, 35, 34, 87, 87, 95, 87, 95, 87, 95, 87, 39,
296
+ 87, 40, 87, 22, 28, 34, 87, 43, 21, 87, 87, 87,
297
+ 43, 21, 22, 28, 34, 87, 45, 45, 46, 45, 50, 45,
298
+ 21, 87, 87, 87, 45, 45, 45, 45, 21, 87, 87, 87,
299
+ 47, 21, 87, 87, 87, 48, 21, 87, 87, 87, 49, 21,
300
+ 87, 87, 87, 21, 87, 87, 87, 51, 21, 87, 87, 87,
301
+ 49, 21, 53, 73, 53, 74, 85, 53, 53, 53, 70, 72,
302
+ 86, 0, 63, 53, 64, 66, 53, 67, 63, 53, 53, 53,
303
+ 68, 69, 71, 54, 55, 0, 57, 58, 61, 0, 57, 56,
304
+ 87, 56, 57, 58, 61, 87, 57, 56, 56, 120, 58, 60,
305
+ 59, 87, 87, 56, 121, 61, 60, 62, 63, 64, 63, 54,
306
+ 57, 58, 61, 65, 0, 57, 56, 57, 58, 61, 87, 57,
307
+ 56, 53, 55, 0, 55, 53, 0, 55, 53, 0, 55, 70,
308
+ 0, 53, 0, 55, 72, 0, 70, 0, 53, 0, 63, 53,
309
+ 64, 66, 53, 75, 67, 63, 53, 53, 53, 68, 69, 71,
310
+ 54, 63, 53, 64, 66, 53, 76, 67, 63, 53, 53, 53,
311
+ 68, 69, 71, 54, 63, 53, 64, 66, 53, 77, 67, 63,
312
+ 53, 53, 53, 68, 69, 71, 54, 63, 53, 78, 66, 53,
313
+ 67, 63, 53, 53, 53, 68, 69, 71, 54, 57, 58, 61,
314
+ 79, 65, 80, 0, 79, 81, 57, 79, 79, 79, 82, 83,
315
+ 84, 56, 79, 80, 87, 79, 81, 79, 79, 79, 82, 83,
316
+ 84, 56, 79, 87, 56, 87, 79, 56, 87, 79, 56, 87,
317
+ 82, 56, 87, 83, 56, 53, 0, 72, 0, 88, 2, 91,
318
+ 89, 92, 13, 19, 87, 52, 8, 93, 122, 92, 125, 87,
319
+ 9, 88, 92, 93, 93, 10, 11, 12, 0, 1, 89, 1,
320
+ 87, 89, 89, 87, 90, 3, 90, 4, 90, 90, 90, 5,
321
+ 6, 7, 87, 91, 91, 91, 91, 87, 91, 92, 8, 93,
322
+ 92, 9, 92, 93, 93, 10, 11, 12, 87, 93, 8, 93,
323
+ 9, 93, 93, 93, 10, 11, 12, 87, 94, 14, 94, 15,
324
+ 94, 94, 94, 16, 17, 18, 87, 20, 95, 37, 95, 38,
325
+ 95, 95, 95, 39, 40, 41, 87, 20, 95, 37, 95, 97,
326
+ 98, 38, 95, 95, 95, 39, 40, 41, 87, 42, 95, 37,
327
+ 95, 38, 95, 95, 95, 39, 40, 41, 87, 20, 95, 37,
328
+ 95, 99, 38, 95, 95, 95, 39, 40, 41, 87, 20, 95,
329
+ 37, 95, 97, 38, 95, 95, 95, 39, 40, 41, 87, 20,
330
+ 95, 37, 95, 101, 38, 95, 95, 95, 39, 40, 41, 87,
331
+ 20, 95, 37, 95, 102, 38, 95, 95, 95, 39, 40, 41,
332
+ 87, 20, 95, 37, 95, 103, 38, 95, 95, 95, 39, 40,
333
+ 41, 87, 20, 95, 37, 95, 104, 38, 95, 95, 95, 39,
334
+ 40, 41, 87, 42, 105, 37, 95, 38, 95, 95, 95, 39,
335
+ 40, 41, 87, 20, 95, 37, 95, 106, 38, 95, 95, 95,
336
+ 39, 40, 41, 87, 20, 95, 37, 95, 107, 38, 95, 95,
337
+ 95, 39, 40, 41, 87, 20, 95, 37, 95, 108, 38, 95,
338
+ 95, 95, 39, 40, 41, 87, 20, 95, 37, 95, 109, 38,
339
+ 95, 95, 95, 39, 40, 41, 87, 20, 95, 37, 95, 110,
340
+ 38, 95, 95, 95, 39, 40, 41, 87, 44, 95, 37, 95,
341
+ 38, 95, 95, 95, 39, 40, 41, 87, 20, 95, 37, 95,
342
+ 97, 38, 95, 95, 95, 39, 40, 41, 87, 20, 95, 37,
343
+ 95, 102, 97, 38, 95, 95, 95, 39, 40, 41, 87, 20,
344
+ 95, 37, 95, 114, 38, 95, 95, 95, 39, 40, 41, 87,
345
+ 20, 95, 37, 95, 104, 38, 95, 95, 95, 39, 40, 41,
346
+ 87, 20, 95, 37, 95, 116, 117, 38, 95, 95, 95, 39,
347
+ 40, 41, 87, 20, 95, 37, 95, 97, 38, 95, 95, 95,
348
+ 39, 40, 41, 87, 20, 95, 37, 95, 118, 38, 95, 95,
349
+ 95, 39, 40, 41, 87, 20, 95, 37, 95, 119, 38, 95,
350
+ 95, 95, 39, 40, 41, 87, 20, 105, 37, 95, 38, 95,
351
+ 95, 95, 39, 40, 41, 87, 60, 59, 60, 62, 93, 8,
352
+ 93, 123, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8,
353
+ 93, 124, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8,
354
+ 93, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8, 93,
355
+ 126, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8, 93,
356
+ 9, 93, 93, 93, 10, 11, 12, 87, 0
357
+ };
358
+ }
359
+
360
+ private static final byte _hpricot_css_trans_targs_wi[] = init__hpricot_css_trans_targs_wi_0();
361
+
362
+
363
+ private static byte[] init__hpricot_css_trans_actions_wi_0()
364
+ {
365
+ return new byte [] {
366
+ 0, 0, 0, 33, 99, 1, 99, 1, 99, 99, 99, 1,
367
+ 1, 1, 0, 73, 35, 73, 35, 73, 35, 0, 35, 0,
368
+ 35, 79, 35, 79, 35, 79, 35, 0, 35, 0, 35, 103,
369
+ 1, 103, 1, 103, 103, 103, 1, 1, 1, 0, 76, 35,
370
+ 76, 35, 76, 35, 0, 35, 0, 35, 111, 1, 111, 111,
371
+ 111, 111, 111, 111, 111, 1, 111, 111, 111, 1, 1, 1,
372
+ 0, 1, 1, 1, 95, 1, 35, 35, 49, 0, 0, 0,
373
+ 35, 0, 0, 35, 0, 49, 35, 35, 0, 0, 0, 0,
374
+ 0, 35, 0, 0, 0, 49, 0, 0, 0, 35, 49, 0,
375
+ 0, 35, 0, 35, 0, 0, 0, 0, 0, 35, 35, 0,
376
+ 0, 0, 0, 49, 35, 88, 35, 88, 35, 88, 35, 0,
377
+ 35, 0, 35, 1, 1, 1, 95, 1, 1, 29, 29, 46,
378
+ 0, 0, 1, 1, 1, 91, 1, 1, 1, 1, 1, 1,
379
+ 1, 27, 27, 43, 0, 0, 0, 0, 0, 27, 27, 49,
380
+ 0, 0, 27, 27, 49, 0, 0, 27, 27, 49, 0, 0,
381
+ 27, 27, 43, 0, 27, 27, 49, 0, 0, 27, 27, 49,
382
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
383
+ 1, 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
384
+ 5, 5, 5, 5, 0, 0, 7, 7, 7, 0, 7, 7,
385
+ 13, 0, 0, 0, 0, 13, 0, 0, 0, 11, 0, 0,
386
+ 0, 13, 25, 0, 11, 0, 0, 0, 0, 0, 0, 0,
387
+ 7, 7, 7, 7, 0, 7, 7, 7, 7, 7, 13, 7,
388
+ 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
389
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5,
390
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
391
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
392
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
393
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
394
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 7, 7,
395
+ 37, 7, 37, 0, 37, 37, 7, 37, 37, 37, 37, 37,
396
+ 37, 7, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0,
397
+ 0, 0, 0, 13, 0, 13, 0, 0, 13, 0, 0, 13,
398
+ 0, 0, 13, 0, 0, 0, 0, 0, 0, 11, 0, 0,
399
+ 0, 107, 0, 0, 15, 0, 1, 107, 107, 107, 107, 15,
400
+ 1, 11, 107, 107, 107, 1, 1, 1, 0, 0, 0, 0,
401
+ 23, 0, 0, 21, 73, 0, 73, 0, 73, 73, 73, 0,
402
+ 0, 0, 52, 0, 0, 0, 0, 19, 3, 79, 0, 79,
403
+ 79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0, 79,
404
+ 0, 79, 79, 79, 0, 0, 0, 58, 76, 0, 76, 0,
405
+ 76, 76, 76, 0, 0, 0, 55, 3, 88, 0, 88, 0,
406
+ 88, 88, 88, 0, 0, 0, 67, 3, 88, 0, 88, 85,
407
+ 88, 0, 88, 88, 88, 0, 0, 0, 67, 3, 115, 3,
408
+ 115, 3, 115, 115, 115, 3, 3, 3, 64, 3, 88, 0,
409
+ 88, 88, 0, 88, 88, 88, 0, 0, 0, 67, 3, 88,
410
+ 0, 88, 85, 0, 88, 88, 88, 0, 0, 0, 67, 3,
411
+ 88, 0, 88, 88, 0, 88, 88, 88, 0, 0, 0, 67,
412
+ 3, 88, 0, 88, 88, 0, 88, 88, 88, 0, 0, 0,
413
+ 67, 3, 88, 0, 88, 88, 0, 88, 88, 88, 0, 0,
414
+ 0, 67, 3, 88, 0, 88, 85, 0, 88, 88, 88, 0,
415
+ 0, 0, 67, 3, 115, 3, 115, 3, 115, 115, 115, 3,
416
+ 3, 3, 64, 3, 88, 0, 88, 88, 0, 88, 88, 88,
417
+ 0, 0, 0, 67, 3, 88, 0, 88, 88, 0, 88, 88,
418
+ 88, 0, 0, 0, 67, 3, 88, 0, 88, 88, 0, 88,
419
+ 88, 88, 0, 0, 0, 67, 3, 88, 0, 88, 88, 0,
420
+ 88, 88, 88, 0, 0, 0, 67, 3, 88, 0, 88, 82,
421
+ 0, 88, 88, 88, 0, 0, 0, 67, 3, 115, 3, 115,
422
+ 3, 115, 115, 115, 3, 3, 3, 61, 3, 88, 0, 88,
423
+ 85, 0, 88, 88, 88, 0, 0, 0, 67, 3, 88, 0,
424
+ 88, 88, 85, 0, 88, 88, 88, 0, 0, 0, 67, 3,
425
+ 88, 0, 88, 88, 0, 88, 88, 88, 0, 0, 0, 67,
426
+ 3, 88, 0, 88, 85, 0, 88, 88, 88, 0, 0, 0,
427
+ 67, 3, 88, 0, 88, 88, 88, 0, 88, 88, 88, 0,
428
+ 0, 0, 67, 3, 88, 0, 88, 85, 0, 88, 88, 88,
429
+ 0, 0, 0, 67, 3, 88, 0, 88, 88, 0, 88, 88,
430
+ 88, 0, 0, 0, 67, 3, 88, 0, 88, 88, 0, 88,
431
+ 88, 88, 0, 0, 0, 67, 3, 88, 0, 88, 0, 88,
432
+ 88, 88, 0, 0, 0, 67, 0, 0, 0, 0, 79, 0,
433
+ 79, 79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0,
434
+ 79, 79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0,
435
+ 79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0, 79,
436
+ 79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0, 79,
437
+ 0, 79, 79, 79, 0, 0, 0, 58, 0
438
+ };
439
+ }
440
+
441
+ private static final byte _hpricot_css_trans_actions_wi[] = init__hpricot_css_trans_actions_wi_0();
442
+
443
+
444
+ private static byte[] init__hpricot_css_to_state_actions_0()
445
+ {
446
+ return new byte [] {
447
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
448
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
449
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
450
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
451
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
452
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
453
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
454
+ 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0,
455
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
456
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
457
+ 0, 0, 0, 0, 0, 0, 0
458
+ };
459
+ }
460
+
461
+ private static final byte _hpricot_css_to_state_actions[] = init__hpricot_css_to_state_actions_0();
462
+
463
+
464
+ private static byte[] init__hpricot_css_from_state_actions_0()
465
+ {
466
+ return new byte [] {
467
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
468
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
469
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
470
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
471
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
472
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
473
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
474
+ 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,
475
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
476
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
477
+ 0, 0, 0, 0, 0, 0, 0
478
+ };
479
+ }
480
+
481
+ private static final byte _hpricot_css_from_state_actions[] = init__hpricot_css_from_state_actions_0();
482
+
483
+
484
+ private static short[] init__hpricot_css_eof_trans_0()
485
+ {
486
+ return new short [] {
487
+ 0, 1, 0, 11, 11, 11, 11, 11, 11, 11, 11, 11,
488
+ 11, 0, 11, 11, 11, 11, 11, 0, 39, 11, 11, 11,
489
+ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
490
+ 11, 11, 11, 11, 11, 11, 63, 63, 67, 67, 67, 67,
491
+ 67, 67, 67, 67, 0, 0, 0, 0, 0, 0, 0, 105,
492
+ 105, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0,
493
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
494
+ 0, 0, 0, 0, 150, 151, 152, 156, 157, 157, 163, 167,
495
+ 167, 174, 167, 167, 167, 167, 167, 167, 174, 167, 167, 167,
496
+ 167, 167, 193, 167, 167, 167, 167, 167, 167, 167, 167, 167,
497
+ 201, 201, 157, 157, 157, 157, 157
498
+ };
499
+ }
500
+
501
+ private static final short _hpricot_css_eof_trans[] = init__hpricot_css_eof_trans_0();
502
+
503
+
504
+ static final int hpricot_css_start = 87;
505
+ static final int hpricot_css_error = 0;
506
+
507
+ static final int hpricot_css_en_main = 87;
508
+
509
+ // line 147 "hpricot_css.java.rl"
510
+
511
+
512
+ public IRubyObject scan() {
513
+
514
+ // line 515 "HpricotCss.java"
515
+ {
516
+ cs = hpricot_css_start;
517
+ ts = -1;
518
+ te = -1;
519
+ act = 0;
520
+ }
521
+ // line 151 "hpricot_css.java.rl"
522
+
523
+ // line 524 "HpricotCss.java"
524
+ {
525
+ int _klen;
526
+ int _trans = 0;
527
+ int _acts;
528
+ int _nacts;
529
+ int _keys;
530
+ int _goto_targ = 0;
531
+
532
+ _goto: while (true) {
533
+ switch ( _goto_targ ) {
534
+ case 0:
535
+ if ( p == pe ) {
536
+ _goto_targ = 4;
537
+ continue _goto;
538
+ }
539
+ if ( cs == 0 ) {
540
+ _goto_targ = 5;
541
+ continue _goto;
542
+ }
543
+ case 1:
544
+ _acts = _hpricot_css_from_state_actions[cs];
545
+ _nacts = (int) _hpricot_css_actions[_acts++];
546
+ while ( _nacts-- > 0 ) {
547
+ switch ( _hpricot_css_actions[_acts++] ) {
548
+ case 6:
549
+ // line 1 "hpricot_css.java.rl"
550
+ {ts = p;}
551
+ break;
552
+ // line 553 "HpricotCss.java"
553
+ }
554
+ }
555
+
556
+ _match: do {
557
+ _keys = _hpricot_css_key_offsets[cs];
558
+ _trans = _hpricot_css_index_offsets[cs];
559
+ _klen = _hpricot_css_single_lengths[cs];
560
+ if ( _klen > 0 ) {
561
+ int _lower = _keys;
562
+ int _mid;
563
+ int _upper = _keys + _klen - 1;
564
+ while (true) {
565
+ if ( _upper < _lower )
566
+ break;
567
+
568
+ _mid = _lower + ((_upper-_lower) >> 1);
569
+ if ( data[p] < _hpricot_css_trans_keys[_mid] )
570
+ _upper = _mid - 1;
571
+ else if ( data[p] > _hpricot_css_trans_keys[_mid] )
572
+ _lower = _mid + 1;
573
+ else {
574
+ _trans += (_mid - _keys);
575
+ break _match;
576
+ }
577
+ }
578
+ _keys += _klen;
579
+ _trans += _klen;
580
+ }
581
+
582
+ _klen = _hpricot_css_range_lengths[cs];
583
+ if ( _klen > 0 ) {
584
+ int _lower = _keys;
585
+ int _mid;
586
+ int _upper = _keys + (_klen<<1) - 2;
587
+ while (true) {
588
+ if ( _upper < _lower )
589
+ break;
590
+
591
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1);
592
+ if ( data[p] < _hpricot_css_trans_keys[_mid] )
593
+ _upper = _mid - 2;
594
+ else if ( data[p] > _hpricot_css_trans_keys[_mid+1] )
595
+ _lower = _mid + 2;
596
+ else {
597
+ _trans += ((_mid - _keys)>>1);
598
+ break _match;
599
+ }
600
+ }
601
+ _trans += _klen;
602
+ }
603
+ } while (false);
604
+
605
+ case 3:
606
+ cs = _hpricot_css_trans_targs_wi[_trans];
607
+
608
+ if ( _hpricot_css_trans_actions_wi[_trans] != 0 ) {
609
+ _acts = _hpricot_css_trans_actions_wi[_trans];
610
+ _nacts = (int) _hpricot_css_actions[_acts++];
611
+ while ( _nacts-- > 0 )
612
+ {
613
+ switch ( _hpricot_css_actions[_acts++] )
614
+ {
615
+ case 0:
616
+ // line 85 "hpricot_css.java.rl"
617
+ {
618
+ aps = p;
619
+ }
620
+ break;
621
+ case 1:
622
+ // line 89 "hpricot_css.java.rl"
623
+ {
624
+ ape = p;
625
+ PUSH(aps, ape);
626
+ }
627
+ break;
628
+ case 2:
629
+ // line 94 "hpricot_css.java.rl"
630
+ {
631
+ ape = p;
632
+ aps2 = p;
633
+ }
634
+ break;
635
+ case 3:
636
+ // line 99 "hpricot_css.java.rl"
637
+ {
638
+ ape2 = p;
639
+ PUSH(aps, ape);
640
+ PUSH(aps2, ape2);
641
+ }
642
+ break;
643
+ case 7:
644
+ // line 1 "hpricot_css.java.rl"
645
+ {te = p+1;}
646
+ break;
647
+ case 8:
648
+ // line 132 "hpricot_css.java.rl"
649
+ {act = 1;}
650
+ break;
651
+ case 9:
652
+ // line 133 "hpricot_css.java.rl"
653
+ {act = 2;}
654
+ break;
655
+ case 10:
656
+ // line 136 "hpricot_css.java.rl"
657
+ {act = 5;}
658
+ break;
659
+ case 11:
660
+ // line 138 "hpricot_css.java.rl"
661
+ {act = 7;}
662
+ break;
663
+ case 12:
664
+ // line 139 "hpricot_css.java.rl"
665
+ {act = 8;}
666
+ break;
667
+ case 13:
668
+ // line 140 "hpricot_css.java.rl"
669
+ {act = 9;}
670
+ break;
671
+ case 14:
672
+ // line 134 "hpricot_css.java.rl"
673
+ {te = p+1;{ FILTER("NAME"); }}
674
+ break;
675
+ case 15:
676
+ // line 135 "hpricot_css.java.rl"
677
+ {te = p+1;{ FILTER("ATTR"); }}
678
+ break;
679
+ case 16:
680
+ // line 138 "hpricot_css.java.rl"
681
+ {te = p+1;{ FILTER("CHILD"); }}
682
+ break;
683
+ case 17:
684
+ // line 139 "hpricot_css.java.rl"
685
+ {te = p+1;{ FILTER("POS"); }}
686
+ break;
687
+ case 18:
688
+ // line 140 "hpricot_css.java.rl"
689
+ {te = p+1;{ FILTER("PSUEDO"); }}
690
+ break;
691
+ case 19:
692
+ // line 142 "hpricot_css.java.rl"
693
+ {te = p+1;{ FILTERAUTO(); }}
694
+ break;
695
+ case 20:
696
+ // line 132 "hpricot_css.java.rl"
697
+ {te = p;p--;{ FILTER("ID"); }}
698
+ break;
699
+ case 21:
700
+ // line 133 "hpricot_css.java.rl"
701
+ {te = p;p--;{ FILTER("CLASS"); }}
702
+ break;
703
+ case 22:
704
+ // line 135 "hpricot_css.java.rl"
705
+ {te = p;p--;{ FILTER("ATTR"); }}
706
+ break;
707
+ case 23:
708
+ // line 136 "hpricot_css.java.rl"
709
+ {te = p;p--;{ FILTER("TAG"); }}
710
+ break;
711
+ case 24:
712
+ // line 137 "hpricot_css.java.rl"
713
+ {te = p;p--;{ FILTER("MOD"); }}
714
+ break;
715
+ case 25:
716
+ // line 138 "hpricot_css.java.rl"
717
+ {te = p;p--;{ FILTER("CHILD"); }}
718
+ break;
719
+ case 26:
720
+ // line 139 "hpricot_css.java.rl"
721
+ {te = p;p--;{ FILTER("POS"); }}
722
+ break;
723
+ case 27:
724
+ // line 140 "hpricot_css.java.rl"
725
+ {te = p;p--;{ FILTER("PSUEDO"); }}
726
+ break;
727
+ case 28:
728
+ // line 141 "hpricot_css.java.rl"
729
+ {te = p;p--;{ focus = RubyArray.newArray(runtime, node); }}
730
+ break;
731
+ case 29:
732
+ // line 143 "hpricot_css.java.rl"
733
+ {te = p;p--;}
734
+ break;
735
+ case 30:
736
+ // line 135 "hpricot_css.java.rl"
737
+ {{p = ((te))-1;}{ FILTER("ATTR"); }}
738
+ break;
739
+ case 31:
740
+ // line 138 "hpricot_css.java.rl"
741
+ {{p = ((te))-1;}{ FILTER("CHILD"); }}
742
+ break;
743
+ case 32:
744
+ // line 139 "hpricot_css.java.rl"
745
+ {{p = ((te))-1;}{ FILTER("POS"); }}
746
+ break;
747
+ case 33:
748
+ // line 140 "hpricot_css.java.rl"
749
+ {{p = ((te))-1;}{ FILTER("PSUEDO"); }}
750
+ break;
751
+ case 34:
752
+ // line 143 "hpricot_css.java.rl"
753
+ {{p = ((te))-1;}}
754
+ break;
755
+ case 35:
756
+ // line 1 "hpricot_css.java.rl"
757
+ { switch( act ) {
758
+ case 0:
759
+ {{cs = 0; _goto_targ = 2; if (true) continue _goto;}}
760
+ break;
761
+ case 1:
762
+ {{p = ((te))-1;} FILTER("ID"); }
763
+ break;
764
+ case 2:
765
+ {{p = ((te))-1;} FILTER("CLASS"); }
766
+ break;
767
+ case 5:
768
+ {{p = ((te))-1;} FILTER("TAG"); }
769
+ break;
770
+ case 7:
771
+ {{p = ((te))-1;} FILTER("CHILD"); }
772
+ break;
773
+ case 8:
774
+ {{p = ((te))-1;} FILTER("POS"); }
775
+ break;
776
+ case 9:
777
+ {{p = ((te))-1;} FILTER("PSUEDO"); }
778
+ break;
779
+ default: break;
780
+ }
781
+ }
782
+ break;
783
+ // line 784 "HpricotCss.java"
784
+ }
785
+ }
786
+ }
787
+
788
+ case 2:
789
+ _acts = _hpricot_css_to_state_actions[cs];
790
+ _nacts = (int) _hpricot_css_actions[_acts++];
791
+ while ( _nacts-- > 0 ) {
792
+ switch ( _hpricot_css_actions[_acts++] ) {
793
+ case 4:
794
+ // line 1 "hpricot_css.java.rl"
795
+ {ts = -1;}
796
+ break;
797
+ case 5:
798
+ // line 1 "hpricot_css.java.rl"
799
+ {act = 0;}
800
+ break;
801
+ // line 802 "HpricotCss.java"
802
+ }
803
+ }
804
+
805
+ if ( cs == 0 ) {
806
+ _goto_targ = 5;
807
+ continue _goto;
808
+ }
809
+ if ( ++p != pe ) {
810
+ _goto_targ = 1;
811
+ continue _goto;
812
+ }
813
+ case 4:
814
+ if ( p == eof )
815
+ {
816
+ if ( _hpricot_css_eof_trans[cs] > 0 ) {
817
+ _trans = _hpricot_css_eof_trans[cs] - 1;
818
+ _goto_targ = 3;
819
+ continue _goto;
820
+ }
821
+ }
822
+
823
+ case 5:
824
+ }
825
+ break; }
826
+ }
827
+ // line 152 "hpricot_css.java.rl"
828
+
829
+ return focus;
830
+ }
831
+ }