hpricot 0.6.164 → 0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,115 @@
1
+ /*
2
+ * hpricot_css.rl
3
+ * ragel -C hpricot_css.rl -o hpricot_css.c
4
+ *
5
+ * Copyright (C) 2008 why the lucky stiff
6
+ */
7
+ #include <ruby.h>
8
+
9
+ #define FILTER(id) \
10
+ rb_funcall2(mod, rb_intern("" # id), fargs, fvals); \
11
+ rb_ary_clear(tmpt); \
12
+ fargs = 1
13
+ #define FILTERAUTO() \
14
+ char filt[10]; \
15
+ sprintf(filt, "%.*s", te - ts, ts); \
16
+ rb_funcall2(mod, rb_intern(filt), fargs, fvals); \
17
+ rb_ary_clear(tmpt); \
18
+ fargs = 1
19
+ #define PUSH(aps, ape) rb_ary_push(tmpt, fvals[fargs++] = rb_str_new(aps, ape - aps))
20
+ #define P(id) printf(id ": %.*s\n", te - ts, ts);
21
+
22
+ %%{
23
+ machine hpricot_css;
24
+
25
+ action a {
26
+ aps = p;
27
+ }
28
+
29
+ action b {
30
+ ape = p;
31
+ PUSH(aps, ape);
32
+ }
33
+
34
+ action c {
35
+ ape = p;
36
+ aps2 = p;
37
+ }
38
+
39
+ action d {
40
+ ape2 = p;
41
+ PUSH(aps, ape);
42
+ PUSH(aps2, ape2);
43
+ }
44
+
45
+ commas = space* "," space*;
46
+ traverse = [>+~];
47
+ sdot = "\\.";
48
+ utfw = alnum | "_" | "-" |
49
+ (0xc4 0xa8..0xbf) | (0xc5..0xdf 0x80..0xbf) |
50
+ (0xe0..0xef 0x80..0xbf 0x80..0xbf) |
51
+ (0xf0..0xf4 0x80..0xbf 0x80..0xbf 0x80..0xbf);
52
+ utfword = utfw+;
53
+ utfname = (utfw | sdot)+;
54
+ quote1 = "'" [^']* "'";
55
+ quote2 = '"' [^"]* '"';
56
+
57
+ cssid = "#" %a utfname %b;
58
+ cssclass = "." %a utfname %b;
59
+ cssname = "[name=" %a utfname %b "]";
60
+ cssattr = "[" %a utfname %c space* [^ \n\t]? "=" %d space* (quote1 | quote2 | [^\]]+) "]";
61
+ csstag = utfname >a %b;
62
+ cssmod = ("even" | "odd" | (digit | "n" | "+" | "-")* );
63
+ csschild = ":" %a ("only" | "nth" | "last" | "first") "-child" %b ("(" %a cssmod %b ")")?;
64
+ csspos = ":" %a ("nth" | "eq" | "gt" | "lt" | "first" | "last" | "even" | "odd") %b ("(" %a digit+ %b ")")?;
65
+ pseudop = "(" [^)]+ ")";
66
+ pseudoq = "'" (pseudop+ | [^'()]*) "'" |
67
+ '"' (pseudop+ | [^"()]*) '"' |
68
+ (pseudop+ | [^"()]*);
69
+ pseudo = ":" %a utfname %b ("(" %a pseudoq %b ")")?;
70
+
71
+ main := |*
72
+ cssid => { FILTER(ID); };
73
+ cssclass => { FILTER(CLASS); };
74
+ cssname => { FILTER(NAME); };
75
+ cssattr => { FILTER(ATTR); };
76
+ csstag => { FILTER(TAG); };
77
+ cssmod => { FILTER(MOD); };
78
+ csschild => { FILTER(CHILD); };
79
+ csspos => { FILTER(POS); };
80
+ pseudo => { FILTER(PSUEDO); };
81
+ commas => { focus = rb_ary_new3(1, node); };
82
+ traverse => { FILTERAUTO(); };
83
+ space;
84
+ *|;
85
+
86
+ write data nofinal;
87
+ }%%
88
+
89
+ VALUE hpricot_css(VALUE self, VALUE mod, VALUE str, VALUE node)
90
+ {
91
+ int cs, act, eof;
92
+ char *p, *pe, *ts, *te, *aps, *ape, *aps2, *ape2;
93
+
94
+ int fargs = 1;
95
+ VALUE fvals[6];
96
+ VALUE focus = rb_ary_new3(1, node);
97
+ VALUE tmpt = rb_ary_new();
98
+ rb_gc_register_address(&focus);
99
+ rb_gc_register_address(&tmpt);
100
+ fvals[0] = focus;
101
+
102
+ if (TYPE(str) != T_STRING)
103
+ rb_raise(rb_eArgError, "bad CSS selector, String only please.");
104
+
105
+ StringValue(str);
106
+ p = RSTRING_PTR(str);
107
+ pe = p + RSTRING_LEN(str);
108
+
109
+ %% write init;
110
+ %% write exec;
111
+
112
+ rb_gc_unregister_address(&focus);
113
+ rb_gc_unregister_address(&tmpt);
114
+ return focus;
115
+ }
@@ -15,21 +15,42 @@
15
15
  #define RSTRING_PTR(str) RSTRING(str)->ptr
16
16
  #endif
17
17
 
18
+ VALUE hpricot_css(VALUE, VALUE, VALUE, VALUE, VALUE);
19
+
18
20
  #define NO_WAY_SERIOUSLY "*** This should not happen, please send a bug report with the HTML you're parsing to why@whytheluckystiff.net. So sorry!"
19
21
 
20
22
  static VALUE sym_xmldecl, sym_doctype, sym_procins, sym_stag, sym_etag, sym_emptytag, sym_comment,
21
- sym_cdata, sym_text;
22
- static VALUE rb_eHpricotParseError;
23
- static ID s_read, s_to_str;
23
+ sym_cdata, sym_text, sym_EMPTY, sym_CDATA;
24
+ static VALUE mHpricot, rb_eHpricotParseError;
25
+ static VALUE cBaseEle, cBogusETag, cCData, cComment, cDoc, cDocType, cElem, cETag, cText,
26
+ cXMLDecl, cProcIns, symAllow, symDeny;
27
+ static ID s_ElementContent;
28
+ static ID s_downcase, s_new, s_parent, s_read, s_to_str;
29
+ static ID iv_parent;
30
+ static VALUE reProcInsParse;
31
+
32
+ typedef struct {
33
+ int name;
34
+ VALUE tag, attr, etag, raw, EC;
35
+ VALUE parent, children;
36
+ } hpricot_ele;
37
+
38
+ #define OPT(opts, key) (!NIL_P(opts) && RTEST(rb_hash_aref(opts, ID2SYM(rb_intern("" # key)))))
24
39
 
25
40
  #define ELE(N) \
26
41
  if (te > ts || text == 1) { \
27
- VALUE raw_string = Qnil; \
42
+ char *raw = NULL; \
43
+ int rawlen = 0; \
28
44
  ele_open = 0; text = 0; \
29
45
  if (ts != 0 && sym_##N != sym_cdata && sym_##N != sym_text && sym_##N != sym_procins && sym_##N != sym_comment) { \
30
- raw_string = rb_str_new(ts, te-ts); \
46
+ raw = ts; rawlen = te - ts; \
31
47
  } \
32
- rb_yield_tokens(sym_##N, tag, attr, raw_string, taint); \
48
+ if (rb_block_given_p()) { \
49
+ VALUE raw_string = Qnil; \
50
+ if (raw != NULL) raw_string = rb_str_new(raw, rawlen); \
51
+ rb_yield_tokens(sym_##N, tag, attr, Qnil, taint); \
52
+ } else \
53
+ rb_hpricot_token(S, sym_##N, tag, attr, raw, rawlen, taint); \
33
54
  }
34
55
 
35
56
  #define SET(N, E) \
@@ -40,7 +61,7 @@ static ID s_read, s_to_str;
40
61
 
41
62
  #define CAT(N, E) if (NIL_P(N)) { SET(N, E); } else { rb_str_cat(N, mark_##N, E - mark_##N); }
42
63
 
43
- #define SLIDE(N) if ( mark_##N > ts ) mark_##N = buf + (mark_##N - ts);
64
+ #define SLIDE(N) if (mark_##N > ts) mark_##N = buf + (mark_##N - ts);
44
65
 
45
66
  #define ATTR(K, V) \
46
67
  if (!NIL_P(K)) { \
@@ -66,11 +87,11 @@ static ID s_read, s_to_str;
66
87
 
67
88
  #define EBLK(N, T) CAT(tag, p - T + 1); ELE(N);
68
89
 
69
- #line 113 "hpricot_scan.rl"
90
+ #line 134 "hpricot_scan.rl"
70
91
 
71
92
 
72
93
 
73
- #line 74 "hpricot_scan.c"
94
+ #line 95 "hpricot_scan.c"
74
95
  static const int hpricot_scan_start = 204;
75
96
  static const int hpricot_scan_error = -1;
76
97
 
@@ -79,7 +100,7 @@ static const int hpricot_scan_en_html_cdata = 216;
79
100
  static const int hpricot_scan_en_html_procins = 218;
80
101
  static const int hpricot_scan_en_main = 204;
81
102
 
82
- #line 116 "hpricot_scan.rl"
103
+ #line 137 "hpricot_scan.rl"
83
104
 
84
105
  #define BUFSIZE 16384
85
106
 
@@ -99,29 +120,350 @@ void rb_yield_tokens(VALUE sym, VALUE tag, VALUE attr, VALUE raw, int taint)
99
120
  rb_yield(ary);
100
121
  }
101
122
 
102
- VALUE hpricot_scan(VALUE self, VALUE port)
123
+ /* rb_hash_lookup() is only in Ruby 1.8.7 */
124
+ static VALUE
125
+ our_rb_hash_lookup(VALUE hash, VALUE key)
126
+ {
127
+ VALUE val;
128
+
129
+ if (!st_lookup(RHASH(hash)->tbl, key, &val)) {
130
+ return Qnil; /* without Hash#default */
131
+ }
132
+
133
+ return val;
134
+ }
135
+
136
+ static void
137
+ rb_hpricot_add(VALUE focus, VALUE ele)
138
+ {
139
+ hpricot_ele *he, *he2;
140
+ Data_Get_Struct(focus, hpricot_ele, he);
141
+ Data_Get_Struct(ele, hpricot_ele, he2);
142
+ if (NIL_P(he->children))
143
+ he->children = rb_ary_new();
144
+ rb_ary_push(he->children, ele);
145
+ he2->parent = focus;
146
+ }
147
+
148
+ typedef struct {
149
+ VALUE doc;
150
+ VALUE focus;
151
+ VALUE last;
152
+ VALUE EC;
153
+ unsigned char xml, strict, fixup;
154
+ } hpricot_state;
155
+
156
+ static void
157
+ hpricot_ele_mark(hpricot_ele *he)
158
+ {
159
+ rb_gc_mark(he->tag);
160
+ rb_gc_mark(he->attr);
161
+ rb_gc_mark(he->etag);
162
+ rb_gc_mark(he->raw);
163
+ rb_gc_mark(he->parent);
164
+ rb_gc_mark(he->children);
165
+ }
166
+
167
+ static void
168
+ hpricot_ele_free(hpricot_ele *he)
169
+ {
170
+ free(he);
171
+ }
172
+
173
+ #define H_PROP(prop) \
174
+ static VALUE hpricot_ele_set_##prop(VALUE self, VALUE x) { \
175
+ hpricot_ele *he; \
176
+ Data_Get_Struct(self, hpricot_ele, he); \
177
+ he->prop = x; \
178
+ return self; \
179
+ } \
180
+ static VALUE hpricot_ele_get_##prop(VALUE self) { \
181
+ hpricot_ele *he; \
182
+ Data_Get_Struct(self, hpricot_ele, he); \
183
+ return he->prop; \
184
+ }
185
+
186
+ #define H_ATTR(prop) \
187
+ static VALUE hpricot_ele_set_##prop(VALUE self, VALUE x) { \
188
+ hpricot_ele *he; \
189
+ Data_Get_Struct(self, hpricot_ele, he); \
190
+ rb_hash_aset(he->attr, ID2SYM(rb_intern("" # prop)), x); \
191
+ return self; \
192
+ } \
193
+ static VALUE hpricot_ele_get_##prop(VALUE self) { \
194
+ hpricot_ele *he; \
195
+ Data_Get_Struct(self, hpricot_ele, he); \
196
+ return rb_hash_aref(he->attr, ID2SYM(rb_intern("" # prop))); \
197
+ }
198
+
199
+ H_PROP(tag);
200
+ H_PROP(attr);
201
+ H_PROP(etag);
202
+ H_PROP(parent);
203
+ H_PROP(children);
204
+ H_ATTR(encoding);
205
+ H_ATTR(version);
206
+ H_ATTR(standalone);
207
+ H_ATTR(system_id);
208
+ H_ATTR(public_id);
209
+
210
+ static VALUE
211
+ hpricot_ele_get_raw(VALUE self, VALUE x) {
212
+ hpricot_ele *he;
213
+ Data_Get_Struct(self, hpricot_ele, he);
214
+ return he->raw;
215
+ }
216
+
217
+ static VALUE
218
+ hpricot_ele_clear_raw(VALUE self)
219
+ {
220
+ hpricot_ele *he;
221
+ Data_Get_Struct(self, hpricot_ele, he);
222
+ he->raw = Qnil;
223
+ return Qtrue;
224
+ }
225
+
226
+ #define H_ELE(klass) \
227
+ hpricot_ele *he = ALLOC(hpricot_ele); \
228
+ he->name = 0; \
229
+ he->tag = tag; \
230
+ he->attr = attr; \
231
+ he->raw = Qnil; \
232
+ he->EC = ec; \
233
+ he->etag = he->parent = he->children = Qnil; \
234
+ if (raw != NULL && (sym == sym_emptytag || sym == sym_stag || sym == sym_etag || sym == sym_doctype)) { \
235
+ he->raw = rb_str_new(raw, rawlen); \
236
+ } \
237
+ ele = Data_Wrap_Struct(klass, hpricot_ele_mark, hpricot_ele_free, he); \
238
+ S->last = ele
239
+
240
+ VALUE
241
+ hpricot_ele_alloc(VALUE klass)
242
+ {
243
+ VALUE ele;
244
+ hpricot_ele *he = ALLOC(hpricot_ele);
245
+ he->name = 0;
246
+ he->tag = he->attr = he->raw = he->EC = Qnil;
247
+ he->etag = he->parent = he->children = Qnil;
248
+ ele = Data_Wrap_Struct(klass, hpricot_ele_mark, hpricot_ele_free, he);
249
+ return ele;
250
+ }
251
+
252
+ //
253
+ // the swift, compact parser logic. most of the complicated stuff is done
254
+ // in the lexer. this step just pairs up the start and end tags.
255
+ //
256
+ void
257
+ rb_hpricot_token(hpricot_state *S, VALUE sym, VALUE tag, VALUE attr, char *raw, int rawlen, int taint)
258
+ {
259
+ VALUE ele, ec = Qnil;
260
+
261
+ //
262
+ // in html mode, fix up start tags incorrectly formed as empty tags
263
+ //
264
+ if (!S->xml) {
265
+ hpricot_ele *last;
266
+ Data_Get_Struct(S->focus, hpricot_ele, last);
267
+ if (last->EC == sym_CDATA &&
268
+ (sym != sym_procins && sym != sym_comment && sym != sym_cdata && sym != sym_text) &&
269
+ !(sym == sym_etag && rb_str_hash(tag) == last->name))
270
+ {
271
+ sym = sym_text;
272
+ tag = rb_str_new(raw, rawlen);
273
+ }
274
+
275
+ if (sym == sym_emptytag || sym == sym_stag || sym == sym_etag) {
276
+ ec = rb_hash_aref(S->EC, tag);
277
+ if (NIL_P(ec)) {
278
+ tag = rb_funcall(tag, s_downcase, 0);
279
+ ec = rb_hash_aref(S->EC, tag);
280
+ }
281
+ if (sym == sym_emptytag) {
282
+ if (ec != sym_EMPTY)
283
+ sym = sym_stag;
284
+ } else if (sym == sym_stag) {
285
+ if (ec == sym_EMPTY)
286
+ sym = sym_emptytag;
287
+ }
288
+ }
289
+ }
290
+
291
+ if (sym == sym_emptytag || sym == sym_stag) {
292
+ H_ELE(cElem);
293
+ he->name = rb_str_hash(tag);
294
+
295
+ if (!S->xml) {
296
+ VALUE match = Qnil, e = S->focus;
297
+ while (e != S->doc)
298
+ {
299
+ hpricot_ele *hee;
300
+ Data_Get_Struct(e, hpricot_ele, hee);
301
+
302
+ if (TYPE(hee->EC) == T_HASH)
303
+ {
304
+ VALUE has = our_rb_hash_lookup(hee->EC, INT2NUM(he->name));
305
+ if (has != Qnil) {
306
+ if (has == Qtrue) {
307
+ if (match == Qnil)
308
+ match = e;
309
+ } else if (has == symAllow) {
310
+ match = S->focus;
311
+ } else if (has == symDeny) {
312
+ match = Qnil;
313
+ }
314
+ }
315
+ }
316
+
317
+ e = hee->parent;
318
+ }
319
+
320
+ if (match == Qnil)
321
+ match = S->focus;
322
+ S->focus = match;
323
+ }
324
+
325
+ rb_hpricot_add(S->focus, ele);
326
+
327
+ //
328
+ // in the case of a start tag that should be empty, just
329
+ // skip the step that focuses the element. focusing moves
330
+ // us deeper into the document.
331
+ //
332
+ if (sym == sym_stag) {
333
+ if (S->xml || ec != sym_EMPTY) {
334
+ S->focus = ele;
335
+ S->last = Qnil;
336
+ }
337
+ }
338
+ } else if (sym == sym_etag) {
339
+ int name;
340
+ VALUE match = Qnil, e = S->focus;
341
+ if (S->strict) {
342
+ if (NIL_P(rb_hash_aref(S->EC, tag))) {
343
+ tag = rb_str_new2("div");
344
+ }
345
+ }
346
+
347
+ //
348
+ // another optimization will be to improve this very simple
349
+ // O(n) tag search, where n is the depth of the focused tag.
350
+ //
351
+ // (see also: the search above for fixups)
352
+ //
353
+ name = rb_str_hash(tag);
354
+ while (e != S->doc)
355
+ {
356
+ hpricot_ele *he;
357
+ Data_Get_Struct(e, hpricot_ele, he);
358
+
359
+ if (he->name == name)
360
+ {
361
+ match = e;
362
+ break;
363
+ }
364
+
365
+ e = he->parent;
366
+ }
367
+
368
+ if (NIL_P(match))
369
+ {
370
+ H_ELE(cBogusETag);
371
+ rb_hpricot_add(S->focus, ele);
372
+ }
373
+ else
374
+ {
375
+ H_ELE(cETag);
376
+ Data_Get_Struct(match, hpricot_ele, he);
377
+ he->etag = ele;
378
+ S->focus = he->parent;
379
+ S->last = Qnil;
380
+ }
381
+ } else if (sym == sym_cdata) {
382
+ H_ELE(cCData);
383
+ rb_hpricot_add(S->focus, ele);
384
+ } else if (sym == sym_comment) {
385
+ H_ELE(cComment);
386
+ rb_hpricot_add(S->focus, ele);
387
+ } else if (sym == sym_doctype) {
388
+ H_ELE(cDocType);
389
+ if (S->strict) {
390
+ rb_hash_aset(attr, ID2SYM(rb_intern("system_id")), rb_str_new2("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"));
391
+ rb_hash_aset(attr, ID2SYM(rb_intern("public_id")), rb_str_new2("-//W3C//DTD XHTML 1.0 Strict//EN"));
392
+ }
393
+ rb_hpricot_add(S->focus, ele);
394
+ } else if (sym == sym_procins) {
395
+ VALUE match = rb_funcall(tag, rb_intern("match"), 1, reProcInsParse);
396
+ tag = rb_reg_nth_match(1, match);
397
+ attr = rb_reg_nth_match(2, match);
398
+ {
399
+ H_ELE(cProcIns);
400
+ rb_hpricot_add(S->focus, ele);
401
+ }
402
+ } else if (sym == sym_text) {
403
+ // TODO: add raw_string as well?
404
+ if (!NIL_P(S->last) && RBASIC(S->last)->klass == cText) {
405
+ hpricot_ele *he;
406
+ Data_Get_Struct(S->last, hpricot_ele, he);
407
+ rb_str_append(he->tag, tag);
408
+ } else {
409
+ H_ELE(cText);
410
+ rb_hpricot_add(S->focus, ele);
411
+ }
412
+ } else if (sym == sym_xmldecl) {
413
+ H_ELE(cXMLDecl);
414
+ rb_hpricot_add(S->focus, ele);
415
+ }
416
+ }
417
+
418
+ VALUE hpricot_scan(int argc, VALUE *argv, VALUE self)
103
419
  {
104
- int cs, act, have = 0, nread = 0, curline = 1, text = 0;
420
+ int cs, act, have = 0, nread = 0, curline = 1, text = 0, io = 0;
105
421
  char *ts = 0, *te = 0, *buf = NULL, *eof = NULL;
106
422
 
423
+ hpricot_state *S = NULL;
424
+ VALUE port, opts;
107
425
  VALUE attr = Qnil, tag = Qnil, akey = Qnil, aval = Qnil, bufsize = Qnil;
108
426
  char *mark_tag = 0, *mark_akey = 0, *mark_aval = 0;
109
- int done = 0, ele_open = 0, buffer_size = 0;
427
+ int done = 0, ele_open = 0, buffer_size = 0, taint = 0;
110
428
 
111
- int taint = OBJ_TAINTED( port );
112
- if ( !rb_respond_to( port, s_read ) )
429
+ rb_scan_args(argc, argv, "11", &port, &opts);
430
+ taint = OBJ_TAINTED(port);
431
+ io = rb_respond_to(port, s_read);
432
+ if (!io)
113
433
  {
114
- if ( rb_respond_to( port, s_to_str ) )
434
+ if (rb_respond_to(port, s_to_str))
115
435
  {
116
- port = rb_funcall( port, s_to_str, 0 );
436
+ port = rb_funcall(port, s_to_str, 0);
117
437
  StringValue(port);
118
438
  }
119
439
  else
120
440
  {
121
- rb_raise( rb_eArgError, "bad Hpricot argument, String or IO only please." );
441
+ rb_raise(rb_eArgError, "an Hpricot document must be built from an input source (a String or IO object.)");
122
442
  }
123
443
  }
124
444
 
445
+ if (TYPE(opts) != T_HASH)
446
+ opts = Qnil;
447
+
448
+ if (!rb_block_given_p())
449
+ {
450
+ hpricot_ele *he = ALLOC(hpricot_ele);
451
+ S = ALLOC(hpricot_state);
452
+ MEMZERO(he, hpricot_ele, 1);
453
+ he->tag = he->attr = he->etag = he->parent = he->children = Qnil;
454
+ S->doc = Data_Wrap_Struct(cDoc, hpricot_ele_mark, hpricot_ele_free, he);
455
+ rb_gc_register_address(&S->doc);
456
+ S->focus = S->doc;
457
+ S->last = Qnil;
458
+ S->xml = OPT(opts, xml);
459
+ S->strict = OPT(opts, xhtml_strict);
460
+ S->fixup = OPT(opts, fixup_tags);
461
+ if (S->strict) S->fixup = 1;
462
+ rb_ivar_set(S->doc, rb_intern("@options"), opts);
463
+
464
+ S->EC = rb_const_get(mHpricot, s_ElementContent);
465
+ }
466
+
125
467
  buffer_size = BUFSIZE;
126
468
  if (rb_ivar_defined(self, rb_intern("@buffer_size")) == Qtrue) {
127
469
  bufsize = rb_ivar_get(self, rb_intern("@buffer_size"));
@@ -129,53 +471,72 @@ VALUE hpricot_scan(VALUE self, VALUE port)
129
471
  buffer_size = NUM2INT(bufsize);
130
472
  }
131
473
  }
132
- buf = ALLOC_N(char, buffer_size);
474
+
475
+ if (io)
476
+ buf = ALLOC_N(char, buffer_size);
133
477
 
134
478
 
135
- #line 136 "hpricot_scan.c"
479
+ #line 480 "hpricot_scan.c"
136
480
  {
137
481
  cs = hpricot_scan_start;
138
482
  ts = 0;
139
483
  te = 0;
140
484
  act = 0;
141
485
  }
142
- #line 168 "hpricot_scan.rl"
486
+ #line 512 "hpricot_scan.rl"
143
487
 
144
- while ( !done ) {
488
+ while (!done) {
145
489
  VALUE str;
146
- char *p = buf + have, *pe;
147
- int len, space = buffer_size - have;
148
-
149
- if ( space == 0 ) {
150
- /* We've used up the entire buffer storing an already-parsed token
151
- * prefix that must be preserved. Likely caused by super-long attributes.
152
- * See ticket #13. */
153
- rb_raise(rb_eHpricotParseError, "ran out of buffer space on element <%s>, starting on line %d.", RSTRING_PTR(tag), curline);
154
- }
490
+ char *p, *pe;
491
+ int len, space = buffer_size - have, tokstart_diff, tokend_diff, mark_tag_diff, mark_akey_diff, mark_aval_diff;
155
492
 
156
- if ( rb_respond_to( port, s_read ) )
493
+ if (io)
157
494
  {
158
- str = rb_funcall( port, s_read, 1, INT2FIX(space) );
495
+ if (space == 0) {
496
+ /* We've used up the entire buffer storing an already-parsed token
497
+ * prefix that must be preserved. Likely caused by super-long attributes.
498
+ * Increase buffer size and continue */
499
+ tokstart_diff = ts - buf;
500
+ tokend_diff = te - buf;
501
+ mark_tag_diff = mark_tag - buf;
502
+ mark_akey_diff = mark_akey - buf;
503
+ mark_aval_diff = mark_aval - buf;
504
+
505
+ buffer_size += BUFSIZE;
506
+ REALLOC_N(buf, char, buffer_size);
507
+
508
+ space = buffer_size - have;
509
+
510
+ ts = buf + tokstart_diff;
511
+ te = buf + tokend_diff;
512
+ mark_tag = buf + mark_tag_diff;
513
+ mark_akey = buf + mark_akey_diff;
514
+ mark_aval = buf + mark_aval_diff;
515
+ }
516
+ p = buf + have;
517
+
518
+ str = rb_funcall(port, s_read, 1, INT2FIX(space));
519
+ len = RSTRING_LEN(str);
520
+ memcpy(p, StringValuePtr(str), len);
159
521
  }
160
522
  else
161
523
  {
162
- str = rb_str_substr( port, nread, space );
524
+ p = RSTRING_PTR(port);
525
+ len = RSTRING_LEN(port) + 1;
526
+ done = 1;
163
527
  }
164
528
 
165
- StringValue(str);
166
- memcpy( p, RSTRING_PTR(str), RSTRING_LEN(str) );
167
- len = RSTRING_LEN(str);
168
529
  nread += len;
169
530
 
170
531
  /* If this is the last buffer, tack on an EOF. */
171
- if ( len < space ) {
532
+ if (io && len < space) {
172
533
  p[len++] = 0;
173
534
  done = 1;
174
535
  }
175
536
 
176
537
  pe = p + len;
177
538
 
178
- #line 179 "hpricot_scan.c"
539
+ #line 540 "hpricot_scan.c"
179
540
  {
180
541
  if ( p == pe )
181
542
  goto _test_eof;
@@ -190,7 +551,7 @@ tr4:
190
551
  {te = p+1;{ {goto st214;} }}
191
552
  goto st204;
192
553
  tr15:
193
- #line 86 "hpricot_scan.rl"
554
+ #line 107 "hpricot_scan.rl"
194
555
  { SET(tag, p); }
195
556
  #line 66 "hpricot_scan.rl"
196
557
  {te = p+1;{ ELE(doctype); }}
@@ -222,7 +583,7 @@ tr93:
222
583
  {te = p+1;{ {goto st216;} }}
223
584
  goto st204;
224
585
  tr97:
225
- #line 86 "hpricot_scan.rl"
586
+ #line 107 "hpricot_scan.rl"
226
587
  { SET(tag, p); }
227
588
  #line 69 "hpricot_scan.rl"
228
589
  {te = p+1;{ ELE(etag); }}
@@ -232,7 +593,7 @@ tr99:
232
593
  {te = p+1;{ ELE(etag); }}
233
594
  goto st204;
234
595
  tr103:
235
- #line 86 "hpricot_scan.rl"
596
+ #line 107 "hpricot_scan.rl"
236
597
  { SET(tag, p); }
237
598
  #line 68 "hpricot_scan.rl"
238
599
  {te = p+1;{ ELE(stag); }}
@@ -242,9 +603,9 @@ tr107:
242
603
  {te = p+1;{ ELE(stag); }}
243
604
  goto st204;
244
605
  tr112:
245
- #line 93 "hpricot_scan.rl"
606
+ #line 114 "hpricot_scan.rl"
246
607
  { SET(akey, p); }
247
- #line 107 "hpricot_scan.rl"
608
+ #line 128 "hpricot_scan.rl"
248
609
  {
249
610
  ATTR(akey, aval);
250
611
  }
@@ -252,7 +613,7 @@ tr112:
252
613
  {te = p+1;{ ELE(stag); }}
253
614
  goto st204;
254
615
  tr117:
255
- #line 107 "hpricot_scan.rl"
616
+ #line 128 "hpricot_scan.rl"
256
617
  {
257
618
  ATTR(akey, aval);
258
619
  }
@@ -264,12 +625,12 @@ tr118:
264
625
  {te = p+1;{ ELE(emptytag); }}
265
626
  goto st204;
266
627
  tr129:
267
- #line 89 "hpricot_scan.rl"
628
+ #line 110 "hpricot_scan.rl"
268
629
  {
269
630
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
270
631
  else { SET(aval, p); }
271
632
  }
272
- #line 107 "hpricot_scan.rl"
633
+ #line 128 "hpricot_scan.rl"
273
634
  {
274
635
  ATTR(akey, aval);
275
636
  }
@@ -277,11 +638,11 @@ tr129:
277
638
  {te = p+1;{ ELE(stag); }}
278
639
  goto st204;
279
640
  tr133:
280
- #line 107 "hpricot_scan.rl"
641
+ #line 128 "hpricot_scan.rl"
281
642
  {
282
643
  ATTR(akey, aval);
283
644
  }
284
- #line 89 "hpricot_scan.rl"
645
+ #line 110 "hpricot_scan.rl"
285
646
  {
286
647
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
287
648
  else { SET(aval, p); }
@@ -290,14 +651,14 @@ tr133:
290
651
  {te = p+1;{ ELE(stag); }}
291
652
  goto st204;
292
653
  tr139:
293
- #line 89 "hpricot_scan.rl"
654
+ #line 110 "hpricot_scan.rl"
294
655
  {
295
656
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
296
657
  else { SET(aval, p); }
297
658
  }
298
- #line 93 "hpricot_scan.rl"
659
+ #line 114 "hpricot_scan.rl"
299
660
  { SET(akey, p); }
300
- #line 107 "hpricot_scan.rl"
661
+ #line 128 "hpricot_scan.rl"
301
662
  {
302
663
  ATTR(akey, aval);
303
664
  }
@@ -342,7 +703,7 @@ st204:
342
703
  case 204:
343
704
  #line 1 "hpricot_scan.rl"
344
705
  {ts = p;}
345
- #line 346 "hpricot_scan.c"
706
+ #line 707 "hpricot_scan.c"
346
707
  switch( (*p) ) {
347
708
  case 10: goto tr412;
348
709
  case 60: goto tr413;
@@ -351,7 +712,7 @@ case 204:
351
712
  tr413:
352
713
  #line 1 "hpricot_scan.rl"
353
714
  {te = p+1;}
354
- #line 71 "hpricot_scan.rl"
715
+ #line 92 "hpricot_scan.rl"
355
716
  {
356
717
  if (text == 1) {
357
718
  CAT(tag, p);
@@ -370,7 +731,7 @@ st205:
370
731
  if ( ++p == pe )
371
732
  goto _test_eof205;
372
733
  case 205:
373
- #line 374 "hpricot_scan.c"
734
+ #line 735 "hpricot_scan.c"
374
735
  switch( (*p) ) {
375
736
  case 33: goto st0;
376
737
  case 47: goto st59;
@@ -471,14 +832,14 @@ case 9:
471
832
  goto tr12;
472
833
  goto tr0;
473
834
  tr12:
474
- #line 83 "hpricot_scan.rl"
835
+ #line 104 "hpricot_scan.rl"
475
836
  { mark_tag = p; }
476
837
  goto st10;
477
838
  st10:
478
839
  if ( ++p == pe )
479
840
  goto _test_eof10;
480
841
  case 10:
481
- #line 482 "hpricot_scan.c"
842
+ #line 843 "hpricot_scan.c"
482
843
  switch( (*p) ) {
483
844
  case 32: goto tr13;
484
845
  case 62: goto tr15;
@@ -502,14 +863,14 @@ case 10:
502
863
  goto st10;
503
864
  goto tr0;
504
865
  tr13:
505
- #line 86 "hpricot_scan.rl"
866
+ #line 107 "hpricot_scan.rl"
506
867
  { SET(tag, p); }
507
868
  goto st11;
508
869
  st11:
509
870
  if ( ++p == pe )
510
871
  goto _test_eof11;
511
872
  case 11:
512
- #line 513 "hpricot_scan.c"
873
+ #line 874 "hpricot_scan.c"
513
874
  switch( (*p) ) {
514
875
  case 32: goto st11;
515
876
  case 62: goto tr18;
@@ -599,14 +960,14 @@ case 19:
599
960
  goto tr30;
600
961
  goto tr0;
601
962
  tr30:
602
- #line 84 "hpricot_scan.rl"
963
+ #line 105 "hpricot_scan.rl"
603
964
  { mark_aval = p; }
604
965
  goto st20;
605
966
  st20:
606
967
  if ( ++p == pe )
607
968
  goto _test_eof20;
608
969
  case 20:
609
- #line 610 "hpricot_scan.c"
970
+ #line 971 "hpricot_scan.c"
610
971
  switch( (*p) ) {
611
972
  case 9: goto st20;
612
973
  case 34: goto tr33;
@@ -626,20 +987,20 @@ case 20:
626
987
  goto st20;
627
988
  goto tr0;
628
989
  tr31:
629
- #line 84 "hpricot_scan.rl"
990
+ #line 105 "hpricot_scan.rl"
630
991
  { mark_aval = p; }
631
- #line 97 "hpricot_scan.rl"
632
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
992
+ #line 118 "hpricot_scan.rl"
993
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
633
994
  goto st21;
634
995
  tr33:
635
- #line 97 "hpricot_scan.rl"
636
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
996
+ #line 118 "hpricot_scan.rl"
997
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
637
998
  goto st21;
638
999
  st21:
639
1000
  if ( ++p == pe )
640
1001
  goto _test_eof21;
641
1002
  case 21:
642
- #line 643 "hpricot_scan.c"
1003
+ #line 1004 "hpricot_scan.c"
643
1004
  switch( (*p) ) {
644
1005
  case 32: goto st22;
645
1006
  case 62: goto tr18;
@@ -670,32 +1031,32 @@ case 23:
670
1031
  goto tr38;
671
1032
  goto tr37;
672
1033
  tr37:
673
- #line 84 "hpricot_scan.rl"
1034
+ #line 105 "hpricot_scan.rl"
674
1035
  { mark_aval = p; }
675
1036
  goto st24;
676
1037
  st24:
677
1038
  if ( ++p == pe )
678
1039
  goto _test_eof24;
679
1040
  case 24:
680
- #line 681 "hpricot_scan.c"
1041
+ #line 1042 "hpricot_scan.c"
681
1042
  if ( (*p) == 34 )
682
1043
  goto tr41;
683
1044
  goto st24;
684
1045
  tr38:
685
- #line 84 "hpricot_scan.rl"
1046
+ #line 105 "hpricot_scan.rl"
686
1047
  { mark_aval = p; }
687
- #line 98 "hpricot_scan.rl"
688
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1048
+ #line 119 "hpricot_scan.rl"
1049
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
689
1050
  goto st25;
690
1051
  tr41:
691
- #line 98 "hpricot_scan.rl"
692
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1052
+ #line 119 "hpricot_scan.rl"
1053
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
693
1054
  goto st25;
694
1055
  st25:
695
1056
  if ( ++p == pe )
696
1057
  goto _test_eof25;
697
1058
  case 25:
698
- #line 699 "hpricot_scan.c"
1059
+ #line 1060 "hpricot_scan.c"
699
1060
  switch( (*p) ) {
700
1061
  case 32: goto st25;
701
1062
  case 62: goto tr18;
@@ -705,14 +1066,14 @@ case 25:
705
1066
  goto st25;
706
1067
  goto tr39;
707
1068
  tr16:
708
- #line 86 "hpricot_scan.rl"
1069
+ #line 107 "hpricot_scan.rl"
709
1070
  { SET(tag, p); }
710
1071
  goto st26;
711
1072
  st26:
712
1073
  if ( ++p == pe )
713
1074
  goto _test_eof26;
714
1075
  case 26:
715
- #line 716 "hpricot_scan.c"
1076
+ #line 1077 "hpricot_scan.c"
716
1077
  if ( (*p) == 93 )
717
1078
  goto st27;
718
1079
  goto st26;
@@ -735,14 +1096,14 @@ case 28:
735
1096
  goto tr38;
736
1097
  goto tr44;
737
1098
  tr44:
738
- #line 84 "hpricot_scan.rl"
1099
+ #line 105 "hpricot_scan.rl"
739
1100
  { mark_aval = p; }
740
1101
  goto st29;
741
1102
  st29:
742
1103
  if ( ++p == pe )
743
1104
  goto _test_eof29;
744
1105
  case 29:
745
- #line 746 "hpricot_scan.c"
1106
+ #line 1107 "hpricot_scan.c"
746
1107
  if ( (*p) == 39 )
747
1108
  goto tr41;
748
1109
  goto st29;
@@ -772,14 +1133,14 @@ case 30:
772
1133
  goto tr46;
773
1134
  goto tr0;
774
1135
  tr46:
775
- #line 84 "hpricot_scan.rl"
1136
+ #line 105 "hpricot_scan.rl"
776
1137
  { mark_aval = p; }
777
1138
  goto st31;
778
1139
  st31:
779
1140
  if ( ++p == pe )
780
1141
  goto _test_eof31;
781
1142
  case 31:
782
- #line 783 "hpricot_scan.c"
1143
+ #line 1144 "hpricot_scan.c"
783
1144
  switch( (*p) ) {
784
1145
  case 9: goto st31;
785
1146
  case 39: goto tr49;
@@ -802,34 +1163,34 @@ case 31:
802
1163
  goto st31;
803
1164
  goto tr0;
804
1165
  tr47:
805
- #line 84 "hpricot_scan.rl"
1166
+ #line 105 "hpricot_scan.rl"
806
1167
  { mark_aval = p; }
807
- #line 97 "hpricot_scan.rl"
808
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
1168
+ #line 118 "hpricot_scan.rl"
1169
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
809
1170
  goto st32;
810
1171
  tr49:
811
- #line 97 "hpricot_scan.rl"
812
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
1172
+ #line 118 "hpricot_scan.rl"
1173
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
813
1174
  goto st32;
814
1175
  tr55:
815
- #line 97 "hpricot_scan.rl"
816
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
817
- #line 84 "hpricot_scan.rl"
1176
+ #line 118 "hpricot_scan.rl"
1177
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
1178
+ #line 105 "hpricot_scan.rl"
818
1179
  { mark_aval = p; }
819
- #line 98 "hpricot_scan.rl"
820
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1180
+ #line 119 "hpricot_scan.rl"
1181
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
821
1182
  goto st32;
822
1183
  tr82:
823
- #line 97 "hpricot_scan.rl"
824
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
825
- #line 98 "hpricot_scan.rl"
826
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1184
+ #line 118 "hpricot_scan.rl"
1185
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
1186
+ #line 119 "hpricot_scan.rl"
1187
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
827
1188
  goto st32;
828
1189
  st32:
829
1190
  if ( ++p == pe )
830
1191
  goto _test_eof32;
831
1192
  case 32:
832
- #line 833 "hpricot_scan.c"
1193
+ #line 1194 "hpricot_scan.c"
833
1194
  switch( (*p) ) {
834
1195
  case 9: goto st33;
835
1196
  case 32: goto st33;
@@ -883,20 +1244,20 @@ case 33:
883
1244
  goto st31;
884
1245
  goto tr0;
885
1246
  tr51:
886
- #line 97 "hpricot_scan.rl"
887
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
1247
+ #line 118 "hpricot_scan.rl"
1248
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
888
1249
  goto st34;
889
1250
  tr62:
890
- #line 97 "hpricot_scan.rl"
891
- { SET(aval, p); ATTR(rb_str_new2("public_id"), aval); }
892
- #line 98 "hpricot_scan.rl"
893
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1251
+ #line 118 "hpricot_scan.rl"
1252
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("public_id")), aval); }
1253
+ #line 119 "hpricot_scan.rl"
1254
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
894
1255
  goto st34;
895
1256
  st34:
896
1257
  if ( ++p == pe )
897
1258
  goto _test_eof34;
898
1259
  case 34:
899
- #line 900 "hpricot_scan.c"
1260
+ #line 1261 "hpricot_scan.c"
900
1261
  switch( (*p) ) {
901
1262
  case 9: goto tr52;
902
1263
  case 32: goto tr52;
@@ -922,14 +1283,14 @@ case 34:
922
1283
  goto tr54;
923
1284
  goto tr44;
924
1285
  tr52:
925
- #line 84 "hpricot_scan.rl"
1286
+ #line 105 "hpricot_scan.rl"
926
1287
  { mark_aval = p; }
927
1288
  goto st35;
928
1289
  st35:
929
1290
  if ( ++p == pe )
930
1291
  goto _test_eof35;
931
1292
  case 35:
932
- #line 933 "hpricot_scan.c"
1293
+ #line 1294 "hpricot_scan.c"
933
1294
  switch( (*p) ) {
934
1295
  case 9: goto st35;
935
1296
  case 32: goto st35;
@@ -955,14 +1316,14 @@ case 35:
955
1316
  goto st47;
956
1317
  goto st29;
957
1318
  tr53:
958
- #line 84 "hpricot_scan.rl"
1319
+ #line 105 "hpricot_scan.rl"
959
1320
  { mark_aval = p; }
960
1321
  goto st36;
961
1322
  st36:
962
1323
  if ( ++p == pe )
963
1324
  goto _test_eof36;
964
1325
  case 36:
965
- #line 966 "hpricot_scan.c"
1326
+ #line 1327 "hpricot_scan.c"
966
1327
  switch( (*p) ) {
967
1328
  case 32: goto st36;
968
1329
  case 34: goto st37;
@@ -983,38 +1344,38 @@ case 37:
983
1344
  }
984
1345
  goto tr66;
985
1346
  tr66:
986
- #line 84 "hpricot_scan.rl"
1347
+ #line 105 "hpricot_scan.rl"
987
1348
  { mark_aval = p; }
988
1349
  goto st38;
989
1350
  st38:
990
1351
  if ( ++p == pe )
991
1352
  goto _test_eof38;
992
1353
  case 38:
993
- #line 994 "hpricot_scan.c"
1354
+ #line 1355 "hpricot_scan.c"
994
1355
  switch( (*p) ) {
995
1356
  case 34: goto tr70;
996
1357
  case 39: goto tr71;
997
1358
  }
998
1359
  goto st38;
999
1360
  tr81:
1000
- #line 84 "hpricot_scan.rl"
1361
+ #line 105 "hpricot_scan.rl"
1001
1362
  { mark_aval = p; }
1002
1363
  goto st39;
1003
1364
  tr67:
1004
- #line 84 "hpricot_scan.rl"
1365
+ #line 105 "hpricot_scan.rl"
1005
1366
  { mark_aval = p; }
1006
- #line 98 "hpricot_scan.rl"
1007
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1367
+ #line 119 "hpricot_scan.rl"
1368
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
1008
1369
  goto st39;
1009
1370
  tr70:
1010
- #line 98 "hpricot_scan.rl"
1011
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1371
+ #line 119 "hpricot_scan.rl"
1372
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
1012
1373
  goto st39;
1013
1374
  st39:
1014
1375
  if ( ++p == pe )
1015
1376
  goto _test_eof39;
1016
1377
  case 39:
1017
- #line 1018 "hpricot_scan.c"
1378
+ #line 1379 "hpricot_scan.c"
1018
1379
  switch( (*p) ) {
1019
1380
  case 32: goto st39;
1020
1381
  case 39: goto tr41;
@@ -1027,7 +1388,7 @@ case 39:
1027
1388
  tr56:
1028
1389
  #line 1 "hpricot_scan.rl"
1029
1390
  {te = p+1;}
1030
- #line 84 "hpricot_scan.rl"
1391
+ #line 105 "hpricot_scan.rl"
1031
1392
  { mark_aval = p; }
1032
1393
  #line 66 "hpricot_scan.rl"
1033
1394
  {act = 8;}
@@ -1042,33 +1403,33 @@ st206:
1042
1403
  if ( ++p == pe )
1043
1404
  goto _test_eof206;
1044
1405
  case 206:
1045
- #line 1046 "hpricot_scan.c"
1406
+ #line 1407 "hpricot_scan.c"
1046
1407
  if ( (*p) == 39 )
1047
1408
  goto tr41;
1048
1409
  goto st29;
1049
1410
  tr57:
1050
- #line 84 "hpricot_scan.rl"
1411
+ #line 105 "hpricot_scan.rl"
1051
1412
  { mark_aval = p; }
1052
1413
  goto st40;
1053
1414
  st40:
1054
1415
  if ( ++p == pe )
1055
1416
  goto _test_eof40;
1056
1417
  case 40:
1057
- #line 1058 "hpricot_scan.c"
1418
+ #line 1419 "hpricot_scan.c"
1058
1419
  switch( (*p) ) {
1059
1420
  case 39: goto tr73;
1060
1421
  case 93: goto st42;
1061
1422
  }
1062
1423
  goto st40;
1063
1424
  tr73:
1064
- #line 98 "hpricot_scan.rl"
1065
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1425
+ #line 119 "hpricot_scan.rl"
1426
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
1066
1427
  goto st41;
1067
1428
  st41:
1068
1429
  if ( ++p == pe )
1069
1430
  goto _test_eof41;
1070
1431
  case 41:
1071
- #line 1072 "hpricot_scan.c"
1432
+ #line 1433 "hpricot_scan.c"
1072
1433
  switch( (*p) ) {
1073
1434
  case 32: goto st41;
1074
1435
  case 62: goto tr76;
@@ -1087,7 +1448,7 @@ st207:
1087
1448
  if ( ++p == pe )
1088
1449
  goto _test_eof207;
1089
1450
  case 207:
1090
- #line 1091 "hpricot_scan.c"
1451
+ #line 1452 "hpricot_scan.c"
1091
1452
  if ( (*p) == 93 )
1092
1453
  goto st27;
1093
1454
  goto st26;
@@ -1104,20 +1465,20 @@ case 42:
1104
1465
  goto st42;
1105
1466
  goto st29;
1106
1467
  tr68:
1107
- #line 84 "hpricot_scan.rl"
1468
+ #line 105 "hpricot_scan.rl"
1108
1469
  { mark_aval = p; }
1109
- #line 98 "hpricot_scan.rl"
1110
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1470
+ #line 119 "hpricot_scan.rl"
1471
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
1111
1472
  goto st43;
1112
1473
  tr71:
1113
- #line 98 "hpricot_scan.rl"
1114
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1474
+ #line 119 "hpricot_scan.rl"
1475
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
1115
1476
  goto st43;
1116
1477
  st43:
1117
1478
  if ( ++p == pe )
1118
1479
  goto _test_eof43;
1119
1480
  case 43:
1120
- #line 1121 "hpricot_scan.c"
1481
+ #line 1482 "hpricot_scan.c"
1121
1482
  switch( (*p) ) {
1122
1483
  case 32: goto st43;
1123
1484
  case 34: goto tr41;
@@ -1137,7 +1498,7 @@ st208:
1137
1498
  if ( ++p == pe )
1138
1499
  goto _test_eof208;
1139
1500
  case 208:
1140
- #line 1141 "hpricot_scan.c"
1501
+ #line 1502 "hpricot_scan.c"
1141
1502
  if ( (*p) == 34 )
1142
1503
  goto tr41;
1143
1504
  goto st24;
@@ -1163,14 +1524,14 @@ case 45:
1163
1524
  goto st45;
1164
1525
  goto st24;
1165
1526
  tr65:
1166
- #line 98 "hpricot_scan.rl"
1167
- { SET(aval, p); ATTR(rb_str_new2("system_id"), aval); }
1527
+ #line 119 "hpricot_scan.rl"
1528
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("system_id")), aval); }
1168
1529
  goto st46;
1169
1530
  st46:
1170
1531
  if ( ++p == pe )
1171
1532
  goto _test_eof46;
1172
1533
  case 46:
1173
- #line 1174 "hpricot_scan.c"
1534
+ #line 1535 "hpricot_scan.c"
1174
1535
  switch( (*p) ) {
1175
1536
  case 32: goto tr81;
1176
1537
  case 39: goto tr38;
@@ -1181,14 +1542,14 @@ case 46:
1181
1542
  goto tr81;
1182
1543
  goto tr44;
1183
1544
  tr54:
1184
- #line 84 "hpricot_scan.rl"
1545
+ #line 105 "hpricot_scan.rl"
1185
1546
  { mark_aval = p; }
1186
1547
  goto st47;
1187
1548
  st47:
1188
1549
  if ( ++p == pe )
1189
1550
  goto _test_eof47;
1190
1551
  case 47:
1191
- #line 1192 "hpricot_scan.c"
1552
+ #line 1553 "hpricot_scan.c"
1192
1553
  switch( (*p) ) {
1193
1554
  case 9: goto st47;
1194
1555
  case 39: goto tr82;
@@ -1302,14 +1663,14 @@ case 59:
1302
1663
  goto tr94;
1303
1664
  goto tr0;
1304
1665
  tr94:
1305
- #line 83 "hpricot_scan.rl"
1666
+ #line 104 "hpricot_scan.rl"
1306
1667
  { mark_tag = p; }
1307
1668
  goto st60;
1308
1669
  st60:
1309
1670
  if ( ++p == pe )
1310
1671
  goto _test_eof60;
1311
1672
  case 60:
1312
- #line 1313 "hpricot_scan.c"
1673
+ #line 1674 "hpricot_scan.c"
1313
1674
  switch( (*p) ) {
1314
1675
  case 32: goto tr95;
1315
1676
  case 62: goto tr97;
@@ -1332,14 +1693,14 @@ case 60:
1332
1693
  goto st60;
1333
1694
  goto tr0;
1334
1695
  tr95:
1335
- #line 86 "hpricot_scan.rl"
1696
+ #line 107 "hpricot_scan.rl"
1336
1697
  { SET(tag, p); }
1337
1698
  goto st61;
1338
1699
  st61:
1339
1700
  if ( ++p == pe )
1340
1701
  goto _test_eof61;
1341
1702
  case 61:
1342
- #line 1343 "hpricot_scan.c"
1703
+ #line 1704 "hpricot_scan.c"
1343
1704
  switch( (*p) ) {
1344
1705
  case 32: goto st61;
1345
1706
  case 62: goto tr99;
@@ -1348,14 +1709,14 @@ case 61:
1348
1709
  goto st61;
1349
1710
  goto tr0;
1350
1711
  tr417:
1351
- #line 83 "hpricot_scan.rl"
1712
+ #line 104 "hpricot_scan.rl"
1352
1713
  { mark_tag = p; }
1353
1714
  goto st62;
1354
1715
  st62:
1355
1716
  if ( ++p == pe )
1356
1717
  goto _test_eof62;
1357
1718
  case 62:
1358
- #line 1359 "hpricot_scan.c"
1719
+ #line 1720 "hpricot_scan.c"
1359
1720
  switch( (*p) ) {
1360
1721
  case 32: goto tr100;
1361
1722
  case 47: goto tr102;
@@ -1376,14 +1737,14 @@ case 62:
1376
1737
  goto st62;
1377
1738
  goto tr0;
1378
1739
  tr100:
1379
- #line 86 "hpricot_scan.rl"
1740
+ #line 107 "hpricot_scan.rl"
1380
1741
  { SET(tag, p); }
1381
1742
  goto st63;
1382
1743
  st63:
1383
1744
  if ( ++p == pe )
1384
1745
  goto _test_eof63;
1385
1746
  case 63:
1386
- #line 1387 "hpricot_scan.c"
1747
+ #line 1748 "hpricot_scan.c"
1387
1748
  switch( (*p) ) {
1388
1749
  case 32: goto st63;
1389
1750
  case 47: goto st66;
@@ -1404,36 +1765,36 @@ case 63:
1404
1765
  goto tr105;
1405
1766
  goto tr0;
1406
1767
  tr105:
1407
- #line 100 "hpricot_scan.rl"
1768
+ #line 121 "hpricot_scan.rl"
1408
1769
  {
1409
1770
  akey = Qnil;
1410
1771
  aval = Qnil;
1411
1772
  mark_akey = NULL;
1412
1773
  mark_aval = NULL;
1413
1774
  }
1414
- #line 85 "hpricot_scan.rl"
1775
+ #line 106 "hpricot_scan.rl"
1415
1776
  { mark_akey = p; }
1416
1777
  goto st64;
1417
1778
  tr114:
1418
- #line 107 "hpricot_scan.rl"
1779
+ #line 128 "hpricot_scan.rl"
1419
1780
  {
1420
1781
  ATTR(akey, aval);
1421
1782
  }
1422
- #line 100 "hpricot_scan.rl"
1783
+ #line 121 "hpricot_scan.rl"
1423
1784
  {
1424
1785
  akey = Qnil;
1425
1786
  aval = Qnil;
1426
1787
  mark_akey = NULL;
1427
1788
  mark_aval = NULL;
1428
1789
  }
1429
- #line 85 "hpricot_scan.rl"
1790
+ #line 106 "hpricot_scan.rl"
1430
1791
  { mark_akey = p; }
1431
1792
  goto st64;
1432
1793
  st64:
1433
1794
  if ( ++p == pe )
1434
1795
  goto _test_eof64;
1435
1796
  case 64:
1436
- #line 1437 "hpricot_scan.c"
1797
+ #line 1798 "hpricot_scan.c"
1437
1798
  switch( (*p) ) {
1438
1799
  case 32: goto tr108;
1439
1800
  case 47: goto tr110;
@@ -1455,20 +1816,20 @@ case 64:
1455
1816
  goto st64;
1456
1817
  goto tr39;
1457
1818
  tr108:
1458
- #line 93 "hpricot_scan.rl"
1819
+ #line 114 "hpricot_scan.rl"
1459
1820
  { SET(akey, p); }
1460
1821
  goto st65;
1461
1822
  tr140:
1462
- #line 89 "hpricot_scan.rl"
1823
+ #line 110 "hpricot_scan.rl"
1463
1824
  {
1464
1825
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1465
1826
  else { SET(aval, p); }
1466
1827
  }
1467
1828
  goto st65;
1468
1829
  tr134:
1469
- #line 93 "hpricot_scan.rl"
1830
+ #line 114 "hpricot_scan.rl"
1470
1831
  { SET(akey, p); }
1471
- #line 89 "hpricot_scan.rl"
1832
+ #line 110 "hpricot_scan.rl"
1472
1833
  {
1473
1834
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1474
1835
  else { SET(aval, p); }
@@ -1478,7 +1839,7 @@ st65:
1478
1839
  if ( ++p == pe )
1479
1840
  goto _test_eof65;
1480
1841
  case 65:
1481
- #line 1482 "hpricot_scan.c"
1842
+ #line 1843 "hpricot_scan.c"
1482
1843
  switch( (*p) ) {
1483
1844
  case 32: goto st65;
1484
1845
  case 47: goto tr115;
@@ -1500,19 +1861,19 @@ case 65:
1500
1861
  goto tr114;
1501
1862
  goto tr39;
1502
1863
  tr102:
1503
- #line 86 "hpricot_scan.rl"
1864
+ #line 107 "hpricot_scan.rl"
1504
1865
  { SET(tag, p); }
1505
1866
  goto st66;
1506
1867
  tr110:
1507
- #line 93 "hpricot_scan.rl"
1868
+ #line 114 "hpricot_scan.rl"
1508
1869
  { SET(akey, p); }
1509
- #line 107 "hpricot_scan.rl"
1870
+ #line 128 "hpricot_scan.rl"
1510
1871
  {
1511
1872
  ATTR(akey, aval);
1512
1873
  }
1513
1874
  goto st66;
1514
1875
  tr115:
1515
- #line 107 "hpricot_scan.rl"
1876
+ #line 128 "hpricot_scan.rl"
1516
1877
  {
1517
1878
  ATTR(akey, aval);
1518
1879
  }
@@ -1521,19 +1882,19 @@ st66:
1521
1882
  if ( ++p == pe )
1522
1883
  goto _test_eof66;
1523
1884
  case 66:
1524
- #line 1525 "hpricot_scan.c"
1885
+ #line 1886 "hpricot_scan.c"
1525
1886
  if ( (*p) == 62 )
1526
1887
  goto tr118;
1527
1888
  goto tr39;
1528
1889
  tr111:
1529
- #line 93 "hpricot_scan.rl"
1890
+ #line 114 "hpricot_scan.rl"
1530
1891
  { SET(akey, p); }
1531
1892
  goto st67;
1532
1893
  st67:
1533
1894
  if ( ++p == pe )
1534
1895
  goto _test_eof67;
1535
1896
  case 67:
1536
- #line 1537 "hpricot_scan.c"
1897
+ #line 1898 "hpricot_scan.c"
1537
1898
  switch( (*p) ) {
1538
1899
  case 13: goto tr120;
1539
1900
  case 32: goto tr120;
@@ -1550,14 +1911,14 @@ case 67:
1550
1911
  goto tr120;
1551
1912
  goto tr119;
1552
1913
  tr119:
1553
- #line 84 "hpricot_scan.rl"
1914
+ #line 105 "hpricot_scan.rl"
1554
1915
  { mark_aval = p; }
1555
1916
  goto st68;
1556
1917
  st68:
1557
1918
  if ( ++p == pe )
1558
1919
  goto _test_eof68;
1559
1920
  case 68:
1560
- #line 1561 "hpricot_scan.c"
1921
+ #line 1922 "hpricot_scan.c"
1561
1922
  switch( (*p) ) {
1562
1923
  case 13: goto tr126;
1563
1924
  case 32: goto tr126;
@@ -1572,27 +1933,27 @@ case 68:
1572
1933
  goto tr126;
1573
1934
  goto st68;
1574
1935
  tr126:
1575
- #line 89 "hpricot_scan.rl"
1936
+ #line 110 "hpricot_scan.rl"
1576
1937
  {
1577
1938
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1578
1939
  else { SET(aval, p); }
1579
1940
  }
1580
1941
  goto st69;
1581
1942
  tr331:
1582
- #line 84 "hpricot_scan.rl"
1943
+ #line 105 "hpricot_scan.rl"
1583
1944
  { mark_aval = p; }
1584
- #line 88 "hpricot_scan.rl"
1945
+ #line 109 "hpricot_scan.rl"
1585
1946
  { SET(aval, p); }
1586
1947
  goto st69;
1587
1948
  tr169:
1588
- #line 88 "hpricot_scan.rl"
1949
+ #line 109 "hpricot_scan.rl"
1589
1950
  { SET(aval, p); }
1590
1951
  goto st69;
1591
1952
  st69:
1592
1953
  if ( ++p == pe )
1593
1954
  goto _test_eof69;
1594
1955
  case 69:
1595
- #line 1596 "hpricot_scan.c"
1956
+ #line 1957 "hpricot_scan.c"
1596
1957
  switch( (*p) ) {
1597
1958
  case 32: goto st69;
1598
1959
  case 47: goto tr115;
@@ -1613,27 +1974,27 @@ case 69:
1613
1974
  goto tr114;
1614
1975
  goto tr39;
1615
1976
  tr127:
1616
- #line 89 "hpricot_scan.rl"
1977
+ #line 110 "hpricot_scan.rl"
1617
1978
  {
1618
1979
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1619
1980
  else { SET(aval, p); }
1620
1981
  }
1621
1982
  goto st70;
1622
1983
  tr155:
1623
- #line 84 "hpricot_scan.rl"
1984
+ #line 105 "hpricot_scan.rl"
1624
1985
  { mark_aval = p; }
1625
- #line 88 "hpricot_scan.rl"
1986
+ #line 109 "hpricot_scan.rl"
1626
1987
  { SET(aval, p); }
1627
1988
  goto st70;
1628
1989
  tr163:
1629
- #line 88 "hpricot_scan.rl"
1990
+ #line 109 "hpricot_scan.rl"
1630
1991
  { SET(aval, p); }
1631
1992
  goto st70;
1632
1993
  st70:
1633
1994
  if ( ++p == pe )
1634
1995
  goto _test_eof70;
1635
1996
  case 70:
1636
- #line 1637 "hpricot_scan.c"
1997
+ #line 1998 "hpricot_scan.c"
1637
1998
  switch( (*p) ) {
1638
1999
  case 13: goto tr126;
1639
2000
  case 32: goto tr126;
@@ -1659,42 +2020,42 @@ case 70:
1659
2020
  goto tr131;
1660
2021
  goto st68;
1661
2022
  tr131:
1662
- #line 107 "hpricot_scan.rl"
2023
+ #line 128 "hpricot_scan.rl"
1663
2024
  {
1664
2025
  ATTR(akey, aval);
1665
2026
  }
1666
- #line 100 "hpricot_scan.rl"
2027
+ #line 121 "hpricot_scan.rl"
1667
2028
  {
1668
2029
  akey = Qnil;
1669
2030
  aval = Qnil;
1670
2031
  mark_akey = NULL;
1671
2032
  mark_aval = NULL;
1672
2033
  }
1673
- #line 85 "hpricot_scan.rl"
2034
+ #line 106 "hpricot_scan.rl"
1674
2035
  { mark_akey = p; }
1675
2036
  goto st71;
1676
2037
  tr150:
1677
- #line 84 "hpricot_scan.rl"
2038
+ #line 105 "hpricot_scan.rl"
1678
2039
  { mark_aval = p; }
1679
- #line 107 "hpricot_scan.rl"
2040
+ #line 128 "hpricot_scan.rl"
1680
2041
  {
1681
2042
  ATTR(akey, aval);
1682
2043
  }
1683
- #line 100 "hpricot_scan.rl"
2044
+ #line 121 "hpricot_scan.rl"
1684
2045
  {
1685
2046
  akey = Qnil;
1686
2047
  aval = Qnil;
1687
2048
  mark_akey = NULL;
1688
2049
  mark_aval = NULL;
1689
2050
  }
1690
- #line 85 "hpricot_scan.rl"
2051
+ #line 106 "hpricot_scan.rl"
1691
2052
  { mark_akey = p; }
1692
2053
  goto st71;
1693
2054
  st71:
1694
2055
  if ( ++p == pe )
1695
2056
  goto _test_eof71;
1696
2057
  case 71:
1697
- #line 1698 "hpricot_scan.c"
2058
+ #line 2059 "hpricot_scan.c"
1698
2059
  switch( (*p) ) {
1699
2060
  case 13: goto tr134;
1700
2061
  case 32: goto tr134;
@@ -1721,16 +2082,16 @@ case 71:
1721
2082
  goto st71;
1722
2083
  goto st68;
1723
2084
  tr141:
1724
- #line 89 "hpricot_scan.rl"
2085
+ #line 110 "hpricot_scan.rl"
1725
2086
  {
1726
2087
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1727
2088
  else { SET(aval, p); }
1728
2089
  }
1729
2090
  goto st72;
1730
2091
  tr135:
1731
- #line 93 "hpricot_scan.rl"
2092
+ #line 114 "hpricot_scan.rl"
1732
2093
  { SET(akey, p); }
1733
- #line 89 "hpricot_scan.rl"
2094
+ #line 110 "hpricot_scan.rl"
1734
2095
  {
1735
2096
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1736
2097
  else { SET(aval, p); }
@@ -1740,7 +2101,7 @@ st72:
1740
2101
  if ( ++p == pe )
1741
2102
  goto _test_eof72;
1742
2103
  case 72:
1743
- #line 1744 "hpricot_scan.c"
2104
+ #line 2105 "hpricot_scan.c"
1744
2105
  switch( (*p) ) {
1745
2106
  case 13: goto tr140;
1746
2107
  case 32: goto tr140;
@@ -1767,69 +2128,69 @@ case 72:
1767
2128
  goto tr131;
1768
2129
  goto st68;
1769
2130
  tr124:
1770
- #line 84 "hpricot_scan.rl"
2131
+ #line 105 "hpricot_scan.rl"
1771
2132
  { mark_aval = p; }
1772
- #line 107 "hpricot_scan.rl"
2133
+ #line 128 "hpricot_scan.rl"
1773
2134
  {
1774
2135
  ATTR(akey, aval);
1775
2136
  }
1776
2137
  goto st73;
1777
2138
  tr128:
1778
- #line 89 "hpricot_scan.rl"
2139
+ #line 110 "hpricot_scan.rl"
1779
2140
  {
1780
2141
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1781
2142
  else { SET(aval, p); }
1782
2143
  }
1783
- #line 107 "hpricot_scan.rl"
2144
+ #line 128 "hpricot_scan.rl"
1784
2145
  {
1785
2146
  ATTR(akey, aval);
1786
2147
  }
1787
2148
  goto st73;
1788
2149
  tr132:
1789
- #line 107 "hpricot_scan.rl"
2150
+ #line 128 "hpricot_scan.rl"
1790
2151
  {
1791
2152
  ATTR(akey, aval);
1792
2153
  }
1793
- #line 89 "hpricot_scan.rl"
2154
+ #line 110 "hpricot_scan.rl"
1794
2155
  {
1795
2156
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1796
2157
  else { SET(aval, p); }
1797
2158
  }
1798
2159
  goto st73;
1799
2160
  tr137:
1800
- #line 89 "hpricot_scan.rl"
2161
+ #line 110 "hpricot_scan.rl"
1801
2162
  {
1802
2163
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1803
2164
  else { SET(aval, p); }
1804
2165
  }
1805
- #line 93 "hpricot_scan.rl"
2166
+ #line 114 "hpricot_scan.rl"
1806
2167
  { SET(akey, p); }
1807
- #line 107 "hpricot_scan.rl"
2168
+ #line 128 "hpricot_scan.rl"
1808
2169
  {
1809
2170
  ATTR(akey, aval);
1810
2171
  }
1811
2172
  goto st73;
1812
2173
  tr147:
1813
- #line 84 "hpricot_scan.rl"
2174
+ #line 105 "hpricot_scan.rl"
1814
2175
  { mark_aval = p; }
1815
- #line 89 "hpricot_scan.rl"
2176
+ #line 110 "hpricot_scan.rl"
1816
2177
  {
1817
2178
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1818
2179
  else { SET(aval, p); }
1819
2180
  }
1820
- #line 107 "hpricot_scan.rl"
2181
+ #line 128 "hpricot_scan.rl"
1821
2182
  {
1822
2183
  ATTR(akey, aval);
1823
2184
  }
1824
2185
  goto st73;
1825
2186
  tr151:
1826
- #line 84 "hpricot_scan.rl"
2187
+ #line 105 "hpricot_scan.rl"
1827
2188
  { mark_aval = p; }
1828
- #line 107 "hpricot_scan.rl"
2189
+ #line 128 "hpricot_scan.rl"
1829
2190
  {
1830
2191
  ATTR(akey, aval);
1831
2192
  }
1832
- #line 89 "hpricot_scan.rl"
2193
+ #line 110 "hpricot_scan.rl"
1833
2194
  {
1834
2195
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1835
2196
  else { SET(aval, p); }
@@ -1839,7 +2200,7 @@ st73:
1839
2200
  if ( ++p == pe )
1840
2201
  goto _test_eof73;
1841
2202
  case 73:
1842
- #line 1843 "hpricot_scan.c"
2203
+ #line 2204 "hpricot_scan.c"
1843
2204
  switch( (*p) ) {
1844
2205
  case 13: goto tr126;
1845
2206
  case 32: goto tr126;
@@ -1854,18 +2215,18 @@ case 73:
1854
2215
  goto tr126;
1855
2216
  goto st68;
1856
2217
  tr121:
1857
- #line 84 "hpricot_scan.rl"
2218
+ #line 105 "hpricot_scan.rl"
1858
2219
  { mark_aval = p; }
1859
2220
  goto st74;
1860
2221
  tr138:
1861
- #line 93 "hpricot_scan.rl"
2222
+ #line 114 "hpricot_scan.rl"
1862
2223
  { SET(akey, p); }
1863
2224
  goto st74;
1864
2225
  st74:
1865
2226
  if ( ++p == pe )
1866
2227
  goto _test_eof74;
1867
2228
  case 74:
1868
- #line 1869 "hpricot_scan.c"
2229
+ #line 2230 "hpricot_scan.c"
1869
2230
  switch( (*p) ) {
1870
2231
  case 13: goto tr143;
1871
2232
  case 32: goto tr143;
@@ -1882,13 +2243,13 @@ case 74:
1882
2243
  goto tr143;
1883
2244
  goto tr119;
1884
2245
  tr148:
1885
- #line 84 "hpricot_scan.rl"
2246
+ #line 105 "hpricot_scan.rl"
1886
2247
  { mark_aval = p; }
1887
2248
  goto st75;
1888
2249
  tr143:
1889
- #line 84 "hpricot_scan.rl"
2250
+ #line 105 "hpricot_scan.rl"
1890
2251
  { mark_aval = p; }
1891
- #line 89 "hpricot_scan.rl"
2252
+ #line 110 "hpricot_scan.rl"
1892
2253
  {
1893
2254
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1894
2255
  else { SET(aval, p); }
@@ -1898,7 +2259,7 @@ st75:
1898
2259
  if ( ++p == pe )
1899
2260
  goto _test_eof75;
1900
2261
  case 75:
1901
- #line 1902 "hpricot_scan.c"
2262
+ #line 2263 "hpricot_scan.c"
1902
2263
  switch( (*p) ) {
1903
2264
  case 13: goto tr148;
1904
2265
  case 32: goto tr148;
@@ -1926,13 +2287,13 @@ case 75:
1926
2287
  goto tr150;
1927
2288
  goto tr119;
1928
2289
  tr149:
1929
- #line 84 "hpricot_scan.rl"
2290
+ #line 105 "hpricot_scan.rl"
1930
2291
  { mark_aval = p; }
1931
2292
  goto st76;
1932
2293
  tr144:
1933
- #line 84 "hpricot_scan.rl"
2294
+ #line 105 "hpricot_scan.rl"
1934
2295
  { mark_aval = p; }
1935
- #line 89 "hpricot_scan.rl"
2296
+ #line 110 "hpricot_scan.rl"
1936
2297
  {
1937
2298
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
1938
2299
  else { SET(aval, p); }
@@ -1942,7 +2303,7 @@ st76:
1942
2303
  if ( ++p == pe )
1943
2304
  goto _test_eof76;
1944
2305
  case 76:
1945
- #line 1946 "hpricot_scan.c"
2306
+ #line 2307 "hpricot_scan.c"
1946
2307
  switch( (*p) ) {
1947
2308
  case 13: goto tr143;
1948
2309
  case 32: goto tr143;
@@ -1989,14 +2350,14 @@ case 77:
1989
2350
  goto tr153;
1990
2351
  goto tr152;
1991
2352
  tr152:
1992
- #line 84 "hpricot_scan.rl"
2353
+ #line 105 "hpricot_scan.rl"
1993
2354
  { mark_aval = p; }
1994
2355
  goto st78;
1995
2356
  st78:
1996
2357
  if ( ++p == pe )
1997
2358
  goto _test_eof78;
1998
2359
  case 78:
1999
- #line 2000 "hpricot_scan.c"
2360
+ #line 2361 "hpricot_scan.c"
2000
2361
  switch( (*p) ) {
2001
2362
  case 13: goto tr161;
2002
2363
  case 32: goto tr161;
@@ -2013,40 +2374,40 @@ case 78:
2013
2374
  goto tr161;
2014
2375
  goto st78;
2015
2376
  tr336:
2016
- #line 84 "hpricot_scan.rl"
2377
+ #line 105 "hpricot_scan.rl"
2017
2378
  { mark_aval = p; }
2018
2379
  goto st79;
2019
2380
  tr161:
2020
- #line 89 "hpricot_scan.rl"
2381
+ #line 110 "hpricot_scan.rl"
2021
2382
  {
2022
2383
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2023
2384
  else { SET(aval, p); }
2024
2385
  }
2025
2386
  goto st79;
2026
2387
  tr153:
2027
- #line 84 "hpricot_scan.rl"
2388
+ #line 105 "hpricot_scan.rl"
2028
2389
  { mark_aval = p; }
2029
- #line 89 "hpricot_scan.rl"
2390
+ #line 110 "hpricot_scan.rl"
2030
2391
  {
2031
2392
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2032
2393
  else { SET(aval, p); }
2033
2394
  }
2034
2395
  goto st79;
2035
2396
  tr317:
2036
- #line 84 "hpricot_scan.rl"
2397
+ #line 105 "hpricot_scan.rl"
2037
2398
  { mark_aval = p; }
2038
- #line 88 "hpricot_scan.rl"
2399
+ #line 109 "hpricot_scan.rl"
2039
2400
  { SET(aval, p); }
2040
2401
  goto st79;
2041
2402
  tr174:
2042
- #line 88 "hpricot_scan.rl"
2403
+ #line 109 "hpricot_scan.rl"
2043
2404
  { SET(aval, p); }
2044
2405
  goto st79;
2045
2406
  st79:
2046
2407
  if ( ++p == pe )
2047
2408
  goto _test_eof79;
2048
2409
  case 79:
2049
- #line 2050 "hpricot_scan.c"
2410
+ #line 2411 "hpricot_scan.c"
2050
2411
  switch( (*p) ) {
2051
2412
  case 32: goto st79;
2052
2413
  case 34: goto tr169;
@@ -2069,70 +2430,70 @@ case 79:
2069
2430
  goto tr170;
2070
2431
  goto st80;
2071
2432
  tr157:
2072
- #line 84 "hpricot_scan.rl"
2433
+ #line 105 "hpricot_scan.rl"
2073
2434
  { mark_aval = p; }
2074
2435
  goto st80;
2075
2436
  st80:
2076
2437
  if ( ++p == pe )
2077
2438
  goto _test_eof80;
2078
2439
  case 80:
2079
- #line 2080 "hpricot_scan.c"
2440
+ #line 2441 "hpricot_scan.c"
2080
2441
  switch( (*p) ) {
2081
2442
  case 34: goto tr169;
2082
2443
  case 92: goto st81;
2083
2444
  }
2084
2445
  goto st80;
2085
2446
  tr340:
2086
- #line 84 "hpricot_scan.rl"
2447
+ #line 105 "hpricot_scan.rl"
2087
2448
  { mark_aval = p; }
2088
2449
  goto st81;
2089
2450
  st81:
2090
2451
  if ( ++p == pe )
2091
2452
  goto _test_eof81;
2092
2453
  case 81:
2093
- #line 2094 "hpricot_scan.c"
2454
+ #line 2455 "hpricot_scan.c"
2094
2455
  switch( (*p) ) {
2095
2456
  case 34: goto tr174;
2096
2457
  case 92: goto st81;
2097
2458
  }
2098
2459
  goto st80;
2099
2460
  tr170:
2100
- #line 107 "hpricot_scan.rl"
2461
+ #line 128 "hpricot_scan.rl"
2101
2462
  {
2102
2463
  ATTR(akey, aval);
2103
2464
  }
2104
- #line 100 "hpricot_scan.rl"
2465
+ #line 121 "hpricot_scan.rl"
2105
2466
  {
2106
2467
  akey = Qnil;
2107
2468
  aval = Qnil;
2108
2469
  mark_akey = NULL;
2109
2470
  mark_aval = NULL;
2110
2471
  }
2111
- #line 85 "hpricot_scan.rl"
2472
+ #line 106 "hpricot_scan.rl"
2112
2473
  { mark_akey = p; }
2113
2474
  goto st82;
2114
2475
  tr337:
2115
- #line 84 "hpricot_scan.rl"
2476
+ #line 105 "hpricot_scan.rl"
2116
2477
  { mark_aval = p; }
2117
- #line 107 "hpricot_scan.rl"
2478
+ #line 128 "hpricot_scan.rl"
2118
2479
  {
2119
2480
  ATTR(akey, aval);
2120
2481
  }
2121
- #line 100 "hpricot_scan.rl"
2482
+ #line 121 "hpricot_scan.rl"
2122
2483
  {
2123
2484
  akey = Qnil;
2124
2485
  aval = Qnil;
2125
2486
  mark_akey = NULL;
2126
2487
  mark_aval = NULL;
2127
2488
  }
2128
- #line 85 "hpricot_scan.rl"
2489
+ #line 106 "hpricot_scan.rl"
2129
2490
  { mark_akey = p; }
2130
2491
  goto st82;
2131
2492
  st82:
2132
2493
  if ( ++p == pe )
2133
2494
  goto _test_eof82;
2134
2495
  case 82:
2135
- #line 2136 "hpricot_scan.c"
2496
+ #line 2497 "hpricot_scan.c"
2136
2497
  switch( (*p) ) {
2137
2498
  case 32: goto tr175;
2138
2499
  case 34: goto tr169;
@@ -2156,20 +2517,20 @@ case 82:
2156
2517
  goto st82;
2157
2518
  goto st80;
2158
2519
  tr175:
2159
- #line 93 "hpricot_scan.rl"
2520
+ #line 114 "hpricot_scan.rl"
2160
2521
  { SET(akey, p); }
2161
2522
  goto st83;
2162
2523
  tr206:
2163
- #line 89 "hpricot_scan.rl"
2524
+ #line 110 "hpricot_scan.rl"
2164
2525
  {
2165
2526
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2166
2527
  else { SET(aval, p); }
2167
2528
  }
2168
2529
  goto st83;
2169
2530
  tr200:
2170
- #line 93 "hpricot_scan.rl"
2531
+ #line 114 "hpricot_scan.rl"
2171
2532
  { SET(akey, p); }
2172
- #line 89 "hpricot_scan.rl"
2533
+ #line 110 "hpricot_scan.rl"
2173
2534
  {
2174
2535
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2175
2536
  else { SET(aval, p); }
@@ -2179,7 +2540,7 @@ st83:
2179
2540
  if ( ++p == pe )
2180
2541
  goto _test_eof83;
2181
2542
  case 83:
2182
- #line 2183 "hpricot_scan.c"
2543
+ #line 2544 "hpricot_scan.c"
2183
2544
  switch( (*p) ) {
2184
2545
  case 32: goto st83;
2185
2546
  case 34: goto tr169;
@@ -2203,23 +2564,23 @@ case 83:
2203
2564
  goto tr170;
2204
2565
  goto st80;
2205
2566
  tr177:
2206
- #line 93 "hpricot_scan.rl"
2567
+ #line 114 "hpricot_scan.rl"
2207
2568
  { SET(akey, p); }
2208
- #line 107 "hpricot_scan.rl"
2569
+ #line 128 "hpricot_scan.rl"
2209
2570
  {
2210
2571
  ATTR(akey, aval);
2211
2572
  }
2212
2573
  goto st84;
2213
2574
  tr171:
2214
- #line 107 "hpricot_scan.rl"
2575
+ #line 128 "hpricot_scan.rl"
2215
2576
  {
2216
2577
  ATTR(akey, aval);
2217
2578
  }
2218
2579
  goto st84;
2219
2580
  tr338:
2220
- #line 84 "hpricot_scan.rl"
2581
+ #line 105 "hpricot_scan.rl"
2221
2582
  { mark_aval = p; }
2222
- #line 107 "hpricot_scan.rl"
2583
+ #line 128 "hpricot_scan.rl"
2223
2584
  {
2224
2585
  ATTR(akey, aval);
2225
2586
  }
@@ -2228,7 +2589,7 @@ st84:
2228
2589
  if ( ++p == pe )
2229
2590
  goto _test_eof84;
2230
2591
  case 84:
2231
- #line 2232 "hpricot_scan.c"
2592
+ #line 2593 "hpricot_scan.c"
2232
2593
  switch( (*p) ) {
2233
2594
  case 34: goto tr169;
2234
2595
  case 62: goto tr182;
@@ -2238,14 +2599,14 @@ case 84:
2238
2599
  tr158:
2239
2600
  #line 1 "hpricot_scan.rl"
2240
2601
  {te = p+1;}
2241
- #line 84 "hpricot_scan.rl"
2602
+ #line 105 "hpricot_scan.rl"
2242
2603
  { mark_aval = p; }
2243
- #line 89 "hpricot_scan.rl"
2604
+ #line 110 "hpricot_scan.rl"
2244
2605
  {
2245
2606
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2246
2607
  else { SET(aval, p); }
2247
2608
  }
2248
- #line 107 "hpricot_scan.rl"
2609
+ #line 128 "hpricot_scan.rl"
2249
2610
  {
2250
2611
  ATTR(akey, aval);
2251
2612
  }
@@ -2255,12 +2616,12 @@ tr158:
2255
2616
  tr166:
2256
2617
  #line 1 "hpricot_scan.rl"
2257
2618
  {te = p+1;}
2258
- #line 89 "hpricot_scan.rl"
2619
+ #line 110 "hpricot_scan.rl"
2259
2620
  {
2260
2621
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2261
2622
  else { SET(aval, p); }
2262
2623
  }
2263
- #line 107 "hpricot_scan.rl"
2624
+ #line 128 "hpricot_scan.rl"
2264
2625
  {
2265
2626
  ATTR(akey, aval);
2266
2627
  }
@@ -2270,7 +2631,7 @@ tr166:
2270
2631
  tr172:
2271
2632
  #line 1 "hpricot_scan.rl"
2272
2633
  {te = p+1;}
2273
- #line 107 "hpricot_scan.rl"
2634
+ #line 128 "hpricot_scan.rl"
2274
2635
  {
2275
2636
  ATTR(akey, aval);
2276
2637
  }
@@ -2280,9 +2641,9 @@ tr172:
2280
2641
  tr179:
2281
2642
  #line 1 "hpricot_scan.rl"
2282
2643
  {te = p+1;}
2283
- #line 93 "hpricot_scan.rl"
2644
+ #line 114 "hpricot_scan.rl"
2284
2645
  { SET(akey, p); }
2285
- #line 107 "hpricot_scan.rl"
2646
+ #line 128 "hpricot_scan.rl"
2286
2647
  {
2287
2648
  ATTR(akey, aval);
2288
2649
  }
@@ -2298,11 +2659,11 @@ tr182:
2298
2659
  tr196:
2299
2660
  #line 1 "hpricot_scan.rl"
2300
2661
  {te = p+1;}
2301
- #line 107 "hpricot_scan.rl"
2662
+ #line 128 "hpricot_scan.rl"
2302
2663
  {
2303
2664
  ATTR(akey, aval);
2304
2665
  }
2305
- #line 89 "hpricot_scan.rl"
2666
+ #line 110 "hpricot_scan.rl"
2306
2667
  {
2307
2668
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2308
2669
  else { SET(aval, p); }
@@ -2313,13 +2674,13 @@ tr196:
2313
2674
  tr197:
2314
2675
  #line 1 "hpricot_scan.rl"
2315
2676
  {te = p+1;}
2316
- #line 84 "hpricot_scan.rl"
2677
+ #line 105 "hpricot_scan.rl"
2317
2678
  { mark_aval = p; }
2318
- #line 107 "hpricot_scan.rl"
2679
+ #line 128 "hpricot_scan.rl"
2319
2680
  {
2320
2681
  ATTR(akey, aval);
2321
2682
  }
2322
- #line 89 "hpricot_scan.rl"
2683
+ #line 110 "hpricot_scan.rl"
2323
2684
  {
2324
2685
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2325
2686
  else { SET(aval, p); }
@@ -2330,14 +2691,14 @@ tr197:
2330
2691
  tr205:
2331
2692
  #line 1 "hpricot_scan.rl"
2332
2693
  {te = p+1;}
2333
- #line 89 "hpricot_scan.rl"
2694
+ #line 110 "hpricot_scan.rl"
2334
2695
  {
2335
2696
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2336
2697
  else { SET(aval, p); }
2337
2698
  }
2338
- #line 93 "hpricot_scan.rl"
2699
+ #line 114 "hpricot_scan.rl"
2339
2700
  { SET(akey, p); }
2340
- #line 107 "hpricot_scan.rl"
2701
+ #line 128 "hpricot_scan.rl"
2341
2702
  {
2342
2703
  ATTR(akey, aval);
2343
2704
  }
@@ -2347,9 +2708,9 @@ tr205:
2347
2708
  tr339:
2348
2709
  #line 1 "hpricot_scan.rl"
2349
2710
  {te = p+1;}
2350
- #line 84 "hpricot_scan.rl"
2711
+ #line 105 "hpricot_scan.rl"
2351
2712
  { mark_aval = p; }
2352
- #line 107 "hpricot_scan.rl"
2713
+ #line 128 "hpricot_scan.rl"
2353
2714
  {
2354
2715
  ATTR(akey, aval);
2355
2716
  }
@@ -2360,21 +2721,21 @@ st209:
2360
2721
  if ( ++p == pe )
2361
2722
  goto _test_eof209;
2362
2723
  case 209:
2363
- #line 2364 "hpricot_scan.c"
2724
+ #line 2725 "hpricot_scan.c"
2364
2725
  switch( (*p) ) {
2365
2726
  case 34: goto tr169;
2366
2727
  case 92: goto st81;
2367
2728
  }
2368
2729
  goto st80;
2369
2730
  tr178:
2370
- #line 93 "hpricot_scan.rl"
2731
+ #line 114 "hpricot_scan.rl"
2371
2732
  { SET(akey, p); }
2372
2733
  goto st85;
2373
2734
  st85:
2374
2735
  if ( ++p == pe )
2375
2736
  goto _test_eof85;
2376
2737
  case 85:
2377
- #line 2378 "hpricot_scan.c"
2738
+ #line 2739 "hpricot_scan.c"
2378
2739
  switch( (*p) ) {
2379
2740
  case 13: goto tr183;
2380
2741
  case 32: goto tr183;
@@ -2392,14 +2753,14 @@ case 85:
2392
2753
  goto tr183;
2393
2754
  goto tr152;
2394
2755
  tr183:
2395
- #line 84 "hpricot_scan.rl"
2756
+ #line 105 "hpricot_scan.rl"
2396
2757
  { mark_aval = p; }
2397
2758
  goto st86;
2398
2759
  st86:
2399
2760
  if ( ++p == pe )
2400
2761
  goto _test_eof86;
2401
2762
  case 86:
2402
- #line 2403 "hpricot_scan.c"
2763
+ #line 2764 "hpricot_scan.c"
2403
2764
  switch( (*p) ) {
2404
2765
  case 13: goto tr188;
2405
2766
  case 32: goto tr188;
@@ -2417,13 +2778,13 @@ case 86:
2417
2778
  goto tr188;
2418
2779
  goto tr152;
2419
2780
  tr188:
2420
- #line 84 "hpricot_scan.rl"
2781
+ #line 105 "hpricot_scan.rl"
2421
2782
  { mark_aval = p; }
2422
2783
  goto st87;
2423
2784
  tr191:
2424
- #line 84 "hpricot_scan.rl"
2785
+ #line 105 "hpricot_scan.rl"
2425
2786
  { mark_aval = p; }
2426
- #line 89 "hpricot_scan.rl"
2787
+ #line 110 "hpricot_scan.rl"
2427
2788
  {
2428
2789
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2429
2790
  else { SET(aval, p); }
@@ -2433,7 +2794,7 @@ st87:
2433
2794
  if ( ++p == pe )
2434
2795
  goto _test_eof87;
2435
2796
  case 87:
2436
- #line 2437 "hpricot_scan.c"
2797
+ #line 2798 "hpricot_scan.c"
2437
2798
  switch( (*p) ) {
2438
2799
  case 13: goto tr188;
2439
2800
  case 32: goto tr188;
@@ -2462,13 +2823,13 @@ case 87:
2462
2823
  goto tr190;
2463
2824
  goto tr152;
2464
2825
  tr189:
2465
- #line 84 "hpricot_scan.rl"
2826
+ #line 105 "hpricot_scan.rl"
2466
2827
  { mark_aval = p; }
2467
2828
  goto st88;
2468
2829
  tr192:
2469
- #line 84 "hpricot_scan.rl"
2830
+ #line 105 "hpricot_scan.rl"
2470
2831
  { mark_aval = p; }
2471
- #line 89 "hpricot_scan.rl"
2832
+ #line 110 "hpricot_scan.rl"
2472
2833
  {
2473
2834
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2474
2835
  else { SET(aval, p); }
@@ -2478,7 +2839,7 @@ st88:
2478
2839
  if ( ++p == pe )
2479
2840
  goto _test_eof88;
2480
2841
  case 88:
2481
- #line 2482 "hpricot_scan.c"
2842
+ #line 2843 "hpricot_scan.c"
2482
2843
  switch( (*p) ) {
2483
2844
  case 13: goto tr191;
2484
2845
  case 32: goto tr191;
@@ -2507,14 +2868,14 @@ case 88:
2507
2868
  goto tr190;
2508
2869
  goto tr152;
2509
2870
  tr193:
2510
- #line 88 "hpricot_scan.rl"
2871
+ #line 109 "hpricot_scan.rl"
2511
2872
  { SET(aval, p); }
2512
2873
  goto st89;
2513
2874
  st89:
2514
2875
  if ( ++p == pe )
2515
2876
  goto _test_eof89;
2516
2877
  case 89:
2517
- #line 2518 "hpricot_scan.c"
2878
+ #line 2879 "hpricot_scan.c"
2518
2879
  switch( (*p) ) {
2519
2880
  case 13: goto tr153;
2520
2881
  case 32: goto tr153;
@@ -2542,36 +2903,36 @@ case 89:
2542
2903
  goto tr190;
2543
2904
  goto tr152;
2544
2905
  tr162:
2545
- #line 89 "hpricot_scan.rl"
2906
+ #line 110 "hpricot_scan.rl"
2546
2907
  {
2547
2908
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2548
2909
  else { SET(aval, p); }
2549
2910
  }
2550
2911
  goto st90;
2551
2912
  tr154:
2552
- #line 84 "hpricot_scan.rl"
2913
+ #line 105 "hpricot_scan.rl"
2553
2914
  { mark_aval = p; }
2554
- #line 89 "hpricot_scan.rl"
2915
+ #line 110 "hpricot_scan.rl"
2555
2916
  {
2556
2917
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2557
2918
  else { SET(aval, p); }
2558
2919
  }
2559
2920
  goto st90;
2560
2921
  tr214:
2561
- #line 84 "hpricot_scan.rl"
2922
+ #line 105 "hpricot_scan.rl"
2562
2923
  { mark_aval = p; }
2563
- #line 88 "hpricot_scan.rl"
2924
+ #line 109 "hpricot_scan.rl"
2564
2925
  { SET(aval, p); }
2565
2926
  goto st90;
2566
2927
  tr209:
2567
- #line 88 "hpricot_scan.rl"
2928
+ #line 109 "hpricot_scan.rl"
2568
2929
  { SET(aval, p); }
2569
2930
  goto st90;
2570
2931
  st90:
2571
2932
  if ( ++p == pe )
2572
2933
  goto _test_eof90;
2573
2934
  case 90:
2574
- #line 2575 "hpricot_scan.c"
2935
+ #line 2936 "hpricot_scan.c"
2575
2936
  switch( (*p) ) {
2576
2937
  case 13: goto tr161;
2577
2938
  case 32: goto tr161;
@@ -2599,42 +2960,42 @@ case 90:
2599
2960
  goto tr198;
2600
2961
  goto st78;
2601
2962
  tr198:
2602
- #line 107 "hpricot_scan.rl"
2963
+ #line 128 "hpricot_scan.rl"
2603
2964
  {
2604
2965
  ATTR(akey, aval);
2605
2966
  }
2606
- #line 100 "hpricot_scan.rl"
2967
+ #line 121 "hpricot_scan.rl"
2607
2968
  {
2608
2969
  akey = Qnil;
2609
2970
  aval = Qnil;
2610
2971
  mark_akey = NULL;
2611
2972
  mark_aval = NULL;
2612
2973
  }
2613
- #line 85 "hpricot_scan.rl"
2974
+ #line 106 "hpricot_scan.rl"
2614
2975
  { mark_akey = p; }
2615
2976
  goto st91;
2616
2977
  tr190:
2617
- #line 84 "hpricot_scan.rl"
2978
+ #line 105 "hpricot_scan.rl"
2618
2979
  { mark_aval = p; }
2619
- #line 107 "hpricot_scan.rl"
2980
+ #line 128 "hpricot_scan.rl"
2620
2981
  {
2621
2982
  ATTR(akey, aval);
2622
2983
  }
2623
- #line 100 "hpricot_scan.rl"
2984
+ #line 121 "hpricot_scan.rl"
2624
2985
  {
2625
2986
  akey = Qnil;
2626
2987
  aval = Qnil;
2627
2988
  mark_akey = NULL;
2628
2989
  mark_aval = NULL;
2629
2990
  }
2630
- #line 85 "hpricot_scan.rl"
2991
+ #line 106 "hpricot_scan.rl"
2631
2992
  { mark_akey = p; }
2632
2993
  goto st91;
2633
2994
  st91:
2634
2995
  if ( ++p == pe )
2635
2996
  goto _test_eof91;
2636
2997
  case 91:
2637
- #line 2638 "hpricot_scan.c"
2998
+ #line 2999 "hpricot_scan.c"
2638
2999
  switch( (*p) ) {
2639
3000
  case 13: goto tr200;
2640
3001
  case 32: goto tr200;
@@ -2663,16 +3024,16 @@ case 91:
2663
3024
  goto st91;
2664
3025
  goto st78;
2665
3026
  tr207:
2666
- #line 89 "hpricot_scan.rl"
3027
+ #line 110 "hpricot_scan.rl"
2667
3028
  {
2668
3029
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2669
3030
  else { SET(aval, p); }
2670
3031
  }
2671
3032
  goto st92;
2672
3033
  tr201:
2673
- #line 93 "hpricot_scan.rl"
3034
+ #line 114 "hpricot_scan.rl"
2674
3035
  { SET(akey, p); }
2675
- #line 89 "hpricot_scan.rl"
3036
+ #line 110 "hpricot_scan.rl"
2676
3037
  {
2677
3038
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2678
3039
  else { SET(aval, p); }
@@ -2682,7 +3043,7 @@ st92:
2682
3043
  if ( ++p == pe )
2683
3044
  goto _test_eof92;
2684
3045
  case 92:
2685
- #line 2686 "hpricot_scan.c"
3046
+ #line 3047 "hpricot_scan.c"
2686
3047
  switch( (*p) ) {
2687
3048
  case 13: goto tr206;
2688
3049
  case 32: goto tr206;
@@ -2711,69 +3072,69 @@ case 92:
2711
3072
  goto tr198;
2712
3073
  goto st78;
2713
3074
  tr187:
2714
- #line 84 "hpricot_scan.rl"
3075
+ #line 105 "hpricot_scan.rl"
2715
3076
  { mark_aval = p; }
2716
- #line 107 "hpricot_scan.rl"
3077
+ #line 128 "hpricot_scan.rl"
2717
3078
  {
2718
3079
  ATTR(akey, aval);
2719
3080
  }
2720
3081
  goto st93;
2721
3082
  tr164:
2722
- #line 89 "hpricot_scan.rl"
3083
+ #line 110 "hpricot_scan.rl"
2723
3084
  {
2724
3085
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2725
3086
  else { SET(aval, p); }
2726
3087
  }
2727
- #line 107 "hpricot_scan.rl"
3088
+ #line 128 "hpricot_scan.rl"
2728
3089
  {
2729
3090
  ATTR(akey, aval);
2730
3091
  }
2731
3092
  goto st93;
2732
3093
  tr199:
2733
- #line 107 "hpricot_scan.rl"
3094
+ #line 128 "hpricot_scan.rl"
2734
3095
  {
2735
3096
  ATTR(akey, aval);
2736
3097
  }
2737
- #line 89 "hpricot_scan.rl"
3098
+ #line 110 "hpricot_scan.rl"
2738
3099
  {
2739
3100
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2740
3101
  else { SET(aval, p); }
2741
3102
  }
2742
3103
  goto st93;
2743
3104
  tr203:
2744
- #line 89 "hpricot_scan.rl"
3105
+ #line 110 "hpricot_scan.rl"
2745
3106
  {
2746
3107
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2747
3108
  else { SET(aval, p); }
2748
3109
  }
2749
- #line 93 "hpricot_scan.rl"
3110
+ #line 114 "hpricot_scan.rl"
2750
3111
  { SET(akey, p); }
2751
- #line 107 "hpricot_scan.rl"
3112
+ #line 128 "hpricot_scan.rl"
2752
3113
  {
2753
3114
  ATTR(akey, aval);
2754
3115
  }
2755
3116
  goto st93;
2756
3117
  tr156:
2757
- #line 84 "hpricot_scan.rl"
3118
+ #line 105 "hpricot_scan.rl"
2758
3119
  { mark_aval = p; }
2759
- #line 89 "hpricot_scan.rl"
3120
+ #line 110 "hpricot_scan.rl"
2760
3121
  {
2761
3122
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2762
3123
  else { SET(aval, p); }
2763
3124
  }
2764
- #line 107 "hpricot_scan.rl"
3125
+ #line 128 "hpricot_scan.rl"
2765
3126
  {
2766
3127
  ATTR(akey, aval);
2767
3128
  }
2768
3129
  goto st93;
2769
3130
  tr195:
2770
- #line 84 "hpricot_scan.rl"
3131
+ #line 105 "hpricot_scan.rl"
2771
3132
  { mark_aval = p; }
2772
- #line 107 "hpricot_scan.rl"
3133
+ #line 128 "hpricot_scan.rl"
2773
3134
  {
2774
3135
  ATTR(akey, aval);
2775
3136
  }
2776
- #line 89 "hpricot_scan.rl"
3137
+ #line 110 "hpricot_scan.rl"
2777
3138
  {
2778
3139
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2779
3140
  else { SET(aval, p); }
@@ -2783,7 +3144,7 @@ st93:
2783
3144
  if ( ++p == pe )
2784
3145
  goto _test_eof93;
2785
3146
  case 93:
2786
- #line 2787 "hpricot_scan.c"
3147
+ #line 3148 "hpricot_scan.c"
2787
3148
  switch( (*p) ) {
2788
3149
  case 13: goto tr161;
2789
3150
  case 32: goto tr161;
@@ -2800,14 +3161,14 @@ case 93:
2800
3161
  goto tr161;
2801
3162
  goto st78;
2802
3163
  tr159:
2803
- #line 84 "hpricot_scan.rl"
3164
+ #line 105 "hpricot_scan.rl"
2804
3165
  { mark_aval = p; }
2805
3166
  goto st94;
2806
3167
  st94:
2807
3168
  if ( ++p == pe )
2808
3169
  goto _test_eof94;
2809
3170
  case 94:
2810
- #line 2811 "hpricot_scan.c"
3171
+ #line 3172 "hpricot_scan.c"
2811
3172
  switch( (*p) ) {
2812
3173
  case 13: goto tr161;
2813
3174
  case 32: goto tr161;
@@ -2824,18 +3185,18 @@ case 94:
2824
3185
  goto tr161;
2825
3186
  goto st78;
2826
3187
  tr184:
2827
- #line 84 "hpricot_scan.rl"
3188
+ #line 105 "hpricot_scan.rl"
2828
3189
  { mark_aval = p; }
2829
3190
  goto st95;
2830
3191
  tr204:
2831
- #line 93 "hpricot_scan.rl"
3192
+ #line 114 "hpricot_scan.rl"
2832
3193
  { SET(akey, p); }
2833
3194
  goto st95;
2834
3195
  st95:
2835
3196
  if ( ++p == pe )
2836
3197
  goto _test_eof95;
2837
3198
  case 95:
2838
- #line 2839 "hpricot_scan.c"
3199
+ #line 3200 "hpricot_scan.c"
2839
3200
  switch( (*p) ) {
2840
3201
  case 13: goto tr191;
2841
3202
  case 32: goto tr191;
@@ -2873,14 +3234,14 @@ case 96:
2873
3234
  goto tr211;
2874
3235
  goto tr210;
2875
3236
  tr210:
2876
- #line 84 "hpricot_scan.rl"
3237
+ #line 105 "hpricot_scan.rl"
2877
3238
  { mark_aval = p; }
2878
3239
  goto st97;
2879
3240
  st97:
2880
3241
  if ( ++p == pe )
2881
3242
  goto _test_eof97;
2882
3243
  case 97:
2883
- #line 2884 "hpricot_scan.c"
3244
+ #line 3245 "hpricot_scan.c"
2884
3245
  switch( (*p) ) {
2885
3246
  case 13: goto tr220;
2886
3247
  case 32: goto tr220;
@@ -2898,34 +3259,34 @@ case 97:
2898
3259
  goto tr220;
2899
3260
  goto st97;
2900
3261
  tr315:
2901
- #line 84 "hpricot_scan.rl"
3262
+ #line 105 "hpricot_scan.rl"
2902
3263
  { mark_aval = p; }
2903
3264
  goto st98;
2904
3265
  tr220:
2905
- #line 89 "hpricot_scan.rl"
3266
+ #line 110 "hpricot_scan.rl"
2906
3267
  {
2907
3268
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2908
3269
  else { SET(aval, p); }
2909
3270
  }
2910
3271
  goto st98;
2911
3272
  tr211:
2912
- #line 84 "hpricot_scan.rl"
3273
+ #line 105 "hpricot_scan.rl"
2913
3274
  { mark_aval = p; }
2914
- #line 89 "hpricot_scan.rl"
3275
+ #line 110 "hpricot_scan.rl"
2915
3276
  {
2916
3277
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2917
3278
  else { SET(aval, p); }
2918
3279
  }
2919
3280
  goto st98;
2920
3281
  tr299:
2921
- #line 88 "hpricot_scan.rl"
3282
+ #line 109 "hpricot_scan.rl"
2922
3283
  { SET(aval, p); }
2923
3284
  goto st98;
2924
3285
  st98:
2925
3286
  if ( ++p == pe )
2926
3287
  goto _test_eof98;
2927
3288
  case 98:
2928
- #line 2929 "hpricot_scan.c"
3289
+ #line 3290 "hpricot_scan.c"
2929
3290
  switch( (*p) ) {
2930
3291
  case 32: goto st98;
2931
3292
  case 34: goto tr228;
@@ -2949,14 +3310,14 @@ case 98:
2949
3310
  goto tr229;
2950
3311
  goto st99;
2951
3312
  tr216:
2952
- #line 84 "hpricot_scan.rl"
3313
+ #line 105 "hpricot_scan.rl"
2953
3314
  { mark_aval = p; }
2954
3315
  goto st99;
2955
3316
  st99:
2956
3317
  if ( ++p == pe )
2957
3318
  goto _test_eof99;
2958
3319
  case 99:
2959
- #line 2960 "hpricot_scan.c"
3320
+ #line 3321 "hpricot_scan.c"
2960
3321
  switch( (*p) ) {
2961
3322
  case 34: goto tr228;
2962
3323
  case 39: goto tr174;
@@ -2964,46 +3325,46 @@ case 99:
2964
3325
  }
2965
3326
  goto st99;
2966
3327
  tr330:
2967
- #line 84 "hpricot_scan.rl"
3328
+ #line 105 "hpricot_scan.rl"
2968
3329
  { mark_aval = p; }
2969
3330
  goto st100;
2970
3331
  tr255:
2971
- #line 89 "hpricot_scan.rl"
3332
+ #line 110 "hpricot_scan.rl"
2972
3333
  {
2973
3334
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2974
3335
  else { SET(aval, p); }
2975
3336
  }
2976
3337
  goto st100;
2977
3338
  tr326:
2978
- #line 84 "hpricot_scan.rl"
3339
+ #line 105 "hpricot_scan.rl"
2979
3340
  { mark_aval = p; }
2980
- #line 89 "hpricot_scan.rl"
3341
+ #line 110 "hpricot_scan.rl"
2981
3342
  {
2982
3343
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
2983
3344
  else { SET(aval, p); }
2984
3345
  }
2985
3346
  goto st100;
2986
3347
  tr316:
2987
- #line 84 "hpricot_scan.rl"
3348
+ #line 105 "hpricot_scan.rl"
2988
3349
  { mark_aval = p; }
2989
- #line 88 "hpricot_scan.rl"
3350
+ #line 109 "hpricot_scan.rl"
2990
3351
  { SET(aval, p); }
2991
3352
  goto st100;
2992
3353
  tr228:
2993
- #line 88 "hpricot_scan.rl"
3354
+ #line 109 "hpricot_scan.rl"
2994
3355
  { SET(aval, p); }
2995
3356
  goto st100;
2996
3357
  tr322:
2997
- #line 88 "hpricot_scan.rl"
3358
+ #line 109 "hpricot_scan.rl"
2998
3359
  { SET(aval, p); }
2999
- #line 84 "hpricot_scan.rl"
3360
+ #line 105 "hpricot_scan.rl"
3000
3361
  { mark_aval = p; }
3001
3362
  goto st100;
3002
3363
  st100:
3003
3364
  if ( ++p == pe )
3004
3365
  goto _test_eof100;
3005
3366
  case 100:
3006
- #line 3007 "hpricot_scan.c"
3367
+ #line 3368 "hpricot_scan.c"
3007
3368
  switch( (*p) ) {
3008
3369
  case 32: goto st100;
3009
3370
  case 39: goto tr169;
@@ -3026,70 +3387,70 @@ case 100:
3026
3387
  goto tr235;
3027
3388
  goto st101;
3028
3389
  tr328:
3029
- #line 84 "hpricot_scan.rl"
3390
+ #line 105 "hpricot_scan.rl"
3030
3391
  { mark_aval = p; }
3031
3392
  goto st101;
3032
3393
  st101:
3033
3394
  if ( ++p == pe )
3034
3395
  goto _test_eof101;
3035
3396
  case 101:
3036
- #line 3037 "hpricot_scan.c"
3397
+ #line 3398 "hpricot_scan.c"
3037
3398
  switch( (*p) ) {
3038
3399
  case 39: goto tr169;
3039
3400
  case 92: goto st102;
3040
3401
  }
3041
3402
  goto st101;
3042
3403
  tr335:
3043
- #line 84 "hpricot_scan.rl"
3404
+ #line 105 "hpricot_scan.rl"
3044
3405
  { mark_aval = p; }
3045
3406
  goto st102;
3046
3407
  st102:
3047
3408
  if ( ++p == pe )
3048
3409
  goto _test_eof102;
3049
3410
  case 102:
3050
- #line 3051 "hpricot_scan.c"
3411
+ #line 3412 "hpricot_scan.c"
3051
3412
  switch( (*p) ) {
3052
3413
  case 39: goto tr228;
3053
3414
  case 92: goto st102;
3054
3415
  }
3055
3416
  goto st101;
3056
3417
  tr235:
3057
- #line 107 "hpricot_scan.rl"
3418
+ #line 128 "hpricot_scan.rl"
3058
3419
  {
3059
3420
  ATTR(akey, aval);
3060
3421
  }
3061
- #line 100 "hpricot_scan.rl"
3422
+ #line 121 "hpricot_scan.rl"
3062
3423
  {
3063
3424
  akey = Qnil;
3064
3425
  aval = Qnil;
3065
3426
  mark_akey = NULL;
3066
3427
  mark_aval = NULL;
3067
3428
  }
3068
- #line 85 "hpricot_scan.rl"
3429
+ #line 106 "hpricot_scan.rl"
3069
3430
  { mark_akey = p; }
3070
3431
  goto st103;
3071
3432
  tr332:
3072
- #line 84 "hpricot_scan.rl"
3433
+ #line 105 "hpricot_scan.rl"
3073
3434
  { mark_aval = p; }
3074
- #line 107 "hpricot_scan.rl"
3435
+ #line 128 "hpricot_scan.rl"
3075
3436
  {
3076
3437
  ATTR(akey, aval);
3077
3438
  }
3078
- #line 100 "hpricot_scan.rl"
3439
+ #line 121 "hpricot_scan.rl"
3079
3440
  {
3080
3441
  akey = Qnil;
3081
3442
  aval = Qnil;
3082
3443
  mark_akey = NULL;
3083
3444
  mark_aval = NULL;
3084
3445
  }
3085
- #line 85 "hpricot_scan.rl"
3446
+ #line 106 "hpricot_scan.rl"
3086
3447
  { mark_akey = p; }
3087
3448
  goto st103;
3088
3449
  st103:
3089
3450
  if ( ++p == pe )
3090
3451
  goto _test_eof103;
3091
3452
  case 103:
3092
- #line 3093 "hpricot_scan.c"
3453
+ #line 3454 "hpricot_scan.c"
3093
3454
  switch( (*p) ) {
3094
3455
  case 32: goto tr239;
3095
3456
  case 39: goto tr169;
@@ -3113,20 +3474,20 @@ case 103:
3113
3474
  goto st103;
3114
3475
  goto st101;
3115
3476
  tr239:
3116
- #line 93 "hpricot_scan.rl"
3477
+ #line 114 "hpricot_scan.rl"
3117
3478
  { SET(akey, p); }
3118
3479
  goto st104;
3119
3480
  tr269:
3120
- #line 89 "hpricot_scan.rl"
3481
+ #line 110 "hpricot_scan.rl"
3121
3482
  {
3122
3483
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3123
3484
  else { SET(aval, p); }
3124
3485
  }
3125
3486
  goto st104;
3126
3487
  tr263:
3127
- #line 93 "hpricot_scan.rl"
3488
+ #line 114 "hpricot_scan.rl"
3128
3489
  { SET(akey, p); }
3129
- #line 89 "hpricot_scan.rl"
3490
+ #line 110 "hpricot_scan.rl"
3130
3491
  {
3131
3492
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3132
3493
  else { SET(aval, p); }
@@ -3136,7 +3497,7 @@ st104:
3136
3497
  if ( ++p == pe )
3137
3498
  goto _test_eof104;
3138
3499
  case 104:
3139
- #line 3140 "hpricot_scan.c"
3500
+ #line 3501 "hpricot_scan.c"
3140
3501
  switch( (*p) ) {
3141
3502
  case 32: goto st104;
3142
3503
  case 39: goto tr169;
@@ -3160,23 +3521,23 @@ case 104:
3160
3521
  goto tr235;
3161
3522
  goto st101;
3162
3523
  tr241:
3163
- #line 93 "hpricot_scan.rl"
3524
+ #line 114 "hpricot_scan.rl"
3164
3525
  { SET(akey, p); }
3165
- #line 107 "hpricot_scan.rl"
3526
+ #line 128 "hpricot_scan.rl"
3166
3527
  {
3167
3528
  ATTR(akey, aval);
3168
3529
  }
3169
3530
  goto st105;
3170
3531
  tr236:
3171
- #line 107 "hpricot_scan.rl"
3532
+ #line 128 "hpricot_scan.rl"
3172
3533
  {
3173
3534
  ATTR(akey, aval);
3174
3535
  }
3175
3536
  goto st105;
3176
3537
  tr333:
3177
- #line 84 "hpricot_scan.rl"
3538
+ #line 105 "hpricot_scan.rl"
3178
3539
  { mark_aval = p; }
3179
- #line 107 "hpricot_scan.rl"
3540
+ #line 128 "hpricot_scan.rl"
3180
3541
  {
3181
3542
  ATTR(akey, aval);
3182
3543
  }
@@ -3185,7 +3546,7 @@ st105:
3185
3546
  if ( ++p == pe )
3186
3547
  goto _test_eof105;
3187
3548
  case 105:
3188
- #line 3189 "hpricot_scan.c"
3549
+ #line 3550 "hpricot_scan.c"
3189
3550
  switch( (*p) ) {
3190
3551
  case 39: goto tr169;
3191
3552
  case 62: goto tr246;
@@ -3195,14 +3556,14 @@ case 105:
3195
3556
  tr341:
3196
3557
  #line 1 "hpricot_scan.rl"
3197
3558
  {te = p+1;}
3198
- #line 84 "hpricot_scan.rl"
3559
+ #line 105 "hpricot_scan.rl"
3199
3560
  { mark_aval = p; }
3200
- #line 89 "hpricot_scan.rl"
3561
+ #line 110 "hpricot_scan.rl"
3201
3562
  {
3202
3563
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3203
3564
  else { SET(aval, p); }
3204
3565
  }
3205
- #line 107 "hpricot_scan.rl"
3566
+ #line 128 "hpricot_scan.rl"
3206
3567
  {
3207
3568
  ATTR(akey, aval);
3208
3569
  }
@@ -3212,12 +3573,12 @@ tr341:
3212
3573
  tr258:
3213
3574
  #line 1 "hpricot_scan.rl"
3214
3575
  {te = p+1;}
3215
- #line 89 "hpricot_scan.rl"
3576
+ #line 110 "hpricot_scan.rl"
3216
3577
  {
3217
3578
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3218
3579
  else { SET(aval, p); }
3219
3580
  }
3220
- #line 107 "hpricot_scan.rl"
3581
+ #line 128 "hpricot_scan.rl"
3221
3582
  {
3222
3583
  ATTR(akey, aval);
3223
3584
  }
@@ -3227,7 +3588,7 @@ tr258:
3227
3588
  tr237:
3228
3589
  #line 1 "hpricot_scan.rl"
3229
3590
  {te = p+1;}
3230
- #line 107 "hpricot_scan.rl"
3591
+ #line 128 "hpricot_scan.rl"
3231
3592
  {
3232
3593
  ATTR(akey, aval);
3233
3594
  }
@@ -3237,9 +3598,9 @@ tr237:
3237
3598
  tr243:
3238
3599
  #line 1 "hpricot_scan.rl"
3239
3600
  {te = p+1;}
3240
- #line 93 "hpricot_scan.rl"
3601
+ #line 114 "hpricot_scan.rl"
3241
3602
  { SET(akey, p); }
3242
- #line 107 "hpricot_scan.rl"
3603
+ #line 128 "hpricot_scan.rl"
3243
3604
  {
3244
3605
  ATTR(akey, aval);
3245
3606
  }
@@ -3255,11 +3616,11 @@ tr246:
3255
3616
  tr262:
3256
3617
  #line 1 "hpricot_scan.rl"
3257
3618
  {te = p+1;}
3258
- #line 107 "hpricot_scan.rl"
3619
+ #line 128 "hpricot_scan.rl"
3259
3620
  {
3260
3621
  ATTR(akey, aval);
3261
3622
  }
3262
- #line 89 "hpricot_scan.rl"
3623
+ #line 110 "hpricot_scan.rl"
3263
3624
  {
3264
3625
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3265
3626
  else { SET(aval, p); }
@@ -3270,13 +3631,13 @@ tr262:
3270
3631
  tr329:
3271
3632
  #line 1 "hpricot_scan.rl"
3272
3633
  {te = p+1;}
3273
- #line 84 "hpricot_scan.rl"
3634
+ #line 105 "hpricot_scan.rl"
3274
3635
  { mark_aval = p; }
3275
- #line 107 "hpricot_scan.rl"
3636
+ #line 128 "hpricot_scan.rl"
3276
3637
  {
3277
3638
  ATTR(akey, aval);
3278
3639
  }
3279
- #line 89 "hpricot_scan.rl"
3640
+ #line 110 "hpricot_scan.rl"
3280
3641
  {
3281
3642
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3282
3643
  else { SET(aval, p); }
@@ -3287,14 +3648,14 @@ tr329:
3287
3648
  tr268:
3288
3649
  #line 1 "hpricot_scan.rl"
3289
3650
  {te = p+1;}
3290
- #line 89 "hpricot_scan.rl"
3651
+ #line 110 "hpricot_scan.rl"
3291
3652
  {
3292
3653
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3293
3654
  else { SET(aval, p); }
3294
3655
  }
3295
- #line 93 "hpricot_scan.rl"
3656
+ #line 114 "hpricot_scan.rl"
3296
3657
  { SET(akey, p); }
3297
- #line 107 "hpricot_scan.rl"
3658
+ #line 128 "hpricot_scan.rl"
3298
3659
  {
3299
3660
  ATTR(akey, aval);
3300
3661
  }
@@ -3304,9 +3665,9 @@ tr268:
3304
3665
  tr334:
3305
3666
  #line 1 "hpricot_scan.rl"
3306
3667
  {te = p+1;}
3307
- #line 84 "hpricot_scan.rl"
3668
+ #line 105 "hpricot_scan.rl"
3308
3669
  { mark_aval = p; }
3309
- #line 107 "hpricot_scan.rl"
3670
+ #line 128 "hpricot_scan.rl"
3310
3671
  {
3311
3672
  ATTR(akey, aval);
3312
3673
  }
@@ -3317,21 +3678,21 @@ st210:
3317
3678
  if ( ++p == pe )
3318
3679
  goto _test_eof210;
3319
3680
  case 210:
3320
- #line 3321 "hpricot_scan.c"
3681
+ #line 3682 "hpricot_scan.c"
3321
3682
  switch( (*p) ) {
3322
3683
  case 39: goto tr169;
3323
3684
  case 92: goto st102;
3324
3685
  }
3325
3686
  goto st101;
3326
3687
  tr242:
3327
- #line 93 "hpricot_scan.rl"
3688
+ #line 114 "hpricot_scan.rl"
3328
3689
  { SET(akey, p); }
3329
3690
  goto st106;
3330
3691
  st106:
3331
3692
  if ( ++p == pe )
3332
3693
  goto _test_eof106;
3333
3694
  case 106:
3334
- #line 3335 "hpricot_scan.c"
3695
+ #line 3696 "hpricot_scan.c"
3335
3696
  switch( (*p) ) {
3336
3697
  case 13: goto tr248;
3337
3698
  case 32: goto tr248;
@@ -3349,14 +3710,14 @@ case 106:
3349
3710
  goto tr248;
3350
3711
  goto tr247;
3351
3712
  tr247:
3352
- #line 84 "hpricot_scan.rl"
3713
+ #line 105 "hpricot_scan.rl"
3353
3714
  { mark_aval = p; }
3354
3715
  goto st107;
3355
3716
  st107:
3356
3717
  if ( ++p == pe )
3357
3718
  goto _test_eof107;
3358
3719
  case 107:
3359
- #line 3360 "hpricot_scan.c"
3720
+ #line 3721 "hpricot_scan.c"
3360
3721
  switch( (*p) ) {
3361
3722
  case 13: goto tr255;
3362
3723
  case 32: goto tr255;
@@ -3373,42 +3734,42 @@ case 107:
3373
3734
  goto tr255;
3374
3735
  goto st107;
3375
3736
  tr256:
3376
- #line 89 "hpricot_scan.rl"
3737
+ #line 110 "hpricot_scan.rl"
3377
3738
  {
3378
3739
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3379
3740
  else { SET(aval, p); }
3380
3741
  }
3381
3742
  goto st108;
3382
3743
  tr327:
3383
- #line 84 "hpricot_scan.rl"
3744
+ #line 105 "hpricot_scan.rl"
3384
3745
  { mark_aval = p; }
3385
- #line 89 "hpricot_scan.rl"
3746
+ #line 110 "hpricot_scan.rl"
3386
3747
  {
3387
3748
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3388
3749
  else { SET(aval, p); }
3389
3750
  }
3390
3751
  goto st108;
3391
3752
  tr281:
3392
- #line 84 "hpricot_scan.rl"
3753
+ #line 105 "hpricot_scan.rl"
3393
3754
  { mark_aval = p; }
3394
- #line 88 "hpricot_scan.rl"
3755
+ #line 109 "hpricot_scan.rl"
3395
3756
  { SET(aval, p); }
3396
3757
  goto st108;
3397
3758
  tr222:
3398
- #line 88 "hpricot_scan.rl"
3759
+ #line 109 "hpricot_scan.rl"
3399
3760
  { SET(aval, p); }
3400
3761
  goto st108;
3401
3762
  tr213:
3402
- #line 88 "hpricot_scan.rl"
3763
+ #line 109 "hpricot_scan.rl"
3403
3764
  { SET(aval, p); }
3404
- #line 84 "hpricot_scan.rl"
3765
+ #line 105 "hpricot_scan.rl"
3405
3766
  { mark_aval = p; }
3406
3767
  goto st108;
3407
3768
  st108:
3408
3769
  if ( ++p == pe )
3409
3770
  goto _test_eof108;
3410
3771
  case 108:
3411
- #line 3412 "hpricot_scan.c"
3772
+ #line 3773 "hpricot_scan.c"
3412
3773
  switch( (*p) ) {
3413
3774
  case 13: goto tr255;
3414
3775
  case 32: goto tr255;
@@ -3436,42 +3797,42 @@ case 108:
3436
3797
  goto tr260;
3437
3798
  goto st107;
3438
3799
  tr260:
3439
- #line 107 "hpricot_scan.rl"
3800
+ #line 128 "hpricot_scan.rl"
3440
3801
  {
3441
3802
  ATTR(akey, aval);
3442
3803
  }
3443
- #line 100 "hpricot_scan.rl"
3804
+ #line 121 "hpricot_scan.rl"
3444
3805
  {
3445
3806
  akey = Qnil;
3446
3807
  aval = Qnil;
3447
3808
  mark_akey = NULL;
3448
3809
  mark_aval = NULL;
3449
3810
  }
3450
- #line 85 "hpricot_scan.rl"
3811
+ #line 106 "hpricot_scan.rl"
3451
3812
  { mark_akey = p; }
3452
3813
  goto st109;
3453
3814
  tr279:
3454
- #line 84 "hpricot_scan.rl"
3815
+ #line 105 "hpricot_scan.rl"
3455
3816
  { mark_aval = p; }
3456
- #line 107 "hpricot_scan.rl"
3817
+ #line 128 "hpricot_scan.rl"
3457
3818
  {
3458
3819
  ATTR(akey, aval);
3459
3820
  }
3460
- #line 100 "hpricot_scan.rl"
3821
+ #line 121 "hpricot_scan.rl"
3461
3822
  {
3462
3823
  akey = Qnil;
3463
3824
  aval = Qnil;
3464
3825
  mark_akey = NULL;
3465
3826
  mark_aval = NULL;
3466
3827
  }
3467
- #line 85 "hpricot_scan.rl"
3828
+ #line 106 "hpricot_scan.rl"
3468
3829
  { mark_akey = p; }
3469
3830
  goto st109;
3470
3831
  st109:
3471
3832
  if ( ++p == pe )
3472
3833
  goto _test_eof109;
3473
3834
  case 109:
3474
- #line 3475 "hpricot_scan.c"
3835
+ #line 3836 "hpricot_scan.c"
3475
3836
  switch( (*p) ) {
3476
3837
  case 13: goto tr263;
3477
3838
  case 32: goto tr263;
@@ -3500,16 +3861,16 @@ case 109:
3500
3861
  goto st109;
3501
3862
  goto st107;
3502
3863
  tr270:
3503
- #line 89 "hpricot_scan.rl"
3864
+ #line 110 "hpricot_scan.rl"
3504
3865
  {
3505
3866
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3506
3867
  else { SET(aval, p); }
3507
3868
  }
3508
3869
  goto st110;
3509
3870
  tr264:
3510
- #line 93 "hpricot_scan.rl"
3871
+ #line 114 "hpricot_scan.rl"
3511
3872
  { SET(akey, p); }
3512
- #line 89 "hpricot_scan.rl"
3873
+ #line 110 "hpricot_scan.rl"
3513
3874
  {
3514
3875
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3515
3876
  else { SET(aval, p); }
@@ -3519,7 +3880,7 @@ st110:
3519
3880
  if ( ++p == pe )
3520
3881
  goto _test_eof110;
3521
3882
  case 110:
3522
- #line 3523 "hpricot_scan.c"
3883
+ #line 3884 "hpricot_scan.c"
3523
3884
  switch( (*p) ) {
3524
3885
  case 13: goto tr269;
3525
3886
  case 32: goto tr269;
@@ -3548,69 +3909,69 @@ case 110:
3548
3909
  goto tr260;
3549
3910
  goto st107;
3550
3911
  tr252:
3551
- #line 84 "hpricot_scan.rl"
3912
+ #line 105 "hpricot_scan.rl"
3552
3913
  { mark_aval = p; }
3553
- #line 107 "hpricot_scan.rl"
3914
+ #line 128 "hpricot_scan.rl"
3554
3915
  {
3555
3916
  ATTR(akey, aval);
3556
3917
  }
3557
3918
  goto st111;
3558
3919
  tr257:
3559
- #line 89 "hpricot_scan.rl"
3920
+ #line 110 "hpricot_scan.rl"
3560
3921
  {
3561
3922
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3562
3923
  else { SET(aval, p); }
3563
3924
  }
3564
- #line 107 "hpricot_scan.rl"
3925
+ #line 128 "hpricot_scan.rl"
3565
3926
  {
3566
3927
  ATTR(akey, aval);
3567
3928
  }
3568
3929
  goto st111;
3569
3930
  tr261:
3570
- #line 107 "hpricot_scan.rl"
3931
+ #line 128 "hpricot_scan.rl"
3571
3932
  {
3572
3933
  ATTR(akey, aval);
3573
3934
  }
3574
- #line 89 "hpricot_scan.rl"
3935
+ #line 110 "hpricot_scan.rl"
3575
3936
  {
3576
3937
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3577
3938
  else { SET(aval, p); }
3578
3939
  }
3579
3940
  goto st111;
3580
3941
  tr266:
3581
- #line 89 "hpricot_scan.rl"
3942
+ #line 110 "hpricot_scan.rl"
3582
3943
  {
3583
3944
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3584
3945
  else { SET(aval, p); }
3585
3946
  }
3586
- #line 93 "hpricot_scan.rl"
3947
+ #line 114 "hpricot_scan.rl"
3587
3948
  { SET(akey, p); }
3588
- #line 107 "hpricot_scan.rl"
3949
+ #line 128 "hpricot_scan.rl"
3589
3950
  {
3590
3951
  ATTR(akey, aval);
3591
3952
  }
3592
3953
  goto st111;
3593
3954
  tr276:
3594
- #line 84 "hpricot_scan.rl"
3955
+ #line 105 "hpricot_scan.rl"
3595
3956
  { mark_aval = p; }
3596
- #line 89 "hpricot_scan.rl"
3957
+ #line 110 "hpricot_scan.rl"
3597
3958
  {
3598
3959
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3599
3960
  else { SET(aval, p); }
3600
3961
  }
3601
- #line 107 "hpricot_scan.rl"
3962
+ #line 128 "hpricot_scan.rl"
3602
3963
  {
3603
3964
  ATTR(akey, aval);
3604
3965
  }
3605
3966
  goto st111;
3606
3967
  tr280:
3607
- #line 84 "hpricot_scan.rl"
3968
+ #line 105 "hpricot_scan.rl"
3608
3969
  { mark_aval = p; }
3609
- #line 107 "hpricot_scan.rl"
3970
+ #line 128 "hpricot_scan.rl"
3610
3971
  {
3611
3972
  ATTR(akey, aval);
3612
3973
  }
3613
- #line 89 "hpricot_scan.rl"
3974
+ #line 110 "hpricot_scan.rl"
3614
3975
  {
3615
3976
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3616
3977
  else { SET(aval, p); }
@@ -3620,7 +3981,7 @@ st111:
3620
3981
  if ( ++p == pe )
3621
3982
  goto _test_eof111;
3622
3983
  case 111:
3623
- #line 3624 "hpricot_scan.c"
3984
+ #line 3985 "hpricot_scan.c"
3624
3985
  switch( (*p) ) {
3625
3986
  case 13: goto tr255;
3626
3987
  case 32: goto tr255;
@@ -3637,14 +3998,14 @@ case 111:
3637
3998
  goto tr255;
3638
3999
  goto st107;
3639
4000
  tr253:
3640
- #line 84 "hpricot_scan.rl"
4001
+ #line 105 "hpricot_scan.rl"
3641
4002
  { mark_aval = p; }
3642
4003
  goto st112;
3643
4004
  st112:
3644
4005
  if ( ++p == pe )
3645
4006
  goto _test_eof112;
3646
4007
  case 112:
3647
- #line 3648 "hpricot_scan.c"
4008
+ #line 4009 "hpricot_scan.c"
3648
4009
  switch( (*p) ) {
3649
4010
  case 13: goto tr255;
3650
4011
  case 32: goto tr255;
@@ -3661,18 +4022,18 @@ case 112:
3661
4022
  goto tr255;
3662
4023
  goto st107;
3663
4024
  tr249:
3664
- #line 84 "hpricot_scan.rl"
4025
+ #line 105 "hpricot_scan.rl"
3665
4026
  { mark_aval = p; }
3666
4027
  goto st113;
3667
4028
  tr267:
3668
- #line 93 "hpricot_scan.rl"
4029
+ #line 114 "hpricot_scan.rl"
3669
4030
  { SET(akey, p); }
3670
4031
  goto st113;
3671
4032
  st113:
3672
4033
  if ( ++p == pe )
3673
4034
  goto _test_eof113;
3674
4035
  case 113:
3675
- #line 3676 "hpricot_scan.c"
4036
+ #line 4037 "hpricot_scan.c"
3676
4037
  switch( (*p) ) {
3677
4038
  case 13: goto tr272;
3678
4039
  case 32: goto tr272;
@@ -3690,13 +4051,13 @@ case 113:
3690
4051
  goto tr272;
3691
4052
  goto tr247;
3692
4053
  tr277:
3693
- #line 84 "hpricot_scan.rl"
4054
+ #line 105 "hpricot_scan.rl"
3694
4055
  { mark_aval = p; }
3695
4056
  goto st114;
3696
4057
  tr272:
3697
- #line 84 "hpricot_scan.rl"
4058
+ #line 105 "hpricot_scan.rl"
3698
4059
  { mark_aval = p; }
3699
- #line 89 "hpricot_scan.rl"
4060
+ #line 110 "hpricot_scan.rl"
3700
4061
  {
3701
4062
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3702
4063
  else { SET(aval, p); }
@@ -3706,7 +4067,7 @@ st114:
3706
4067
  if ( ++p == pe )
3707
4068
  goto _test_eof114;
3708
4069
  case 114:
3709
- #line 3710 "hpricot_scan.c"
4070
+ #line 4071 "hpricot_scan.c"
3710
4071
  switch( (*p) ) {
3711
4072
  case 13: goto tr277;
3712
4073
  case 32: goto tr277;
@@ -3735,13 +4096,13 @@ case 114:
3735
4096
  goto tr279;
3736
4097
  goto tr247;
3737
4098
  tr278:
3738
- #line 84 "hpricot_scan.rl"
4099
+ #line 105 "hpricot_scan.rl"
3739
4100
  { mark_aval = p; }
3740
4101
  goto st115;
3741
4102
  tr273:
3742
- #line 84 "hpricot_scan.rl"
4103
+ #line 105 "hpricot_scan.rl"
3743
4104
  { mark_aval = p; }
3744
- #line 89 "hpricot_scan.rl"
4105
+ #line 110 "hpricot_scan.rl"
3745
4106
  {
3746
4107
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3747
4108
  else { SET(aval, p); }
@@ -3751,7 +4112,7 @@ st115:
3751
4112
  if ( ++p == pe )
3752
4113
  goto _test_eof115;
3753
4114
  case 115:
3754
- #line 3755 "hpricot_scan.c"
4115
+ #line 4116 "hpricot_scan.c"
3755
4116
  switch( (*p) ) {
3756
4117
  case 13: goto tr272;
3757
4118
  case 32: goto tr272;
@@ -3800,30 +4161,30 @@ case 116:
3800
4161
  goto tr211;
3801
4162
  goto tr210;
3802
4163
  tr221:
3803
- #line 89 "hpricot_scan.rl"
4164
+ #line 110 "hpricot_scan.rl"
3804
4165
  {
3805
4166
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3806
4167
  else { SET(aval, p); }
3807
4168
  }
3808
4169
  goto st117;
3809
4170
  tr212:
3810
- #line 84 "hpricot_scan.rl"
4171
+ #line 105 "hpricot_scan.rl"
3811
4172
  { mark_aval = p; }
3812
- #line 89 "hpricot_scan.rl"
4173
+ #line 110 "hpricot_scan.rl"
3813
4174
  {
3814
4175
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3815
4176
  else { SET(aval, p); }
3816
4177
  }
3817
4178
  goto st117;
3818
4179
  tr314:
3819
- #line 88 "hpricot_scan.rl"
4180
+ #line 109 "hpricot_scan.rl"
3820
4181
  { SET(aval, p); }
3821
4182
  goto st117;
3822
4183
  st117:
3823
4184
  if ( ++p == pe )
3824
4185
  goto _test_eof117;
3825
4186
  case 117:
3826
- #line 3827 "hpricot_scan.c"
4187
+ #line 4188 "hpricot_scan.c"
3827
4188
  switch( (*p) ) {
3828
4189
  case 13: goto tr220;
3829
4190
  case 32: goto tr220;
@@ -3852,42 +4213,42 @@ case 117:
3852
4213
  goto tr282;
3853
4214
  goto st97;
3854
4215
  tr282:
3855
- #line 107 "hpricot_scan.rl"
4216
+ #line 128 "hpricot_scan.rl"
3856
4217
  {
3857
4218
  ATTR(akey, aval);
3858
4219
  }
3859
- #line 100 "hpricot_scan.rl"
4220
+ #line 121 "hpricot_scan.rl"
3860
4221
  {
3861
4222
  akey = Qnil;
3862
4223
  aval = Qnil;
3863
4224
  mark_akey = NULL;
3864
4225
  mark_aval = NULL;
3865
4226
  }
3866
- #line 85 "hpricot_scan.rl"
4227
+ #line 106 "hpricot_scan.rl"
3867
4228
  { mark_akey = p; }
3868
4229
  goto st118;
3869
4230
  tr307:
3870
- #line 84 "hpricot_scan.rl"
4231
+ #line 105 "hpricot_scan.rl"
3871
4232
  { mark_aval = p; }
3872
- #line 107 "hpricot_scan.rl"
4233
+ #line 128 "hpricot_scan.rl"
3873
4234
  {
3874
4235
  ATTR(akey, aval);
3875
4236
  }
3876
- #line 100 "hpricot_scan.rl"
4237
+ #line 121 "hpricot_scan.rl"
3877
4238
  {
3878
4239
  akey = Qnil;
3879
4240
  aval = Qnil;
3880
4241
  mark_akey = NULL;
3881
4242
  mark_aval = NULL;
3882
4243
  }
3883
- #line 85 "hpricot_scan.rl"
4244
+ #line 106 "hpricot_scan.rl"
3884
4245
  { mark_akey = p; }
3885
4246
  goto st118;
3886
4247
  st118:
3887
4248
  if ( ++p == pe )
3888
4249
  goto _test_eof118;
3889
4250
  case 118:
3890
- #line 3891 "hpricot_scan.c"
4251
+ #line 4252 "hpricot_scan.c"
3891
4252
  switch( (*p) ) {
3892
4253
  case 13: goto tr285;
3893
4254
  case 32: goto tr285;
@@ -3917,20 +4278,20 @@ case 118:
3917
4278
  goto st118;
3918
4279
  goto st97;
3919
4280
  tr293:
3920
- #line 93 "hpricot_scan.rl"
4281
+ #line 114 "hpricot_scan.rl"
3921
4282
  { SET(akey, p); }
3922
4283
  goto st119;
3923
4284
  tr323:
3924
- #line 89 "hpricot_scan.rl"
4285
+ #line 110 "hpricot_scan.rl"
3925
4286
  {
3926
4287
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3927
4288
  else { SET(aval, p); }
3928
4289
  }
3929
4290
  goto st119;
3930
4291
  tr285:
3931
- #line 93 "hpricot_scan.rl"
4292
+ #line 114 "hpricot_scan.rl"
3932
4293
  { SET(akey, p); }
3933
- #line 89 "hpricot_scan.rl"
4294
+ #line 110 "hpricot_scan.rl"
3934
4295
  {
3935
4296
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
3936
4297
  else { SET(aval, p); }
@@ -3940,7 +4301,7 @@ st119:
3940
4301
  if ( ++p == pe )
3941
4302
  goto _test_eof119;
3942
4303
  case 119:
3943
- #line 3944 "hpricot_scan.c"
4304
+ #line 4305 "hpricot_scan.c"
3944
4305
  switch( (*p) ) {
3945
4306
  case 32: goto st119;
3946
4307
  case 34: goto tr228;
@@ -3965,42 +4326,42 @@ case 119:
3965
4326
  goto tr229;
3966
4327
  goto st99;
3967
4328
  tr229:
3968
- #line 107 "hpricot_scan.rl"
4329
+ #line 128 "hpricot_scan.rl"
3969
4330
  {
3970
4331
  ATTR(akey, aval);
3971
4332
  }
3972
- #line 100 "hpricot_scan.rl"
4333
+ #line 121 "hpricot_scan.rl"
3973
4334
  {
3974
4335
  akey = Qnil;
3975
4336
  aval = Qnil;
3976
4337
  mark_akey = NULL;
3977
4338
  mark_aval = NULL;
3978
4339
  }
3979
- #line 85 "hpricot_scan.rl"
4340
+ #line 106 "hpricot_scan.rl"
3980
4341
  { mark_akey = p; }
3981
4342
  goto st120;
3982
4343
  tr318:
3983
- #line 84 "hpricot_scan.rl"
4344
+ #line 105 "hpricot_scan.rl"
3984
4345
  { mark_aval = p; }
3985
- #line 107 "hpricot_scan.rl"
4346
+ #line 128 "hpricot_scan.rl"
3986
4347
  {
3987
4348
  ATTR(akey, aval);
3988
4349
  }
3989
- #line 100 "hpricot_scan.rl"
4350
+ #line 121 "hpricot_scan.rl"
3990
4351
  {
3991
4352
  akey = Qnil;
3992
4353
  aval = Qnil;
3993
4354
  mark_akey = NULL;
3994
4355
  mark_aval = NULL;
3995
4356
  }
3996
- #line 85 "hpricot_scan.rl"
4357
+ #line 106 "hpricot_scan.rl"
3997
4358
  { mark_akey = p; }
3998
4359
  goto st120;
3999
4360
  st120:
4000
4361
  if ( ++p == pe )
4001
4362
  goto _test_eof120;
4002
4363
  case 120:
4003
- #line 4004 "hpricot_scan.c"
4364
+ #line 4365 "hpricot_scan.c"
4004
4365
  switch( (*p) ) {
4005
4366
  case 32: goto tr293;
4006
4367
  case 34: goto tr228;
@@ -4025,23 +4386,23 @@ case 120:
4025
4386
  goto st120;
4026
4387
  goto st99;
4027
4388
  tr295:
4028
- #line 93 "hpricot_scan.rl"
4389
+ #line 114 "hpricot_scan.rl"
4029
4390
  { SET(akey, p); }
4030
- #line 107 "hpricot_scan.rl"
4391
+ #line 128 "hpricot_scan.rl"
4031
4392
  {
4032
4393
  ATTR(akey, aval);
4033
4394
  }
4034
4395
  goto st121;
4035
4396
  tr230:
4036
- #line 107 "hpricot_scan.rl"
4397
+ #line 128 "hpricot_scan.rl"
4037
4398
  {
4038
4399
  ATTR(akey, aval);
4039
4400
  }
4040
4401
  goto st121;
4041
4402
  tr319:
4042
- #line 84 "hpricot_scan.rl"
4403
+ #line 105 "hpricot_scan.rl"
4043
4404
  { mark_aval = p; }
4044
- #line 107 "hpricot_scan.rl"
4405
+ #line 128 "hpricot_scan.rl"
4045
4406
  {
4046
4407
  ATTR(akey, aval);
4047
4408
  }
@@ -4050,7 +4411,7 @@ st121:
4050
4411
  if ( ++p == pe )
4051
4412
  goto _test_eof121;
4052
4413
  case 121:
4053
- #line 4054 "hpricot_scan.c"
4414
+ #line 4415 "hpricot_scan.c"
4054
4415
  switch( (*p) ) {
4055
4416
  case 34: goto tr228;
4056
4417
  case 39: goto tr174;
@@ -4061,14 +4422,14 @@ case 121:
4061
4422
  tr217:
4062
4423
  #line 1 "hpricot_scan.rl"
4063
4424
  {te = p+1;}
4064
- #line 84 "hpricot_scan.rl"
4425
+ #line 105 "hpricot_scan.rl"
4065
4426
  { mark_aval = p; }
4066
- #line 89 "hpricot_scan.rl"
4427
+ #line 110 "hpricot_scan.rl"
4067
4428
  {
4068
4429
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4069
4430
  else { SET(aval, p); }
4070
4431
  }
4071
- #line 107 "hpricot_scan.rl"
4432
+ #line 128 "hpricot_scan.rl"
4072
4433
  {
4073
4434
  ATTR(akey, aval);
4074
4435
  }
@@ -4078,12 +4439,12 @@ tr217:
4078
4439
  tr225:
4079
4440
  #line 1 "hpricot_scan.rl"
4080
4441
  {te = p+1;}
4081
- #line 89 "hpricot_scan.rl"
4442
+ #line 110 "hpricot_scan.rl"
4082
4443
  {
4083
4444
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4084
4445
  else { SET(aval, p); }
4085
4446
  }
4086
- #line 107 "hpricot_scan.rl"
4447
+ #line 128 "hpricot_scan.rl"
4087
4448
  {
4088
4449
  ATTR(akey, aval);
4089
4450
  }
@@ -4093,7 +4454,7 @@ tr225:
4093
4454
  tr231:
4094
4455
  #line 1 "hpricot_scan.rl"
4095
4456
  {te = p+1;}
4096
- #line 107 "hpricot_scan.rl"
4457
+ #line 128 "hpricot_scan.rl"
4097
4458
  {
4098
4459
  ATTR(akey, aval);
4099
4460
  }
@@ -4103,9 +4464,9 @@ tr231:
4103
4464
  tr297:
4104
4465
  #line 1 "hpricot_scan.rl"
4105
4466
  {te = p+1;}
4106
- #line 93 "hpricot_scan.rl"
4467
+ #line 114 "hpricot_scan.rl"
4107
4468
  { SET(akey, p); }
4108
- #line 107 "hpricot_scan.rl"
4469
+ #line 128 "hpricot_scan.rl"
4109
4470
  {
4110
4471
  ATTR(akey, aval);
4111
4472
  }
@@ -4121,11 +4482,11 @@ tr298:
4121
4482
  tr284:
4122
4483
  #line 1 "hpricot_scan.rl"
4123
4484
  {te = p+1;}
4124
- #line 107 "hpricot_scan.rl"
4485
+ #line 128 "hpricot_scan.rl"
4125
4486
  {
4126
4487
  ATTR(akey, aval);
4127
4488
  }
4128
- #line 89 "hpricot_scan.rl"
4489
+ #line 110 "hpricot_scan.rl"
4129
4490
  {
4130
4491
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4131
4492
  else { SET(aval, p); }
@@ -4136,13 +4497,13 @@ tr284:
4136
4497
  tr313:
4137
4498
  #line 1 "hpricot_scan.rl"
4138
4499
  {te = p+1;}
4139
- #line 84 "hpricot_scan.rl"
4500
+ #line 105 "hpricot_scan.rl"
4140
4501
  { mark_aval = p; }
4141
- #line 107 "hpricot_scan.rl"
4502
+ #line 128 "hpricot_scan.rl"
4142
4503
  {
4143
4504
  ATTR(akey, aval);
4144
4505
  }
4145
- #line 89 "hpricot_scan.rl"
4506
+ #line 110 "hpricot_scan.rl"
4146
4507
  {
4147
4508
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4148
4509
  else { SET(aval, p); }
@@ -4153,14 +4514,14 @@ tr313:
4153
4514
  tr290:
4154
4515
  #line 1 "hpricot_scan.rl"
4155
4516
  {te = p+1;}
4156
- #line 89 "hpricot_scan.rl"
4517
+ #line 110 "hpricot_scan.rl"
4157
4518
  {
4158
4519
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4159
4520
  else { SET(aval, p); }
4160
4521
  }
4161
- #line 93 "hpricot_scan.rl"
4522
+ #line 114 "hpricot_scan.rl"
4162
4523
  { SET(akey, p); }
4163
- #line 107 "hpricot_scan.rl"
4524
+ #line 128 "hpricot_scan.rl"
4164
4525
  {
4165
4526
  ATTR(akey, aval);
4166
4527
  }
@@ -4170,9 +4531,9 @@ tr290:
4170
4531
  tr320:
4171
4532
  #line 1 "hpricot_scan.rl"
4172
4533
  {te = p+1;}
4173
- #line 84 "hpricot_scan.rl"
4534
+ #line 105 "hpricot_scan.rl"
4174
4535
  { mark_aval = p; }
4175
- #line 107 "hpricot_scan.rl"
4536
+ #line 128 "hpricot_scan.rl"
4176
4537
  {
4177
4538
  ATTR(akey, aval);
4178
4539
  }
@@ -4183,7 +4544,7 @@ st211:
4183
4544
  if ( ++p == pe )
4184
4545
  goto _test_eof211;
4185
4546
  case 211:
4186
- #line 4187 "hpricot_scan.c"
4547
+ #line 4548 "hpricot_scan.c"
4187
4548
  switch( (*p) ) {
4188
4549
  case 34: goto tr228;
4189
4550
  case 39: goto tr174;
@@ -4191,14 +4552,14 @@ case 211:
4191
4552
  }
4192
4553
  goto st99;
4193
4554
  tr321:
4194
- #line 84 "hpricot_scan.rl"
4555
+ #line 105 "hpricot_scan.rl"
4195
4556
  { mark_aval = p; }
4196
4557
  goto st122;
4197
4558
  st122:
4198
4559
  if ( ++p == pe )
4199
4560
  goto _test_eof122;
4200
4561
  case 122:
4201
- #line 4202 "hpricot_scan.c"
4562
+ #line 4563 "hpricot_scan.c"
4202
4563
  switch( (*p) ) {
4203
4564
  case 34: goto tr299;
4204
4565
  case 39: goto tr299;
@@ -4206,14 +4567,14 @@ case 122:
4206
4567
  }
4207
4568
  goto st99;
4208
4569
  tr296:
4209
- #line 93 "hpricot_scan.rl"
4570
+ #line 114 "hpricot_scan.rl"
4210
4571
  { SET(akey, p); }
4211
4572
  goto st123;
4212
4573
  st123:
4213
4574
  if ( ++p == pe )
4214
4575
  goto _test_eof123;
4215
4576
  case 123:
4216
- #line 4217 "hpricot_scan.c"
4577
+ #line 4578 "hpricot_scan.c"
4217
4578
  switch( (*p) ) {
4218
4579
  case 13: goto tr300;
4219
4580
  case 32: goto tr300;
@@ -4231,14 +4592,14 @@ case 123:
4231
4592
  goto tr300;
4232
4593
  goto tr210;
4233
4594
  tr300:
4234
- #line 84 "hpricot_scan.rl"
4595
+ #line 105 "hpricot_scan.rl"
4235
4596
  { mark_aval = p; }
4236
4597
  goto st124;
4237
4598
  st124:
4238
4599
  if ( ++p == pe )
4239
4600
  goto _test_eof124;
4240
4601
  case 124:
4241
- #line 4242 "hpricot_scan.c"
4602
+ #line 4603 "hpricot_scan.c"
4242
4603
  switch( (*p) ) {
4243
4604
  case 13: goto tr305;
4244
4605
  case 32: goto tr305;
@@ -4256,13 +4617,13 @@ case 124:
4256
4617
  goto tr305;
4257
4618
  goto tr210;
4258
4619
  tr305:
4259
- #line 84 "hpricot_scan.rl"
4620
+ #line 105 "hpricot_scan.rl"
4260
4621
  { mark_aval = p; }
4261
4622
  goto st125;
4262
4623
  tr308:
4263
- #line 84 "hpricot_scan.rl"
4624
+ #line 105 "hpricot_scan.rl"
4264
4625
  { mark_aval = p; }
4265
- #line 89 "hpricot_scan.rl"
4626
+ #line 110 "hpricot_scan.rl"
4266
4627
  {
4267
4628
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4268
4629
  else { SET(aval, p); }
@@ -4272,7 +4633,7 @@ st125:
4272
4633
  if ( ++p == pe )
4273
4634
  goto _test_eof125;
4274
4635
  case 125:
4275
- #line 4276 "hpricot_scan.c"
4636
+ #line 4637 "hpricot_scan.c"
4276
4637
  switch( (*p) ) {
4277
4638
  case 13: goto tr305;
4278
4639
  case 32: goto tr305;
@@ -4301,13 +4662,13 @@ case 125:
4301
4662
  goto tr307;
4302
4663
  goto tr210;
4303
4664
  tr306:
4304
- #line 84 "hpricot_scan.rl"
4665
+ #line 105 "hpricot_scan.rl"
4305
4666
  { mark_aval = p; }
4306
4667
  goto st126;
4307
4668
  tr309:
4308
- #line 84 "hpricot_scan.rl"
4669
+ #line 105 "hpricot_scan.rl"
4309
4670
  { mark_aval = p; }
4310
- #line 89 "hpricot_scan.rl"
4671
+ #line 110 "hpricot_scan.rl"
4311
4672
  {
4312
4673
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4313
4674
  else { SET(aval, p); }
@@ -4317,7 +4678,7 @@ st126:
4317
4678
  if ( ++p == pe )
4318
4679
  goto _test_eof126;
4319
4680
  case 126:
4320
- #line 4321 "hpricot_scan.c"
4681
+ #line 4682 "hpricot_scan.c"
4321
4682
  switch( (*p) ) {
4322
4683
  case 13: goto tr308;
4323
4684
  case 32: goto tr308;
@@ -4346,14 +4707,14 @@ case 126:
4346
4707
  goto tr307;
4347
4708
  goto tr210;
4348
4709
  tr310:
4349
- #line 88 "hpricot_scan.rl"
4710
+ #line 109 "hpricot_scan.rl"
4350
4711
  { SET(aval, p); }
4351
4712
  goto st127;
4352
4713
  st127:
4353
4714
  if ( ++p == pe )
4354
4715
  goto _test_eof127;
4355
4716
  case 127:
4356
- #line 4357 "hpricot_scan.c"
4717
+ #line 4718 "hpricot_scan.c"
4357
4718
  switch( (*p) ) {
4358
4719
  case 13: goto tr211;
4359
4720
  case 32: goto tr211;
@@ -4382,69 +4743,69 @@ case 127:
4382
4743
  goto tr307;
4383
4744
  goto tr210;
4384
4745
  tr304:
4385
- #line 84 "hpricot_scan.rl"
4746
+ #line 105 "hpricot_scan.rl"
4386
4747
  { mark_aval = p; }
4387
- #line 107 "hpricot_scan.rl"
4748
+ #line 128 "hpricot_scan.rl"
4388
4749
  {
4389
4750
  ATTR(akey, aval);
4390
4751
  }
4391
4752
  goto st128;
4392
4753
  tr223:
4393
- #line 89 "hpricot_scan.rl"
4754
+ #line 110 "hpricot_scan.rl"
4394
4755
  {
4395
4756
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4396
4757
  else { SET(aval, p); }
4397
4758
  }
4398
- #line 107 "hpricot_scan.rl"
4759
+ #line 128 "hpricot_scan.rl"
4399
4760
  {
4400
4761
  ATTR(akey, aval);
4401
4762
  }
4402
4763
  goto st128;
4403
4764
  tr283:
4404
- #line 107 "hpricot_scan.rl"
4765
+ #line 128 "hpricot_scan.rl"
4405
4766
  {
4406
4767
  ATTR(akey, aval);
4407
4768
  }
4408
- #line 89 "hpricot_scan.rl"
4769
+ #line 110 "hpricot_scan.rl"
4409
4770
  {
4410
4771
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4411
4772
  else { SET(aval, p); }
4412
4773
  }
4413
4774
  goto st128;
4414
4775
  tr288:
4415
- #line 89 "hpricot_scan.rl"
4776
+ #line 110 "hpricot_scan.rl"
4416
4777
  {
4417
4778
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4418
4779
  else { SET(aval, p); }
4419
4780
  }
4420
- #line 93 "hpricot_scan.rl"
4781
+ #line 114 "hpricot_scan.rl"
4421
4782
  { SET(akey, p); }
4422
- #line 107 "hpricot_scan.rl"
4783
+ #line 128 "hpricot_scan.rl"
4423
4784
  {
4424
4785
  ATTR(akey, aval);
4425
4786
  }
4426
4787
  goto st128;
4427
4788
  tr215:
4428
- #line 84 "hpricot_scan.rl"
4789
+ #line 105 "hpricot_scan.rl"
4429
4790
  { mark_aval = p; }
4430
- #line 89 "hpricot_scan.rl"
4791
+ #line 110 "hpricot_scan.rl"
4431
4792
  {
4432
4793
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4433
4794
  else { SET(aval, p); }
4434
4795
  }
4435
- #line 107 "hpricot_scan.rl"
4796
+ #line 128 "hpricot_scan.rl"
4436
4797
  {
4437
4798
  ATTR(akey, aval);
4438
4799
  }
4439
4800
  goto st128;
4440
4801
  tr312:
4441
- #line 84 "hpricot_scan.rl"
4802
+ #line 105 "hpricot_scan.rl"
4442
4803
  { mark_aval = p; }
4443
- #line 107 "hpricot_scan.rl"
4804
+ #line 128 "hpricot_scan.rl"
4444
4805
  {
4445
4806
  ATTR(akey, aval);
4446
4807
  }
4447
- #line 89 "hpricot_scan.rl"
4808
+ #line 110 "hpricot_scan.rl"
4448
4809
  {
4449
4810
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4450
4811
  else { SET(aval, p); }
@@ -4454,7 +4815,7 @@ st128:
4454
4815
  if ( ++p == pe )
4455
4816
  goto _test_eof128;
4456
4817
  case 128:
4457
- #line 4458 "hpricot_scan.c"
4818
+ #line 4819 "hpricot_scan.c"
4458
4819
  switch( (*p) ) {
4459
4820
  case 13: goto tr220;
4460
4821
  case 32: goto tr220;
@@ -4472,14 +4833,14 @@ case 128:
4472
4833
  goto tr220;
4473
4834
  goto st97;
4474
4835
  tr218:
4475
- #line 84 "hpricot_scan.rl"
4836
+ #line 105 "hpricot_scan.rl"
4476
4837
  { mark_aval = p; }
4477
4838
  goto st129;
4478
4839
  st129:
4479
4840
  if ( ++p == pe )
4480
4841
  goto _test_eof129;
4481
4842
  case 129:
4482
- #line 4483 "hpricot_scan.c"
4843
+ #line 4844 "hpricot_scan.c"
4483
4844
  switch( (*p) ) {
4484
4845
  case 13: goto tr220;
4485
4846
  case 32: goto tr220;
@@ -4497,14 +4858,14 @@ case 129:
4497
4858
  goto tr220;
4498
4859
  goto st97;
4499
4860
  tr311:
4500
- #line 88 "hpricot_scan.rl"
4861
+ #line 109 "hpricot_scan.rl"
4501
4862
  { SET(aval, p); }
4502
4863
  goto st130;
4503
4864
  st130:
4504
4865
  if ( ++p == pe )
4505
4866
  goto _test_eof130;
4506
4867
  case 130:
4507
- #line 4508 "hpricot_scan.c"
4868
+ #line 4869 "hpricot_scan.c"
4508
4869
  switch( (*p) ) {
4509
4870
  case 13: goto tr211;
4510
4871
  case 32: goto tr211;
@@ -4533,14 +4894,14 @@ case 130:
4533
4894
  goto tr307;
4534
4895
  goto tr210;
4535
4896
  tr302:
4536
- #line 88 "hpricot_scan.rl"
4897
+ #line 109 "hpricot_scan.rl"
4537
4898
  { SET(aval, p); }
4538
4899
  goto st131;
4539
4900
  st131:
4540
4901
  if ( ++p == pe )
4541
4902
  goto _test_eof131;
4542
4903
  case 131:
4543
- #line 4544 "hpricot_scan.c"
4904
+ #line 4905 "hpricot_scan.c"
4544
4905
  switch( (*p) ) {
4545
4906
  case 32: goto tr315;
4546
4907
  case 34: goto tr316;
@@ -4564,14 +4925,14 @@ case 131:
4564
4925
  goto tr318;
4565
4926
  goto tr216;
4566
4927
  tr303:
4567
- #line 88 "hpricot_scan.rl"
4928
+ #line 109 "hpricot_scan.rl"
4568
4929
  { SET(aval, p); }
4569
4930
  goto st132;
4570
4931
  st132:
4571
4932
  if ( ++p == pe )
4572
4933
  goto _test_eof132;
4573
4934
  case 132:
4574
- #line 4575 "hpricot_scan.c"
4935
+ #line 4936 "hpricot_scan.c"
4575
4936
  switch( (*p) ) {
4576
4937
  case 32: goto tr315;
4577
4938
  case 34: goto tr322;
@@ -4595,18 +4956,18 @@ case 132:
4595
4956
  goto tr318;
4596
4957
  goto tr216;
4597
4958
  tr301:
4598
- #line 84 "hpricot_scan.rl"
4959
+ #line 105 "hpricot_scan.rl"
4599
4960
  { mark_aval = p; }
4600
4961
  goto st133;
4601
4962
  tr289:
4602
- #line 93 "hpricot_scan.rl"
4963
+ #line 114 "hpricot_scan.rl"
4603
4964
  { SET(akey, p); }
4604
4965
  goto st133;
4605
4966
  st133:
4606
4967
  if ( ++p == pe )
4607
4968
  goto _test_eof133;
4608
4969
  case 133:
4609
- #line 4610 "hpricot_scan.c"
4970
+ #line 4971 "hpricot_scan.c"
4610
4971
  switch( (*p) ) {
4611
4972
  case 13: goto tr308;
4612
4973
  case 32: goto tr308;
@@ -4624,16 +4985,16 @@ case 133:
4624
4985
  goto tr308;
4625
4986
  goto tr210;
4626
4987
  tr324:
4627
- #line 89 "hpricot_scan.rl"
4988
+ #line 110 "hpricot_scan.rl"
4628
4989
  {
4629
4990
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4630
4991
  else { SET(aval, p); }
4631
4992
  }
4632
4993
  goto st134;
4633
4994
  tr286:
4634
- #line 93 "hpricot_scan.rl"
4995
+ #line 114 "hpricot_scan.rl"
4635
4996
  { SET(akey, p); }
4636
- #line 89 "hpricot_scan.rl"
4997
+ #line 110 "hpricot_scan.rl"
4637
4998
  {
4638
4999
  if (*(p-1) == '"' || *(p-1) == '\'') { SET(aval, p-1); }
4639
5000
  else { SET(aval, p); }
@@ -4643,7 +5004,7 @@ st134:
4643
5004
  if ( ++p == pe )
4644
5005
  goto _test_eof134;
4645
5006
  case 134:
4646
- #line 4647 "hpricot_scan.c"
5007
+ #line 5008 "hpricot_scan.c"
4647
5008
  switch( (*p) ) {
4648
5009
  case 13: goto tr323;
4649
5010
  case 32: goto tr323;
@@ -4673,14 +5034,14 @@ case 134:
4673
5034
  goto tr282;
4674
5035
  goto st97;
4675
5036
  tr275:
4676
- #line 88 "hpricot_scan.rl"
5037
+ #line 109 "hpricot_scan.rl"
4677
5038
  { SET(aval, p); }
4678
5039
  goto st135;
4679
5040
  st135:
4680
5041
  if ( ++p == pe )
4681
5042
  goto _test_eof135;
4682
5043
  case 135:
4683
- #line 4684 "hpricot_scan.c"
5044
+ #line 5045 "hpricot_scan.c"
4684
5045
  switch( (*p) ) {
4685
5046
  case 13: goto tr326;
4686
5047
  case 32: goto tr326;
@@ -4718,14 +5079,14 @@ case 136:
4718
5079
  }
4719
5080
  goto tr216;
4720
5081
  tr251:
4721
- #line 88 "hpricot_scan.rl"
5082
+ #line 109 "hpricot_scan.rl"
4722
5083
  { SET(aval, p); }
4723
5084
  goto st137;
4724
5085
  st137:
4725
5086
  if ( ++p == pe )
4726
5087
  goto _test_eof137;
4727
5088
  case 137:
4728
- #line 4729 "hpricot_scan.c"
5089
+ #line 5090 "hpricot_scan.c"
4729
5090
  switch( (*p) ) {
4730
5091
  case 32: goto tr330;
4731
5092
  case 39: goto tr331;
@@ -4748,14 +5109,14 @@ case 137:
4748
5109
  goto tr332;
4749
5110
  goto tr328;
4750
5111
  tr248:
4751
- #line 84 "hpricot_scan.rl"
5112
+ #line 105 "hpricot_scan.rl"
4752
5113
  { mark_aval = p; }
4753
5114
  goto st138;
4754
5115
  st138:
4755
5116
  if ( ++p == pe )
4756
5117
  goto _test_eof138;
4757
5118
  case 138:
4758
- #line 4759 "hpricot_scan.c"
5119
+ #line 5120 "hpricot_scan.c"
4759
5120
  switch( (*p) ) {
4760
5121
  case 13: goto tr277;
4761
5122
  case 32: goto tr277;
@@ -4773,14 +5134,14 @@ case 138:
4773
5134
  goto tr277;
4774
5135
  goto tr247;
4775
5136
  tr185:
4776
- #line 88 "hpricot_scan.rl"
5137
+ #line 109 "hpricot_scan.rl"
4777
5138
  { SET(aval, p); }
4778
5139
  goto st139;
4779
5140
  st139:
4780
5141
  if ( ++p == pe )
4781
5142
  goto _test_eof139;
4782
5143
  case 139:
4783
- #line 4784 "hpricot_scan.c"
5144
+ #line 5145 "hpricot_scan.c"
4784
5145
  switch( (*p) ) {
4785
5146
  case 32: goto tr336;
4786
5147
  case 34: goto tr331;
@@ -4850,14 +5211,14 @@ case 143:
4850
5211
  }
4851
5212
  goto tr328;
4852
5213
  tr120:
4853
- #line 84 "hpricot_scan.rl"
5214
+ #line 105 "hpricot_scan.rl"
4854
5215
  { mark_aval = p; }
4855
5216
  goto st144;
4856
5217
  st144:
4857
5218
  if ( ++p == pe )
4858
5219
  goto _test_eof144;
4859
5220
  case 144:
4860
- #line 4861 "hpricot_scan.c"
5221
+ #line 5222 "hpricot_scan.c"
4861
5222
  switch( (*p) ) {
4862
5223
  case 13: goto tr148;
4863
5224
  case 32: goto tr148;
@@ -4896,7 +5257,7 @@ st146:
4896
5257
  if ( ++p == pe )
4897
5258
  goto _test_eof146;
4898
5259
  case 146:
4899
- #line 4900 "hpricot_scan.c"
5260
+ #line 5261 "hpricot_scan.c"
4900
5261
  switch( (*p) ) {
4901
5262
  case 32: goto st212;
4902
5263
  case 63: goto st146;
@@ -4934,7 +5295,7 @@ st147:
4934
5295
  if ( ++p == pe )
4935
5296
  goto _test_eof147;
4936
5297
  case 147:
4937
- #line 4938 "hpricot_scan.c"
5298
+ #line 5299 "hpricot_scan.c"
4938
5299
  switch( (*p) ) {
4939
5300
  case 32: goto st212;
4940
5301
  case 63: goto st146;
@@ -5013,7 +5374,7 @@ st213:
5013
5374
  if ( ++p == pe )
5014
5375
  goto _test_eof213;
5015
5376
  case 213:
5016
- #line 5017 "hpricot_scan.c"
5377
+ #line 5378 "hpricot_scan.c"
5017
5378
  switch( (*p) ) {
5018
5379
  case 32: goto tr348;
5019
5380
  case 118: goto st150;
@@ -5105,14 +5466,14 @@ case 158:
5105
5466
  goto tr359;
5106
5467
  goto tr349;
5107
5468
  tr359:
5108
- #line 84 "hpricot_scan.rl"
5469
+ #line 105 "hpricot_scan.rl"
5109
5470
  { mark_aval = p; }
5110
5471
  goto st159;
5111
5472
  st159:
5112
5473
  if ( ++p == pe )
5113
5474
  goto _test_eof159;
5114
5475
  case 159:
5115
- #line 5116 "hpricot_scan.c"
5476
+ #line 5477 "hpricot_scan.c"
5116
5477
  switch( (*p) ) {
5117
5478
  case 34: goto tr360;
5118
5479
  case 95: goto st159;
@@ -5130,14 +5491,14 @@ case 159:
5130
5491
  goto st159;
5131
5492
  goto tr349;
5132
5493
  tr360:
5133
- #line 94 "hpricot_scan.rl"
5134
- { SET(aval, p); ATTR(rb_str_new2("version"), aval); }
5494
+ #line 115 "hpricot_scan.rl"
5495
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("version")), aval); }
5135
5496
  goto st160;
5136
5497
  st160:
5137
5498
  if ( ++p == pe )
5138
5499
  goto _test_eof160;
5139
5500
  case 160:
5140
- #line 5141 "hpricot_scan.c"
5501
+ #line 5502 "hpricot_scan.c"
5141
5502
  switch( (*p) ) {
5142
5503
  case 32: goto st161;
5143
5504
  case 62: goto tr363;
@@ -5250,14 +5611,14 @@ case 172:
5250
5611
  goto tr377;
5251
5612
  goto tr349;
5252
5613
  tr377:
5253
- #line 84 "hpricot_scan.rl"
5614
+ #line 105 "hpricot_scan.rl"
5254
5615
  { mark_aval = p; }
5255
5616
  goto st173;
5256
5617
  st173:
5257
5618
  if ( ++p == pe )
5258
5619
  goto _test_eof173;
5259
5620
  case 173:
5260
- #line 5261 "hpricot_scan.c"
5621
+ #line 5622 "hpricot_scan.c"
5261
5622
  switch( (*p) ) {
5262
5623
  case 34: goto tr378;
5263
5624
  case 95: goto st173;
@@ -5275,14 +5636,14 @@ case 173:
5275
5636
  goto st173;
5276
5637
  goto tr349;
5277
5638
  tr378:
5278
- #line 95 "hpricot_scan.rl"
5279
- { SET(aval, p); ATTR(rb_str_new2("encoding"), aval); }
5639
+ #line 116 "hpricot_scan.rl"
5640
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("encoding")), aval); }
5280
5641
  goto st174;
5281
5642
  st174:
5282
5643
  if ( ++p == pe )
5283
5644
  goto _test_eof174;
5284
5645
  case 174:
5285
- #line 5286 "hpricot_scan.c"
5646
+ #line 5647 "hpricot_scan.c"
5286
5647
  switch( (*p) ) {
5287
5648
  case 32: goto st175;
5288
5649
  case 62: goto tr363;
@@ -5400,14 +5761,14 @@ case 187:
5400
5761
  }
5401
5762
  goto tr349;
5402
5763
  tr393:
5403
- #line 84 "hpricot_scan.rl"
5764
+ #line 105 "hpricot_scan.rl"
5404
5765
  { mark_aval = p; }
5405
5766
  goto st188;
5406
5767
  st188:
5407
5768
  if ( ++p == pe )
5408
5769
  goto _test_eof188;
5409
5770
  case 188:
5410
- #line 5411 "hpricot_scan.c"
5771
+ #line 5772 "hpricot_scan.c"
5411
5772
  if ( (*p) == 111 )
5412
5773
  goto st189;
5413
5774
  goto tr349;
@@ -5419,14 +5780,14 @@ case 189:
5419
5780
  goto tr396;
5420
5781
  goto tr349;
5421
5782
  tr396:
5422
- #line 96 "hpricot_scan.rl"
5423
- { SET(aval, p); ATTR(rb_str_new2("standalone"), aval); }
5783
+ #line 117 "hpricot_scan.rl"
5784
+ { SET(aval, p); ATTR(ID2SYM(rb_intern("standalone")), aval); }
5424
5785
  goto st190;
5425
5786
  st190:
5426
5787
  if ( ++p == pe )
5427
5788
  goto _test_eof190;
5428
5789
  case 190:
5429
- #line 5430 "hpricot_scan.c"
5790
+ #line 5791 "hpricot_scan.c"
5430
5791
  switch( (*p) ) {
5431
5792
  case 32: goto st190;
5432
5793
  case 62: goto tr363;
@@ -5436,14 +5797,14 @@ case 190:
5436
5797
  goto st190;
5437
5798
  goto tr349;
5438
5799
  tr394:
5439
- #line 84 "hpricot_scan.rl"
5800
+ #line 105 "hpricot_scan.rl"
5440
5801
  { mark_aval = p; }
5441
5802
  goto st191;
5442
5803
  st191:
5443
5804
  if ( ++p == pe )
5444
5805
  goto _test_eof191;
5445
5806
  case 191:
5446
- #line 5447 "hpricot_scan.c"
5807
+ #line 5808 "hpricot_scan.c"
5447
5808
  if ( (*p) == 101 )
5448
5809
  goto st192;
5449
5810
  goto tr349;
@@ -5464,14 +5825,14 @@ case 193:
5464
5825
  }
5465
5826
  goto tr349;
5466
5827
  tr399:
5467
- #line 84 "hpricot_scan.rl"
5828
+ #line 105 "hpricot_scan.rl"
5468
5829
  { mark_aval = p; }
5469
5830
  goto st194;
5470
5831
  st194:
5471
5832
  if ( ++p == pe )
5472
5833
  goto _test_eof194;
5473
5834
  case 194:
5474
- #line 5475 "hpricot_scan.c"
5835
+ #line 5836 "hpricot_scan.c"
5475
5836
  if ( (*p) == 111 )
5476
5837
  goto st195;
5477
5838
  goto tr349;
@@ -5483,14 +5844,14 @@ case 195:
5483
5844
  goto tr396;
5484
5845
  goto tr349;
5485
5846
  tr400:
5486
- #line 84 "hpricot_scan.rl"
5847
+ #line 105 "hpricot_scan.rl"
5487
5848
  { mark_aval = p; }
5488
5849
  goto st196;
5489
5850
  st196:
5490
5851
  if ( ++p == pe )
5491
5852
  goto _test_eof196;
5492
5853
  case 196:
5493
- #line 5494 "hpricot_scan.c"
5854
+ #line 5855 "hpricot_scan.c"
5494
5855
  if ( (*p) == 101 )
5495
5856
  goto st197;
5496
5857
  goto tr349;
@@ -5512,14 +5873,14 @@ case 198:
5512
5873
  goto tr403;
5513
5874
  goto tr349;
5514
5875
  tr403:
5515
- #line 84 "hpricot_scan.rl"
5876
+ #line 105 "hpricot_scan.rl"
5516
5877
  { mark_aval = p; }
5517
5878
  goto st199;
5518
5879
  st199:
5519
5880
  if ( ++p == pe )
5520
5881
  goto _test_eof199;
5521
5882
  case 199:
5522
- #line 5523 "hpricot_scan.c"
5883
+ #line 5884 "hpricot_scan.c"
5523
5884
  switch( (*p) ) {
5524
5885
  case 39: goto tr378;
5525
5886
  case 95: goto st199;
@@ -5555,14 +5916,14 @@ case 200:
5555
5916
  goto tr405;
5556
5917
  goto tr349;
5557
5918
  tr405:
5558
- #line 84 "hpricot_scan.rl"
5919
+ #line 105 "hpricot_scan.rl"
5559
5920
  { mark_aval = p; }
5560
5921
  goto st201;
5561
5922
  st201:
5562
5923
  if ( ++p == pe )
5563
5924
  goto _test_eof201;
5564
5925
  case 201:
5565
- #line 5566 "hpricot_scan.c"
5926
+ #line 5927 "hpricot_scan.c"
5566
5927
  switch( (*p) ) {
5567
5928
  case 39: goto tr360;
5568
5929
  case 95: goto st201;
@@ -5611,7 +5972,7 @@ st214:
5611
5972
  case 214:
5612
5973
  #line 1 "hpricot_scan.rl"
5613
5974
  {ts = p;}
5614
- #line 5615 "hpricot_scan.c"
5975
+ #line 5976 "hpricot_scan.c"
5615
5976
  switch( (*p) ) {
5616
5977
  case 10: goto tr423;
5617
5978
  case 45: goto tr424;
@@ -5625,7 +5986,7 @@ st215:
5625
5986
  if ( ++p == pe )
5626
5987
  goto _test_eof215;
5627
5988
  case 215:
5628
- #line 5629 "hpricot_scan.c"
5989
+ #line 5990 "hpricot_scan.c"
5629
5990
  if ( (*p) == 45 )
5630
5991
  goto st202;
5631
5992
  goto tr425;
@@ -5668,7 +6029,7 @@ st216:
5668
6029
  case 216:
5669
6030
  #line 1 "hpricot_scan.rl"
5670
6031
  {ts = p;}
5671
- #line 5672 "hpricot_scan.c"
6032
+ #line 6033 "hpricot_scan.c"
5672
6033
  switch( (*p) ) {
5673
6034
  case 10: goto tr428;
5674
6035
  case 93: goto tr429;
@@ -5682,7 +6043,7 @@ st217:
5682
6043
  if ( ++p == pe )
5683
6044
  goto _test_eof217;
5684
6045
  case 217:
5685
- #line 5686 "hpricot_scan.c"
6046
+ #line 6047 "hpricot_scan.c"
5686
6047
  if ( (*p) == 93 )
5687
6048
  goto st203;
5688
6049
  goto tr430;
@@ -5721,7 +6082,7 @@ st218:
5721
6082
  case 218:
5722
6083
  #line 1 "hpricot_scan.rl"
5723
6084
  {ts = p;}
5724
- #line 5725 "hpricot_scan.c"
6085
+ #line 6086 "hpricot_scan.c"
5725
6086
  switch( (*p) ) {
5726
6087
  case 10: goto tr433;
5727
6088
  case 62: goto tr434;
@@ -6181,11 +6542,12 @@ case 219:
6181
6542
  }
6182
6543
 
6183
6544
  }
6184
- #line 203 "hpricot_scan.rl"
6545
+ #line 564 "hpricot_scan.rl"
6185
6546
 
6186
- if ( cs == hpricot_scan_error ) {
6187
- free(buf);
6188
- if ( !NIL_P(tag) )
6547
+ if (cs == hpricot_scan_error) {
6548
+ if (buf != NULL)
6549
+ free(buf);
6550
+ if (!NIL_P(tag))
6189
6551
  {
6190
6552
  rb_raise(rb_eHpricotParseError, "parse error on element <%s>, starting on line %d.\n" NO_WAY_SERIOUSLY, RSTRING_PTR(tag), curline);
6191
6553
  }
@@ -6195,7 +6557,7 @@ case 219:
6195
6557
  }
6196
6558
  }
6197
6559
 
6198
- if ( done && ele_open )
6560
+ if (done && ele_open)
6199
6561
  {
6200
6562
  ele_open = 0;
6201
6563
  if (ts > 0) {
@@ -6205,11 +6567,11 @@ case 219:
6205
6567
  }
6206
6568
  }
6207
6569
 
6208
- if ( ts == 0 )
6570
+ if (ts == 0)
6209
6571
  {
6210
6572
  have = 0;
6211
6573
  /* text nodes have no ts because each byte is parsed alone */
6212
- if ( mark_tag != NULL && text == 1 )
6574
+ if (mark_tag != NULL && text == 1)
6213
6575
  {
6214
6576
  if (done)
6215
6577
  {
@@ -6224,12 +6586,15 @@ case 219:
6224
6586
  CAT(tag, p);
6225
6587
  }
6226
6588
  }
6227
- mark_tag = buf;
6589
+ if (io)
6590
+ mark_tag = buf;
6591
+ else
6592
+ mark_tag = RSTRING_PTR(port);
6228
6593
  }
6229
- else
6594
+ else if (io)
6230
6595
  {
6231
6596
  have = pe - ts;
6232
- memmove( buf, ts, have );
6597
+ memmove(buf, ts, have);
6233
6598
  SLIDE(tag);
6234
6599
  SLIDE(akey);
6235
6600
  SLIDE(aval);
@@ -6237,18 +6602,91 @@ case 219:
6237
6602
  ts = buf;
6238
6603
  }
6239
6604
  }
6240
- free(buf);
6605
+
6606
+ if (buf != NULL)
6607
+ free(buf);
6608
+
6609
+ if (S != NULL)
6610
+ {
6611
+ VALUE doc = S->doc;
6612
+ rb_gc_unregister_address(&S->doc);
6613
+ free(S);
6614
+ return doc;
6615
+ }
6616
+
6617
+ return Qnil;
6241
6618
  }
6242
6619
 
6243
6620
  void Init_hpricot_scan()
6244
6621
  {
6245
- VALUE mHpricot = rb_define_module("Hpricot");
6622
+ mHpricot = rb_define_module("Hpricot");
6246
6623
  rb_define_attr(rb_singleton_class(mHpricot), "buffer_size", 1, 1);
6247
- rb_define_singleton_method(mHpricot, "scan", hpricot_scan, 1);
6624
+ rb_define_singleton_method(mHpricot, "scan", hpricot_scan, -1);
6625
+ rb_define_singleton_method(mHpricot, "css", hpricot_css, 3);
6248
6626
  rb_eHpricotParseError = rb_define_class_under(mHpricot, "ParseError", rb_eStandardError);
6249
6627
 
6628
+ cDoc = rb_define_class_under(mHpricot, "Doc", rb_cObject);
6629
+ rb_define_alloc_func(cDoc, hpricot_ele_alloc);
6630
+ rb_define_method(cDoc, "children", hpricot_ele_get_children, 0);
6631
+ rb_define_method(cDoc, "children=", hpricot_ele_set_children, 1);
6632
+
6633
+ cBaseEle = rb_define_class_under(mHpricot, "BaseEle", rb_cObject);
6634
+ rb_define_alloc_func(cBaseEle, hpricot_ele_alloc);
6635
+ rb_define_method(cBaseEle, "raw_string", hpricot_ele_get_raw, 0);
6636
+ rb_define_method(cBaseEle, "clear_raw", hpricot_ele_clear_raw, 0);
6637
+ rb_define_method(cBaseEle, "parent", hpricot_ele_get_parent, 0);
6638
+ rb_define_method(cBaseEle, "parent=", hpricot_ele_set_parent, 1);
6639
+ cCData = rb_define_class_under(mHpricot, "CData", cBaseEle);
6640
+ rb_define_method(cCData, "content", hpricot_ele_get_tag, 0);
6641
+ rb_define_method(cCData, "content=", hpricot_ele_set_tag, 1);
6642
+ cComment = rb_define_class_under(mHpricot, "Comment", cBaseEle);
6643
+ rb_define_method(cComment, "content", hpricot_ele_get_tag, 0);
6644
+ rb_define_method(cComment, "content=", hpricot_ele_set_tag, 1);
6645
+ cDocType = rb_define_class_under(mHpricot, "DocType", cBaseEle);
6646
+ rb_define_method(cDocType, "target", hpricot_ele_get_tag, 0);
6647
+ rb_define_method(cDocType, "target=", hpricot_ele_set_tag, 1);
6648
+ rb_define_method(cDocType, "public_id", hpricot_ele_get_public_id, 0);
6649
+ rb_define_method(cDocType, "public_id=", hpricot_ele_set_public_id, 1);
6650
+ rb_define_method(cDocType, "system_id", hpricot_ele_get_system_id, 0);
6651
+ rb_define_method(cDocType, "system_id=", hpricot_ele_set_system_id, 1);
6652
+ cElem = rb_define_class_under(mHpricot, "Elem", cBaseEle);
6653
+ rb_define_method(cElem, "raw_attributes", hpricot_ele_get_attr, 0);
6654
+ rb_define_method(cElem, "raw_attributes=", hpricot_ele_set_attr, 1);
6655
+ rb_define_method(cElem, "children", hpricot_ele_get_children, 0);
6656
+ rb_define_method(cElem, "children=", hpricot_ele_set_children, 1);
6657
+ rb_define_method(cElem, "etag", hpricot_ele_get_etag, 0);
6658
+ rb_define_method(cElem, "etag=", hpricot_ele_set_etag, 1);
6659
+ rb_define_method(cElem, "name", hpricot_ele_get_tag, 0);
6660
+ rb_define_method(cElem, "name=", hpricot_ele_set_tag, 1);
6661
+ cETag = rb_define_class_under(mHpricot, "ETag", cBaseEle);
6662
+ rb_define_method(cETag, "name", hpricot_ele_get_tag, 0);
6663
+ rb_define_method(cETag, "name=", hpricot_ele_set_tag, 1);
6664
+ cBogusETag = rb_define_class_under(mHpricot, "BogusETag", cETag);
6665
+ cText = rb_define_class_under(mHpricot, "Text", cBaseEle);
6666
+ rb_define_method(cText, "content", hpricot_ele_get_tag, 0);
6667
+ rb_define_method(cText, "content=", hpricot_ele_set_tag, 1);
6668
+ cXMLDecl = rb_define_class_under(mHpricot, "XMLDecl", cBaseEle);
6669
+ rb_define_method(cXMLDecl, "encoding", hpricot_ele_get_encoding, 0);
6670
+ rb_define_method(cXMLDecl, "encoding=", hpricot_ele_set_encoding, 1);
6671
+ rb_define_method(cXMLDecl, "standalone", hpricot_ele_get_standalone, 0);
6672
+ rb_define_method(cXMLDecl, "standalone=", hpricot_ele_set_standalone, 1);
6673
+ rb_define_method(cXMLDecl, "version", hpricot_ele_get_version, 0);
6674
+ rb_define_method(cXMLDecl, "version=", hpricot_ele_set_version, 1);
6675
+ cProcIns = rb_define_class_under(mHpricot, "ProcIns", cBaseEle);
6676
+ rb_define_method(cProcIns, "target", hpricot_ele_get_tag, 0);
6677
+ rb_define_method(cProcIns, "target=", hpricot_ele_set_tag, 1);
6678
+ rb_define_method(cProcIns, "content", hpricot_ele_get_attr, 0);
6679
+ rb_define_method(cProcIns, "content=", hpricot_ele_set_attr, 1);
6680
+
6681
+ s_ElementContent = rb_intern("ElementContent");
6682
+ symAllow = ID2SYM(rb_intern("allow"));
6683
+ symDeny = ID2SYM(rb_intern("deny"));
6684
+ s_downcase = rb_intern("downcase");
6685
+ s_new = rb_intern("new");
6686
+ s_parent = rb_intern("parent");
6250
6687
  s_read = rb_intern("read");
6251
6688
  s_to_str = rb_intern("to_str");
6689
+ iv_parent = rb_intern("parent");
6252
6690
  sym_xmldecl = ID2SYM(rb_intern("xmldecl"));
6253
6691
  sym_doctype = ID2SYM(rb_intern("doctype"));
6254
6692
  sym_procins = ID2SYM(rb_intern("procins"));
@@ -6258,4 +6696,9 @@ void Init_hpricot_scan()
6258
6696
  sym_comment = ID2SYM(rb_intern("comment"));
6259
6697
  sym_cdata = ID2SYM(rb_intern("cdata"));
6260
6698
  sym_text = ID2SYM(rb_intern("text"));
6699
+ sym_EMPTY = ID2SYM(rb_intern("EMPTY"));
6700
+ sym_CDATA = ID2SYM(rb_intern("CDATA"));
6701
+
6702
+ rb_const_set(mHpricot, rb_intern("ProcInsParse"),
6703
+ reProcInsParse = rb_eval_string("/\\A<\\?(\\S+)\\s+(.+)/m"));
6261
6704
  }