hpricot 0.8.2 → 0.8.3
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/CHANGELOG +19 -3
- data/{README → README.md} +84 -83
- data/Rakefile +85 -123
- data/ext/fast_xs/FastXsService.java +94 -1
- data/ext/fast_xs/fast_xs.c +60 -51
- data/ext/hpricot_scan/HpricotCss.java +50 -31
- data/ext/hpricot_scan/HpricotScanService.java +77 -64
- data/ext/hpricot_scan/extconf.rb +3 -0
- data/ext/hpricot_scan/hpricot_css.c +331 -323
- data/ext/hpricot_scan/hpricot_css.rl +6 -1
- data/ext/hpricot_scan/hpricot_scan.c +922 -810
- data/ext/hpricot_scan/hpricot_scan.java.rl +22 -13
- data/ext/hpricot_scan/hpricot_scan.rl +198 -90
- data/extras/hpricot.png +0 -0
- data/lib/hpricot/builder.rb +1 -1
- data/lib/hpricot/elements.rb +28 -24
- data/lib/hpricot/htmlinfo.rb +1 -1
- data/lib/hpricot/tag.rb +2 -2
- data/lib/hpricot/tags.rb +4 -4
- data/lib/hpricot/traverse.rb +25 -25
- data/lib/hpricot/xchar.rb +3 -3
- data/test/files/basic.xhtml +1 -1
- data/test/test_parser.rb +31 -2
- metadata +21 -9
- data/extras/mingw-rbconfig.rb +0 -176
@@ -10,7 +10,6 @@ import org.jruby.RubyModule;
|
|
10
10
|
import org.jruby.runtime.CallbackFactory;
|
11
11
|
import org.jruby.runtime.builtin.IRubyObject;
|
12
12
|
import org.jruby.runtime.load.BasicLibraryService;
|
13
|
-
import org.jruby.util.collections.IntHashMap;
|
14
13
|
|
15
14
|
public class FastXsService implements BasicLibraryService {
|
16
15
|
|
@@ -477,6 +476,100 @@ class Entities {
|
|
477
476
|
int value(String name);
|
478
477
|
}
|
479
478
|
|
479
|
+
// Very limited IntHashMap - it only supports get() and put()
|
480
|
+
private static class IntHashMap {
|
481
|
+
private transient Entry table[];
|
482
|
+
|
483
|
+
private transient int count;
|
484
|
+
|
485
|
+
|
486
|
+
private int threshold;
|
487
|
+
|
488
|
+
private final float loadFactor;
|
489
|
+
|
490
|
+
private static class Entry {
|
491
|
+
final int hash;
|
492
|
+
final int key;
|
493
|
+
Object value;
|
494
|
+
Entry next;
|
495
|
+
|
496
|
+
protected Entry(int hash, int key, Object value, Entry next) {
|
497
|
+
this.hash = hash;
|
498
|
+
this.key = key;
|
499
|
+
this.value = value;
|
500
|
+
this.next = next;
|
501
|
+
}
|
502
|
+
}
|
503
|
+
|
504
|
+
public IntHashMap() {
|
505
|
+
this.loadFactor = 0.75f;
|
506
|
+
table = new Entry[20];
|
507
|
+
threshold = (int) (20 * 0.75f);
|
508
|
+
}
|
509
|
+
|
510
|
+
public Object get(int key) {
|
511
|
+
Entry tab[] = table;
|
512
|
+
int hash = key;
|
513
|
+
int index = (hash & 0x7FFFFFFF) % tab.length;
|
514
|
+
for (Entry e = tab[index]; e != null; e = e.next) {
|
515
|
+
if (e.hash == hash) {
|
516
|
+
return e.value;
|
517
|
+
}
|
518
|
+
}
|
519
|
+
return null;
|
520
|
+
}
|
521
|
+
|
522
|
+
protected void rehash() {
|
523
|
+
int oldCapacity = table.length;
|
524
|
+
Entry oldMap[] = table;
|
525
|
+
|
526
|
+
int newCapacity = oldCapacity * 2 + 1;
|
527
|
+
Entry newMap[] = new Entry[newCapacity];
|
528
|
+
|
529
|
+
threshold = (int) (newCapacity * loadFactor);
|
530
|
+
table = newMap;
|
531
|
+
|
532
|
+
for (int i = oldCapacity; i-- > 0;) {
|
533
|
+
for (Entry old = oldMap[i]; old != null;) {
|
534
|
+
Entry e = old;
|
535
|
+
old = old.next;
|
536
|
+
|
537
|
+
int index = (e.hash & 0x7FFFFFFF) % newCapacity;
|
538
|
+
e.next = newMap[index];
|
539
|
+
newMap[index] = e;
|
540
|
+
}
|
541
|
+
}
|
542
|
+
}
|
543
|
+
|
544
|
+
public Object put(int key, Object value) {
|
545
|
+
// Makes sure the key is not already in the hashtable.
|
546
|
+
Entry tab[] = table;
|
547
|
+
int hash = key;
|
548
|
+
int index = (hash & 0x7FFFFFFF) % tab.length;
|
549
|
+
for (Entry e = tab[index]; e != null; e = e.next) {
|
550
|
+
if (e.hash == hash) {
|
551
|
+
Object old = e.value;
|
552
|
+
e.value = value;
|
553
|
+
return old;
|
554
|
+
}
|
555
|
+
}
|
556
|
+
|
557
|
+
if (count >= threshold) {
|
558
|
+
// Rehash the table if the threshold is exceeded
|
559
|
+
rehash();
|
560
|
+
|
561
|
+
tab = table;
|
562
|
+
index = (hash & 0x7FFFFFFF) % tab.length;
|
563
|
+
}
|
564
|
+
|
565
|
+
// Creates the new entry.
|
566
|
+
Entry e = new Entry(hash, key, value, tab[index]);
|
567
|
+
tab[index] = e;
|
568
|
+
count++;
|
569
|
+
return null;
|
570
|
+
}
|
571
|
+
}
|
572
|
+
|
480
573
|
static class PrimitiveEntityMap implements EntityMap {
|
481
574
|
private Map mapNameToValue = new HashMap();
|
482
575
|
|
data/ext/fast_xs/fast_xs.c
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
#define VERSION "0.1"
|
2
|
-
|
3
1
|
#include <ruby.h>
|
4
2
|
#include <assert.h>
|
5
|
-
|
3
|
+
|
4
|
+
#ifdef HAVE_RUBY_ENCODING_H
|
5
|
+
#include <ruby/encoding.h>
|
6
|
+
# define ASSOCIATE_INDEX(s,enc) rb_enc_associate_index((s), rb_enc_to_index(enc))
|
7
|
+
#else
|
8
|
+
# define ASSOCIATE_INDEX(s,enc)
|
9
|
+
#endif
|
6
10
|
|
7
11
|
#ifndef RARRAY_LEN
|
8
12
|
#define RARRAY_LEN(arr) RARRAY(arr)->len
|
@@ -72,11 +76,6 @@ static const int cp_1252[] = {
|
|
72
76
|
n = cp_1252[n - 128]; \
|
73
77
|
} while(0)
|
74
78
|
|
75
|
-
#define return_const_len(x) do { \
|
76
|
-
memcpy(buf, x, sizeof(x) - 1); \
|
77
|
-
return (sizeof(x) - 1); \
|
78
|
-
} while (0)
|
79
|
-
|
80
79
|
static inline size_t bytes_for(int n)
|
81
80
|
{
|
82
81
|
if (n < 1000)
|
@@ -91,18 +90,24 @@ static inline size_t bytes_for(int n)
|
|
91
90
|
return sizeof("�") - 1;
|
92
91
|
}
|
93
92
|
|
94
|
-
static
|
93
|
+
static size_t escape(char *buf, int n)
|
95
94
|
{
|
95
|
+
|
96
|
+
#define return_const_len(x) do { \
|
97
|
+
memcpy(buf, x, sizeof(x) - 1); \
|
98
|
+
return (sizeof(x) - 1); \
|
99
|
+
} while (0)
|
100
|
+
|
96
101
|
/* handle ASCII first */
|
97
102
|
if (likely(n < 128)) {
|
98
|
-
if (likely(n >= 0x20 || n ==
|
99
|
-
if (unlikely(n ==
|
103
|
+
if (likely(n >= 0x20 || n == '\t' || n == '\n' || n == '\r')) {
|
104
|
+
if (unlikely(n == '"'))
|
100
105
|
return_const_len(""");
|
101
|
-
if (unlikely(n ==
|
106
|
+
if (unlikely(n == '&'))
|
102
107
|
return_const_len("&");
|
103
|
-
if (unlikely(n ==
|
108
|
+
if (unlikely(n == '<'))
|
104
109
|
return_const_len("<");
|
105
|
-
if (unlikely(n ==
|
110
|
+
if (unlikely(n == '>'))
|
106
111
|
return_const_len(">");
|
107
112
|
buf[0] = (char)n;
|
108
113
|
return 1;
|
@@ -112,16 +117,18 @@ static long escape(char *buf, int n)
|
|
112
117
|
return 1;
|
113
118
|
}
|
114
119
|
|
120
|
+
#undef return_const_len
|
121
|
+
|
115
122
|
CP_1252_ESCAPE(n);
|
116
123
|
|
117
124
|
if (VALID_VALUE(n)) {
|
118
125
|
/* return snprintf(buf, sizeof(""), "&#%i;", n); */
|
119
|
-
|
120
|
-
|
126
|
+
static const char digitmap[] = "0123456789";
|
127
|
+
size_t rv = sizeof("&#;") - 1;
|
121
128
|
buf += bytes_for(n);
|
122
129
|
*--buf = ';';
|
123
130
|
do {
|
124
|
-
*--buf =
|
131
|
+
*--buf = digitmap[(int)(n % 10)];
|
125
132
|
++rv;
|
126
133
|
} while (n /= 10);
|
127
134
|
*--buf = '#';
|
@@ -132,27 +139,6 @@ static long escape(char *buf, int n)
|
|
132
139
|
return 1;
|
133
140
|
}
|
134
141
|
|
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(""") - 1);
|
142
|
-
if (unlikely(n == 38))
|
143
|
-
return (sizeof("&") - 1);
|
144
|
-
if (unlikely(n == 60 || n == 62))
|
145
|
-
return (sizeof(">") - 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
142
|
static VALUE unpack_utf8(VALUE self)
|
157
143
|
{
|
158
144
|
return rb_funcall(self, unpack_id, 1, U_fmt);
|
@@ -163,28 +149,49 @@ static VALUE unpack_uchar(VALUE self)
|
|
163
149
|
return rb_funcall(self, unpack_id, 1, C_fmt);
|
164
150
|
}
|
165
151
|
|
166
|
-
|
152
|
+
/*
|
153
|
+
* escapes strings for XML
|
154
|
+
* The double-quote (") character is translated to """
|
155
|
+
*/
|
156
|
+
static VALUE fast_xs(VALUE self)
|
167
157
|
{
|
168
158
|
long i;
|
169
|
-
|
170
|
-
char *
|
171
|
-
|
159
|
+
VALUE array;
|
160
|
+
char *c;
|
161
|
+
size_t s_len;
|
172
162
|
VALUE *tmp;
|
163
|
+
VALUE rv;
|
164
|
+
|
165
|
+
array = rb_rescue(unpack_utf8, self, unpack_uchar, self);
|
166
|
+
|
167
|
+
for (tmp = RARRAY_PTR(array), s_len = i = RARRAY_LEN(array);
|
168
|
+
--i >= 0;
|
169
|
+
tmp++) {
|
170
|
+
int n = NUM2INT(*tmp);
|
171
|
+
if (likely(n < 128)) {
|
172
|
+
if (unlikely(n == '"'))
|
173
|
+
s_len += (sizeof(""") - 2);
|
174
|
+
if (unlikely(n == '&'))
|
175
|
+
s_len += (sizeof("&") - 2);
|
176
|
+
if (unlikely(n == '>' || n == '<'))
|
177
|
+
s_len += (sizeof(">") - 2);
|
178
|
+
continue;
|
179
|
+
}
|
173
180
|
|
174
|
-
|
181
|
+
CP_1252_ESCAPE(n);
|
175
182
|
|
176
|
-
|
177
|
-
|
178
|
-
|
183
|
+
if (VALID_VALUE(n))
|
184
|
+
s_len += bytes_for(n) - 1;
|
185
|
+
}
|
179
186
|
|
180
|
-
|
187
|
+
rv = rb_str_new(NULL, s_len);
|
188
|
+
ASSOCIATE_INDEX(rv, rb_default_external_encoding());
|
189
|
+
c = RSTRING_PTR(rv);
|
181
190
|
|
182
|
-
tmp = RARRAY_PTR(array);
|
183
|
-
for (i = RARRAY_LEN(array); --i >= 0; tmp++)
|
191
|
+
for (tmp = RARRAY_PTR(array), i = RARRAY_LEN(array); --i >= 0; tmp++)
|
184
192
|
c += escape(c, NUM2INT(*tmp));
|
185
193
|
|
186
|
-
|
187
|
-
return rb_str_new(s, s_len);
|
194
|
+
return rv;
|
188
195
|
}
|
189
196
|
|
190
197
|
void Init_fast_xs(void)
|
@@ -193,7 +200,9 @@ void Init_fast_xs(void)
|
|
193
200
|
|
194
201
|
unpack_id = rb_intern("unpack");
|
195
202
|
U_fmt = rb_str_new("U*", 2);
|
203
|
+
ASSOCIATE_INDEX(U_fmt, rb_ascii8bit_encoding());
|
196
204
|
C_fmt = rb_str_new("C*", 2);
|
205
|
+
ASSOCIATE_INDEX(C_fmt, rb_ascii8bit_encoding());
|
197
206
|
rb_global_variable(&U_fmt);
|
198
207
|
rb_global_variable(&C_fmt);
|
199
208
|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
|
1
2
|
// line 1 "hpricot_css.java.rl"
|
2
3
|
import java.io.IOException;
|
3
4
|
|
@@ -81,7 +82,7 @@ public class HpricotCss {
|
|
81
82
|
}
|
82
83
|
|
83
84
|
|
84
|
-
// line
|
85
|
+
// line 86 "HpricotCss.java"
|
85
86
|
private static byte[] init__hpricot_css_actions_0()
|
86
87
|
{
|
87
88
|
return new byte [] {
|
@@ -279,7 +280,7 @@ private static short[] init__hpricot_css_index_offsets_0()
|
|
279
280
|
private static final short _hpricot_css_index_offsets[] = init__hpricot_css_index_offsets_0();
|
280
281
|
|
281
282
|
|
282
|
-
private static byte[]
|
283
|
+
private static byte[] init__hpricot_css_trans_targs_0()
|
283
284
|
{
|
284
285
|
return new byte [] {
|
285
286
|
1, 89, 1, 87, 90, 3, 90, 4, 90, 90, 90, 5,
|
@@ -353,14 +354,22 @@ private static byte[] init__hpricot_css_trans_targs_wi_0()
|
|
353
354
|
93, 124, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8,
|
354
355
|
93, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8, 93,
|
355
356
|
126, 9, 93, 93, 93, 10, 11, 12, 87, 93, 8, 93,
|
356
|
-
9, 93, 93, 93, 10, 11, 12, 87,
|
357
|
+
9, 93, 93, 93, 10, 11, 12, 87, 87, 87, 87, 87,
|
358
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
359
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
360
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
361
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
362
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
363
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
364
|
+
87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87,
|
365
|
+
87, 87, 0
|
357
366
|
};
|
358
367
|
}
|
359
368
|
|
360
|
-
private static final byte
|
369
|
+
private static final byte _hpricot_css_trans_targs[] = init__hpricot_css_trans_targs_0();
|
361
370
|
|
362
371
|
|
363
|
-
private static byte[]
|
372
|
+
private static byte[] init__hpricot_css_trans_actions_0()
|
364
373
|
{
|
365
374
|
return new byte [] {
|
366
375
|
0, 0, 0, 33, 99, 1, 99, 1, 99, 99, 99, 1,
|
@@ -434,11 +443,19 @@ private static byte[] init__hpricot_css_trans_actions_wi_0()
|
|
434
443
|
79, 79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0,
|
435
444
|
79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0, 79,
|
436
445
|
79, 0, 79, 79, 79, 0, 0, 0, 58, 79, 0, 79,
|
437
|
-
0, 79, 79, 79, 0, 0, 0, 58,
|
446
|
+
0, 79, 79, 79, 0, 0, 0, 58, 33, 35, 35, 35,
|
447
|
+
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
|
448
|
+
31, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
|
449
|
+
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 29, 29,
|
450
|
+
27, 27, 27, 27, 27, 27, 27, 27, 25, 25, 25, 23,
|
451
|
+
21, 52, 19, 58, 58, 55, 67, 67, 64, 67, 67, 67,
|
452
|
+
67, 67, 67, 64, 67, 67, 67, 67, 67, 61, 67, 67,
|
453
|
+
67, 67, 67, 67, 67, 67, 67, 17, 17, 58, 58, 58,
|
454
|
+
58, 58, 0
|
438
455
|
};
|
439
456
|
}
|
440
457
|
|
441
|
-
private static final byte
|
458
|
+
private static final byte _hpricot_css_trans_actions[] = init__hpricot_css_trans_actions_0();
|
442
459
|
|
443
460
|
|
444
461
|
private static byte[] init__hpricot_css_to_state_actions_0()
|
@@ -484,17 +501,17 @@ private static final byte _hpricot_css_from_state_actions[] = init__hpricot_css_
|
|
484
501
|
private static short[] init__hpricot_css_eof_trans_0()
|
485
502
|
{
|
486
503
|
return new short [] {
|
487
|
-
0,
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
504
|
+
0, 861, 0, 898, 898, 898, 898, 898, 898, 898, 898, 898,
|
505
|
+
898, 0, 898, 898, 898, 898, 898, 0, 877, 898, 898, 898,
|
506
|
+
898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898, 898,
|
507
|
+
898, 898, 898, 898, 898, 898, 900, 900, 908, 908, 908, 908,
|
508
|
+
908, 908, 908, 908, 0, 0, 0, 0, 0, 0, 0, 911,
|
509
|
+
911, 0, 911, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
493
510
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
494
|
-
0, 0, 0, 0,
|
495
|
-
|
496
|
-
|
497
|
-
|
511
|
+
0, 0, 0, 0, 912, 913, 914, 915, 950, 950, 918, 943,
|
512
|
+
943, 928, 943, 943, 943, 943, 943, 943, 928, 943, 943, 943,
|
513
|
+
943, 943, 934, 943, 943, 943, 943, 943, 943, 943, 943, 943,
|
514
|
+
945, 945, 950, 950, 950, 950, 950
|
498
515
|
};
|
499
516
|
}
|
500
517
|
|
@@ -506,21 +523,23 @@ static final int hpricot_css_error = 0;
|
|
506
523
|
|
507
524
|
static final int hpricot_css_en_main = 87;
|
508
525
|
|
526
|
+
|
509
527
|
// line 147 "hpricot_css.java.rl"
|
510
528
|
|
511
529
|
|
512
530
|
public IRubyObject scan() {
|
513
531
|
|
514
|
-
// line
|
532
|
+
// line 533 "HpricotCss.java"
|
515
533
|
{
|
516
534
|
cs = hpricot_css_start;
|
517
535
|
ts = -1;
|
518
536
|
te = -1;
|
519
537
|
act = 0;
|
520
538
|
}
|
539
|
+
|
521
540
|
// line 151 "hpricot_css.java.rl"
|
522
541
|
|
523
|
-
// line
|
542
|
+
// line 543 "HpricotCss.java"
|
524
543
|
{
|
525
544
|
int _klen;
|
526
545
|
int _trans = 0;
|
@@ -546,10 +565,10 @@ case 1:
|
|
546
565
|
while ( _nacts-- > 0 ) {
|
547
566
|
switch ( _hpricot_css_actions[_acts++] ) {
|
548
567
|
case 6:
|
549
|
-
// line 1 "
|
568
|
+
// line 1 "NONE"
|
550
569
|
{ts = p;}
|
551
570
|
break;
|
552
|
-
// line
|
571
|
+
// line 572 "HpricotCss.java"
|
553
572
|
}
|
554
573
|
}
|
555
574
|
|
@@ -603,10 +622,10 @@ case 1:
|
|
603
622
|
} while (false);
|
604
623
|
|
605
624
|
case 3:
|
606
|
-
cs =
|
625
|
+
cs = _hpricot_css_trans_targs[_trans];
|
607
626
|
|
608
|
-
if (
|
609
|
-
_acts =
|
627
|
+
if ( _hpricot_css_trans_actions[_trans] != 0 ) {
|
628
|
+
_acts = _hpricot_css_trans_actions[_trans];
|
610
629
|
_nacts = (int) _hpricot_css_actions[_acts++];
|
611
630
|
while ( _nacts-- > 0 )
|
612
631
|
{
|
@@ -641,7 +660,7 @@ case 3:
|
|
641
660
|
}
|
642
661
|
break;
|
643
662
|
case 7:
|
644
|
-
// line 1 "
|
663
|
+
// line 1 "NONE"
|
645
664
|
{te = p+1;}
|
646
665
|
break;
|
647
666
|
case 8:
|
@@ -753,7 +772,7 @@ case 3:
|
|
753
772
|
{{p = ((te))-1;}}
|
754
773
|
break;
|
755
774
|
case 35:
|
756
|
-
// line 1 "
|
775
|
+
// line 1 "NONE"
|
757
776
|
{ switch( act ) {
|
758
777
|
case 0:
|
759
778
|
{{cs = 0; _goto_targ = 2; if (true) continue _goto;}}
|
@@ -776,11 +795,10 @@ case 3:
|
|
776
795
|
case 9:
|
777
796
|
{{p = ((te))-1;} FILTER("PSUEDO"); }
|
778
797
|
break;
|
779
|
-
default: break;
|
780
798
|
}
|
781
799
|
}
|
782
800
|
break;
|
783
|
-
// line
|
801
|
+
// line 802 "HpricotCss.java"
|
784
802
|
}
|
785
803
|
}
|
786
804
|
}
|
@@ -791,14 +809,14 @@ case 2:
|
|
791
809
|
while ( _nacts-- > 0 ) {
|
792
810
|
switch ( _hpricot_css_actions[_acts++] ) {
|
793
811
|
case 4:
|
794
|
-
// line 1 "
|
812
|
+
// line 1 "NONE"
|
795
813
|
{ts = -1;}
|
796
814
|
break;
|
797
815
|
case 5:
|
798
|
-
// line 1 "
|
816
|
+
// line 1 "NONE"
|
799
817
|
{act = 0;}
|
800
818
|
break;
|
801
|
-
// line
|
819
|
+
// line 820 "HpricotCss.java"
|
802
820
|
}
|
803
821
|
}
|
804
822
|
|
@@ -824,6 +842,7 @@ case 5:
|
|
824
842
|
}
|
825
843
|
break; }
|
826
844
|
}
|
845
|
+
|
827
846
|
// line 152 "hpricot_css.java.rl"
|
828
847
|
|
829
848
|
return focus;
|