hpricot 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ = 0.8.2
2
+ === 5 November, 2009
3
+ * Bring JRuby support up to speed, including Java-based hpricot_css support
4
+ * Change JRuby fast_xs to have same escaping behavior as C fast_xs
5
+
6
+ = 0.8.1
7
+ === 3 April, 2009
8
+ * fix for issue #2, downcasing of html attributes inside the parser.
9
+ * solve issue #3 with bogus etags being preserved in `to_s` rather than just `to_original_html`.
10
+ * fix error when attempting to reparent cleared node. (issue #5)
11
+ * Hpricot::Attributes proxy object for using `ele.attributes[k] = v` directly.
12
+ however, it is preferred to use the jquery-like `elements.attr(k, v)`.
13
+
1
14
  = 0.8
2
15
  === 31st March, 2009
3
16
  * Saving memory and speed by using RStruct-based elements in the C extension.
data/README CHANGED
@@ -31,12 +31,11 @@ Let's clear up what Hpricot is.
31
31
 
32
32
  First, here are all the links you need to know:
33
33
 
34
- * http://code.whytheluckystiff.net/hpricot is the Hpricot wiki and bug tracker.
34
+ * http://wiki.github.com/hpricot/hpricot is the Hpricot wiki and
35
+ http://github.com/hpricot/hpricot/issues is the bug tracker.
35
36
  Go there for news and recipes and patches. It's the center of activity.
36
- * http://code.whytheluckystiff.net/svn/hpricot/trunk is the main Subversion
37
+ * http://github.com/hpricot/hpricot is the main Git
37
38
  repository for Hpricot. You can get the latest code there.
38
- * http://code.whytheluckystiff.net/doc/hpricot is the home for the latest copy of
39
- this reference.
40
39
  * See COPYING for the terms of this software. (Spoiler: it's absolutely free.)
41
40
 
42
41
  If you have any trouble, don't hesitate to contact the author. As always, I'm
@@ -46,24 +45,16 @@ as quickly as I can. Your responsibility is to report the inadequacies.
46
45
 
47
46
  == Installing Hpricot
48
47
 
49
- You may get the latest stable version from Rubyforge. Win32 binaries and source
50
- gems are available.
48
+ You may get the latest stable version from Rubyforge. Win32 binaries,
49
+ Java binaries (for JRuby), and source gems are available.
51
50
 
52
51
  $ gem install hpricot
53
52
 
54
- As Hpricot is still under active development, you can also try the most recent
55
- candidate build here:
56
-
57
- $ gem install hpricot --source http://code.whytheluckystiff.net
58
-
59
- The development gem is usually in pretty good shape actually. You can also
60
- get the bleeding edge code or plain Ruby tarballs on the wiki.
61
-
62
53
  == An Hpricot Showcase
63
54
 
64
55
  We're going to run through a big pile of examples to get you jump-started.
65
56
  Many of these examples are also found at
66
- http://code.whytheluckystiff.net/hpricot/wiki/HpricotBasics, in case you
57
+ http://wiki.github.com/hpricot/hpricot/hpricot-basics, in case you
67
58
  want to add some of your own.
68
59
 
69
60
  === Loading Hpricot Itself
data/Rakefile CHANGED
@@ -14,12 +14,12 @@ VERS = ENV['VERSION'] || "0.8" + (REV ? ".#{REV}" : "")
14
14
  PKG = "#{NAME}-#{VERS}"
15
15
  BIN = "*.{bundle,jar,so,o,obj,pdb,lib,def,exp,class}"
16
16
  CLEAN.include ["ext/hpricot_scan/#{BIN}", "ext/fast_xs/#{BIN}", "lib/**/#{BIN}",
17
- 'ext/fast_xs/Makefile', 'ext/hpricot_scan/Makefile',
17
+ 'ext/fast_xs/Makefile', 'ext/hpricot_scan/Makefile',
18
18
  '**/.*.sw?', '*.gem', '.config', 'pkg']
19
19
  RDOC_OPTS = ['--quiet', '--title', 'The Hpricot Reference', '--main', 'README', '--inline-source']
20
20
  PKG_FILES = %w(CHANGELOG COPYING README Rakefile) +
21
- Dir.glob("{bin,doc,test,lib,extras}/**/*") +
22
- Dir.glob("ext/**/*.{h,java,c,rb,rl}") +
21
+ Dir.glob("{bin,doc,test,lib,extras}/**/*") +
22
+ Dir.glob("ext/**/*.{h,java,c,rb,rl}") +
23
23
  %w[ext/hpricot_scan/hpricot_scan.c ext/hpricot_scan/hpricot_css.c ext/hpricot_scan/HpricotScanService.java] # needed because they are generated later
24
24
  RAGEL_C_CODE_GENERATION_STYLES = {
25
25
  "table_driven" => 'T0',
@@ -47,7 +47,7 @@ SPEC =
47
47
  s.homepage = 'http://code.whytheluckystiff.net/hpricot/'
48
48
  s.rubyforge_project = 'hobix'
49
49
  s.files = PKG_FILES
50
- s.require_paths = ["lib"]
50
+ s.require_paths = ["lib"]
51
51
  s.extensions = FileList["ext/**/extconf.rb"].to_a
52
52
  s.bindir = "bin"
53
53
  end
@@ -56,11 +56,15 @@ Win32Spec = SPEC.dup
56
56
  Win32Spec.platform = 'x86-mswin32'
57
57
  Win32Spec.files = PKG_FILES + ["lib/hpricot_scan.so", "lib/fast_xs.so"]
58
58
  Win32Spec.extensions = []
59
-
59
+
60
60
  WIN32_PKG_DIR = "#{PKG}-mswin32"
61
61
 
62
62
  desc "Does a full compile, test run"
63
+ if defined?(JRUBY_VERSION)
64
+ task :default => [:compile_java, :test]
65
+ else
63
66
  task :default => [:compile, :test]
67
+ end
64
68
 
65
69
  desc "Packages up Hpricot."
66
70
  task :package => [:clean, :ragel]
@@ -68,6 +72,7 @@ task :package => [:clean, :ragel]
68
72
  desc "Releases packages for all Hpricot packages and platforms."
69
73
  task :release => [:package, :package_win32, :package_jruby]
70
74
 
75
+
71
76
  desc "Run all the tests"
72
77
  Rake::TestTask.new do |t|
73
78
  t.libs << "test"
@@ -97,7 +102,7 @@ end
97
102
  "#{ext}/extconf.rb",
98
103
  "#{ext}/Makefile",
99
104
  "lib"
100
- ]
105
+ ]
101
106
 
102
107
  desc "Builds just the #{extension} extension"
103
108
  task extension.to_sym => [:ragel, "#{ext}/Makefile", ext_so ]
@@ -147,21 +152,26 @@ desc "Generates the C scanner code with Ragel."
147
152
  task :ragel => [:ragel_version] do
148
153
  if @ragel_v >= 6.1
149
154
  @ragel_c_code_generation_style = RAGEL_C_CODE_GENERATION_STYLES[DEFAULT_RAGEL_C_CODE_GENERATION]
150
- console_sep = (ENV['COMSPEC'] =~ /cmd\.exe/) ? '&' : ';'
151
- sh %{cd ext/hpricot_scan #{console_sep} ragel hpricot_scan.rl -#{@ragel_c_code_generation_style} -o hpricot_scan.c && ragel hpricot_css.rl -#{@ragel_c_code_generation_style} -o hpricot_css.c}
155
+ Dir.chdir("ext/hpricot_scan") do
156
+ sh %{ragel hpricot_scan.rl -#{@ragel_c_code_generation_style} -o hpricot_scan.c}
157
+ sh %{ragel hpricot_css.rl -#{@ragel_c_code_generation_style} -o hpricot_css.c}
158
+ end
152
159
  else
153
160
  STDERR.puts "Ragel 6.1 or greater is required."
154
161
  exit(1)
155
162
  end
156
163
  end
157
164
 
158
- # Java only supports the table-driven code
159
- # generation style at this point.
165
+ # Java only supports the table-driven code
166
+ # generation style at this point.
160
167
  desc "Generates the Java scanner code using the Ragel table-driven code generation style."
161
168
  task :ragel_java => [:ragel_version] do
162
169
  if @ragel_v >= 6.1
163
170
  puts "compiling with ragel version #{@ragel_v}"
164
- sh %{ragel -J -o ext/hpricot_scan/HpricotScanService.java ext/hpricot_scan/hpricot_scan.java.rl}
171
+ Dir.chdir("ext/hpricot_scan") do
172
+ sh %{ragel -J -o HpricotCss.java hpricot_css.java.rl}
173
+ sh %{ragel -J -o HpricotScanService.java hpricot_scan.java.rl}
174
+ end
165
175
  else
166
176
  STDERR.puts "Ragel 6.1 or greater is required."
167
177
  exit(1)
@@ -190,46 +200,48 @@ CLEAN.include WIN32_PKG_DIR
190
200
 
191
201
  ### JRuby Packages ###
192
202
 
193
- def java_classpath_arg
194
- # A myriad of ways to discover the JRuby classpath
195
- classpath = begin
196
- require 'java'
197
- # Already running in a JRuby JVM
198
- Java::java.lang.System.getProperty('java.class.path')
199
- rescue LoadError
200
- ENV['JRUBY_PARENT_CLASSPATH'] || ENV['JRUBY_HOME'] && FileList["#{ENV['JRUBY_HOME']}/lib/*.jar"].join(File::PATH_SEPARATOR)
203
+ def java_classpath_arg # myriad of ways to discover JRuby classpath
204
+ begin
205
+ cpath = Java::java.lang.System.getProperty('java.class.path').split(File::PATH_SEPARATOR)
206
+ cpath += Java::java.lang.System.getProperty('sun.boot.class.path').split(File::PATH_SEPARATOR)
207
+ jruby_cpath = cpath.compact.join(File::PATH_SEPARATOR)
208
+ rescue => e
209
+ end
210
+ unless jruby_cpath
211
+ jruby_cpath = ENV['JRUBY_PARENT_CLASSPATH'] || ENV['JRUBY_HOME'] &&
212
+ FileList["#{ENV['JRUBY_HOME']}/lib/*.jar"].join(File::PATH_SEPARATOR)
201
213
  end
202
- classpath ? "-cp #{classpath}" : ""
214
+ jruby_cpath ? "-cp \"#{jruby_cpath}\"" : ""
203
215
  end
204
216
 
205
- def compile_java(filename, jarname)
206
- sh %{javac -source 1.4 -target 1.4 #{java_classpath_arg} #{filename}}
217
+ def compile_java(filenames, jarname)
218
+ sh %{javac -source 1.5 -target 1.5 #{java_classpath_arg} #{filenames.join(" ")}}
207
219
  sh %{jar cf #{jarname} *.class}
208
220
  end
209
221
 
210
222
  task :hpricot_scan_java => [:ragel_java] do
211
223
  Dir.chdir "ext/hpricot_scan" do
212
- compile_java("HpricotScanService.java", "hpricot_scan.jar")
224
+ compile_java(["HpricotScanService.java", "HpricotCss.java"], "hpricot_scan.jar")
213
225
  end
214
226
  end
215
227
 
216
228
  task :fast_xs_java do
217
229
  Dir.chdir "ext/fast_xs" do
218
- compile_java("FastXsService.java", "fast_xs.jar")
230
+ compile_java(["FastXsService.java"], "fast_xs.jar")
219
231
  end
220
232
  end
221
233
 
222
234
  desc "Compiles the JRuby extensions"
223
- task :hpricot_java => [:hpricot_scan_java, :fast_xs_java] do
235
+ task :compile_java => [:hpricot_scan_java, :fast_xs_java] do
224
236
  %w(hpricot_scan fast_xs).each {|ext| mv "ext/#{ext}/#{ext}.jar", "lib"}
225
237
  end
226
238
 
227
239
  JRubySpec = SPEC.dup
228
- JRubySpec.platform = 'jruby'
240
+ JRubySpec.platform = 'java'
229
241
  JRubySpec.files = PKG_FILES + ["lib/hpricot_scan.jar", "lib/fast_xs.jar"]
230
242
  JRubySpec.extensions = []
231
243
 
232
- JRUBY_PKG_DIR = "#{PKG}-jruby"
244
+ JRUBY_PKG_DIR = "#{PKG}-java"
233
245
 
234
246
  desc "Package up the JRuby distribution."
235
247
  file JRUBY_PKG_DIR => [:ragel_java, :package] do
@@ -240,7 +252,7 @@ end
240
252
  desc "Build the RubyGems package for JRuby"
241
253
  task :package_jruby => JRUBY_PKG_DIR do
242
254
  Dir.chdir("#{JRUBY_PKG_DIR}") do
243
- Rake::Task[:hpricot_java].invoke
255
+ Rake::Task[:compile_java].invoke
244
256
  Gem::Builder.new(JRubySpec).build
245
257
  verbose(true) {
246
258
  mv Dir["*.gem"].first, "../pkg/#{JRUBY_PKG_DIR}.gem"
@@ -25,7 +25,7 @@ public class FastXsService implements BasicLibraryService {
25
25
  String string = recv.convertToString().getUnicodeValue();
26
26
  StringWriter writer = new StringWriter ((int)(string.length() * 1.5));
27
27
  try {
28
- Entities.XML.escape(writer, string);
28
+ Entities.FAST_XS.escape(writer, string);
29
29
  return recv.getRuntime().newString(writer.toString());
30
30
  } catch (IOException e) {
31
31
  throw recv.getRuntime().newIOErrorFromException(e);
@@ -398,6 +398,13 @@ class Entities {
398
398
  */
399
399
  public static final Entities HTML40;
400
400
 
401
+ /**
402
+ * <p>
403
+ * The set of entities supported by the Ruby fast_xs extension.
404
+ * </p>
405
+ */
406
+ public static final Entities FAST_XS;
407
+
401
408
  static {
402
409
  XML = new Entities();
403
410
  XML.addEntities(BASIC_ARRAY);
@@ -415,6 +422,11 @@ class Entities {
415
422
  fillWithHtml40Entities(HTML40);
416
423
  }
417
424
 
425
+ static {
426
+ FAST_XS = new Entities();
427
+ FAST_XS.addEntities(BASIC_ARRAY);
428
+ }
429
+
418
430
  /**
419
431
  * <p>
420
432
  * Fills the specified entities instance with HTML 40 entities.
@@ -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
+ }