nokogiri 1.4.7 → 1.5.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (164) hide show
  1. data/CHANGELOG.ja.rdoc +8 -83
  2. data/CHANGELOG.rdoc +6 -80
  3. data/Manifest.txt +4 -74
  4. data/README.ja.rdoc +5 -1
  5. data/README.rdoc +8 -22
  6. data/Rakefile +79 -60
  7. data/bin/nokogiri +1 -6
  8. data/deps.rip +5 -0
  9. data/ext/nokogiri/extconf.rb +32 -53
  10. data/ext/nokogiri/nokogiri.c +0 -2
  11. data/ext/nokogiri/nokogiri.h +0 -9
  12. data/ext/nokogiri/xml_document.c +0 -14
  13. data/ext/nokogiri/xml_dtd.c +2 -2
  14. data/ext/nokogiri/xml_io.c +7 -32
  15. data/ext/nokogiri/xml_node.c +31 -103
  16. data/ext/nokogiri/xml_node_set.c +8 -8
  17. data/ext/nokogiri/xml_reader.c +1 -20
  18. data/ext/nokogiri/xml_sax_parser.c +3 -5
  19. data/ext/nokogiri/xml_sax_parser_context.c +0 -40
  20. data/ext/nokogiri/xml_xpath_context.c +2 -35
  21. data/ext/nokogiri/xslt_stylesheet.c +6 -124
  22. data/lib/nokogiri.rb +7 -3
  23. data/lib/nokogiri/css.rb +3 -6
  24. data/lib/nokogiri/css/generated_parser.rb +669 -0
  25. data/lib/nokogiri/css/generated_tokenizer.rb +145 -0
  26. data/lib/nokogiri/css/parser.rb +70 -665
  27. data/lib/nokogiri/css/parser.y +1 -6
  28. data/lib/nokogiri/css/tokenizer.rb +3 -148
  29. data/lib/nokogiri/css/tokenizer.rex +1 -1
  30. data/lib/nokogiri/css/xpath_visitor.rb +14 -16
  31. data/lib/nokogiri/decorators/slop.rb +3 -5
  32. data/lib/nokogiri/html.rb +3 -2
  33. data/lib/nokogiri/html/document.rb +18 -134
  34. data/lib/nokogiri/html/document_fragment.rb +21 -26
  35. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  36. data/lib/nokogiri/html/sax/parser.rb +2 -6
  37. data/lib/nokogiri/version.rb +4 -9
  38. data/lib/nokogiri/xml/attribute_decl.rb +1 -1
  39. data/lib/nokogiri/xml/builder.rb +1 -1
  40. data/lib/nokogiri/xml/document.rb +3 -27
  41. data/lib/nokogiri/xml/document_fragment.rb +2 -9
  42. data/lib/nokogiri/xml/dtd.rb +1 -12
  43. data/lib/nokogiri/xml/element_decl.rb +1 -1
  44. data/lib/nokogiri/xml/entity_decl.rb +1 -1
  45. data/lib/nokogiri/xml/node.rb +75 -172
  46. data/lib/nokogiri/xml/node/save_options.rb +0 -10
  47. data/lib/nokogiri/xml/node_set.rb +3 -28
  48. data/lib/nokogiri/xml/parse_options.rb +0 -8
  49. data/lib/nokogiri/xml/reader.rb +6 -44
  50. data/lib/nokogiri/xml/sax/document.rb +5 -9
  51. data/lib/nokogiri/xml/schema.rb +1 -7
  52. data/lib/nokogiri/xslt.rb +5 -9
  53. data/tasks/cross_compile.rb +12 -27
  54. data/tasks/test.rb +0 -0
  55. data/test/css/test_parser.rb +19 -40
  56. data/test/css/test_tokenizer.rb +0 -8
  57. data/test/helper.rb +1 -4
  58. data/test/html/sax/test_parser.rb +21 -47
  59. data/test/html/sax/test_parser_context.rb +2 -2
  60. data/test/html/test_document.rb +3 -58
  61. data/test/html/test_document_encoding.rb +0 -53
  62. data/test/html/test_document_fragment.rb +13 -82
  63. data/test/html/test_element_description.rb +4 -2
  64. data/test/html/test_node.rb +0 -9
  65. data/test/test_memory_leak.rb +2 -57
  66. data/test/test_nokogiri.rb +14 -20
  67. data/test/test_reader.rb +7 -47
  68. data/test/test_xslt_transforms.rb +5 -8
  69. data/test/xml/sax/test_parser.rb +17 -34
  70. data/test/xml/sax/test_parser_context.rb +0 -50
  71. data/test/xml/sax/test_push_parser.rb +1 -18
  72. data/test/xml/test_attr.rb +4 -31
  73. data/test/xml/test_attribute_decl.rb +7 -3
  74. data/test/xml/test_builder.rb +5 -5
  75. data/test/xml/test_cdata.rb +3 -3
  76. data/test/xml/test_document.rb +18 -15
  77. data/test/xml/test_document_fragment.rb +20 -19
  78. data/test/xml/test_dtd.rb +13 -18
  79. data/test/xml/test_element_content.rb +1 -1
  80. data/test/xml/test_element_decl.rb +1 -1
  81. data/test/xml/test_entity_decl.rb +12 -10
  82. data/test/xml/test_namespace.rb +7 -5
  83. data/test/xml/test_node.rb +15 -54
  84. data/test/xml/test_node_reparenting.rb +42 -85
  85. data/test/xml/test_node_set.rb +2 -61
  86. data/test/xml/test_schema.rb +0 -5
  87. data/test/xml/test_text.rb +2 -11
  88. data/test/xml/test_unparented_node.rb +1 -1
  89. data/test/xml/test_xpath.rb +7 -43
  90. metadata +131 -155
  91. data/.gemtest +0 -0
  92. data/ext/nokogiri/depend +0 -358
  93. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  94. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  95. data/lib/nokogiri/css/parser_extras.rb +0 -91
  96. data/lib/nokogiri/ffi/encoding_handler.rb +0 -42
  97. data/lib/nokogiri/ffi/html/document.rb +0 -28
  98. data/lib/nokogiri/ffi/html/element_description.rb +0 -81
  99. data/lib/nokogiri/ffi/html/entity_lookup.rb +0 -16
  100. data/lib/nokogiri/ffi/html/sax/parser_context.rb +0 -38
  101. data/lib/nokogiri/ffi/io_callbacks.rb +0 -42
  102. data/lib/nokogiri/ffi/libxml.rb +0 -420
  103. data/lib/nokogiri/ffi/structs/common_node.rb +0 -38
  104. data/lib/nokogiri/ffi/structs/html_elem_desc.rb +0 -24
  105. data/lib/nokogiri/ffi/structs/html_entity_desc.rb +0 -13
  106. data/lib/nokogiri/ffi/structs/xml_alloc.rb +0 -16
  107. data/lib/nokogiri/ffi/structs/xml_attr.rb +0 -20
  108. data/lib/nokogiri/ffi/structs/xml_attribute.rb +0 -27
  109. data/lib/nokogiri/ffi/structs/xml_buffer.rb +0 -16
  110. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +0 -11
  111. data/lib/nokogiri/ffi/structs/xml_document.rb +0 -117
  112. data/lib/nokogiri/ffi/structs/xml_dtd.rb +0 -28
  113. data/lib/nokogiri/ffi/structs/xml_element.rb +0 -26
  114. data/lib/nokogiri/ffi/structs/xml_element_content.rb +0 -17
  115. data/lib/nokogiri/ffi/structs/xml_entity.rb +0 -32
  116. data/lib/nokogiri/ffi/structs/xml_enumeration.rb +0 -12
  117. data/lib/nokogiri/ffi/structs/xml_node.rb +0 -28
  118. data/lib/nokogiri/ffi/structs/xml_node_set.rb +0 -53
  119. data/lib/nokogiri/ffi/structs/xml_notation.rb +0 -11
  120. data/lib/nokogiri/ffi/structs/xml_ns.rb +0 -15
  121. data/lib/nokogiri/ffi/structs/xml_parser_context.rb +0 -20
  122. data/lib/nokogiri/ffi/structs/xml_parser_input.rb +0 -19
  123. data/lib/nokogiri/ffi/structs/xml_relax_ng.rb +0 -14
  124. data/lib/nokogiri/ffi/structs/xml_sax_handler.rb +0 -51
  125. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +0 -124
  126. data/lib/nokogiri/ffi/structs/xml_schema.rb +0 -13
  127. data/lib/nokogiri/ffi/structs/xml_syntax_error.rb +0 -31
  128. data/lib/nokogiri/ffi/structs/xml_text_reader.rb +0 -12
  129. data/lib/nokogiri/ffi/structs/xml_xpath_context.rb +0 -38
  130. data/lib/nokogiri/ffi/structs/xml_xpath_object.rb +0 -35
  131. data/lib/nokogiri/ffi/structs/xml_xpath_parser_context.rb +0 -20
  132. data/lib/nokogiri/ffi/structs/xslt_stylesheet.rb +0 -13
  133. data/lib/nokogiri/ffi/weak_bucket.rb +0 -40
  134. data/lib/nokogiri/ffi/xml/attr.rb +0 -41
  135. data/lib/nokogiri/ffi/xml/attribute_decl.rb +0 -27
  136. data/lib/nokogiri/ffi/xml/cdata.rb +0 -19
  137. data/lib/nokogiri/ffi/xml/comment.rb +0 -18
  138. data/lib/nokogiri/ffi/xml/document.rb +0 -174
  139. data/lib/nokogiri/ffi/xml/document_fragment.rb +0 -21
  140. data/lib/nokogiri/ffi/xml/dtd.rb +0 -67
  141. data/lib/nokogiri/ffi/xml/element_content.rb +0 -43
  142. data/lib/nokogiri/ffi/xml/element_decl.rb +0 -19
  143. data/lib/nokogiri/ffi/xml/entity_decl.rb +0 -36
  144. data/lib/nokogiri/ffi/xml/entity_reference.rb +0 -19
  145. data/lib/nokogiri/ffi/xml/namespace.rb +0 -44
  146. data/lib/nokogiri/ffi/xml/node.rb +0 -559
  147. data/lib/nokogiri/ffi/xml/node_set.rb +0 -150
  148. data/lib/nokogiri/ffi/xml/processing_instruction.rb +0 -20
  149. data/lib/nokogiri/ffi/xml/reader.rb +0 -236
  150. data/lib/nokogiri/ffi/xml/relax_ng.rb +0 -85
  151. data/lib/nokogiri/ffi/xml/sax/parser.rb +0 -143
  152. data/lib/nokogiri/ffi/xml/sax/parser_context.rb +0 -79
  153. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +0 -51
  154. data/lib/nokogiri/ffi/xml/schema.rb +0 -109
  155. data/lib/nokogiri/ffi/xml/syntax_error.rb +0 -98
  156. data/lib/nokogiri/ffi/xml/text.rb +0 -18
  157. data/lib/nokogiri/ffi/xml/xpath.rb +0 -9
  158. data/lib/nokogiri/ffi/xml/xpath_context.rb +0 -153
  159. data/lib/nokogiri/ffi/xslt/stylesheet.rb +0 -77
  160. data/test/decorators/test_slop.rb +0 -16
  161. data/test/ffi/test_document.rb +0 -35
  162. data/test/files/encoding.html +0 -82
  163. data/test/files/encoding.xhtml +0 -84
  164. data/test/xslt/test_custom_functions.rb +0 -94
@@ -49,8 +49,8 @@ static VALUE push(VALUE self, VALUE rb_node)
49
49
  xmlNodeSetPtr node_set;
50
50
  xmlNodePtr node;
51
51
 
52
- if(!(rb_obj_is_kind_of(rb_node, cNokogiriXmlNode) || rb_obj_is_kind_of(rb_node, cNokogiriXmlNamespace)))
53
- rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node or Nokogiri::XML::Namespace");
52
+ if(!rb_obj_is_kind_of(rb_node, cNokogiriXmlNode))
53
+ rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node");
54
54
 
55
55
  Data_Get_Struct(self, xmlNodeSet, node_set);
56
56
  Data_Get_Struct(rb_node, xmlNode, node);
@@ -70,9 +70,9 @@ static VALUE delete(VALUE self, VALUE rb_node)
70
70
  xmlNodeSetPtr node_set ;
71
71
  xmlNodePtr node ;
72
72
 
73
- if(!(rb_obj_is_kind_of(rb_node, cNokogiriXmlNode) || rb_obj_is_kind_of(rb_node, cNokogiriXmlNamespace)))
74
- rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node or Nokogiri::XML::Namespace");
75
-
73
+ if(!rb_obj_is_kind_of(rb_node, cNokogiriXmlNode))
74
+ rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node");
75
+
76
76
  Data_Get_Struct(self, xmlNodeSet, node_set);
77
77
  Data_Get_Struct(rb_node, xmlNode, node);
78
78
 
@@ -117,8 +117,8 @@ static VALUE include_eh(VALUE self, VALUE rb_node)
117
117
  xmlNodeSetPtr node_set;
118
118
  xmlNodePtr node;
119
119
 
120
- if(!(rb_obj_is_kind_of(rb_node, cNokogiriXmlNode) || rb_obj_is_kind_of(rb_node, cNokogiriXmlNamespace)))
121
- rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node or Nokogiri::XML::Namespace");
120
+ if(!rb_obj_is_kind_of(rb_node, cNokogiriXmlNode))
121
+ rb_raise(rb_eArgError, "node must be a Nokogiri::XML::Node");
122
122
 
123
123
  Data_Get_Struct(self, xmlNodeSet, node_set);
124
124
  Data_Get_Struct(rb_node, xmlNode, node);
@@ -257,7 +257,7 @@ static VALUE slice(int argc, VALUE *argv, VALUE self)
257
257
  }
258
258
 
259
259
  /* if arg is Range */
260
- switch (rb_range_beg_len(arg, &beg, &len, (long)node_set->nodeNr, 0)) {
260
+ switch (rb_range_beg_len(arg, &beg, &len, node_set->nodeNr, 0)) {
261
261
  case Qfalse:
262
262
  break;
263
263
  case Qnil:
@@ -523,7 +523,7 @@ static VALUE outer_xml(VALUE self)
523
523
  Data_Get_Struct(self, xmlTextReader, reader);
524
524
 
525
525
  value = xmlTextReaderReadOuterXml(reader);
526
-
526
+
527
527
  if(value) {
528
528
  str = NOKOGIRI_STR_NEW2((char*)value);
529
529
  xmlFree(value);
@@ -620,24 +620,6 @@ static VALUE from_io(int argc, VALUE *argv, VALUE klass)
620
620
  return rb_reader;
621
621
  }
622
622
 
623
- /*
624
- * call-seq:
625
- * reader.empty_element? # => true or false
626
- *
627
- * Returns true if the current node is empty, otherwise false.
628
- */
629
- static VALUE empty_element_p(VALUE self)
630
- {
631
- xmlTextReaderPtr reader;
632
-
633
- Data_Get_Struct(self, xmlTextReader, reader);
634
-
635
- if(xmlTextReaderIsEmptyElement(reader))
636
- return Qtrue;
637
-
638
- return Qfalse;
639
- }
640
-
641
623
  VALUE cNokogiriXmlReader;
642
624
 
643
625
  void init_xml_reader()
@@ -674,7 +656,6 @@ void init_xml_reader()
674
656
  rb_define_method(klass, "attribute", reader_attribute, 1);
675
657
  rb_define_method(klass, "namespaces", namespaces, 0);
676
658
  rb_define_method(klass, "attribute_at", attribute_at, 1);
677
- rb_define_method(klass, "empty_element?", empty_element_p, 0);
678
659
  rb_define_method(klass, "attributes?", attributes_eh, 0);
679
660
  rb_define_method(klass, "value?", value_eh, 0);
680
661
  rb_define_method(klass, "default?", default_eh, 0);
@@ -62,10 +62,8 @@ static void start_element(void * ctx, const xmlChar *name, const xmlChar **atts)
62
62
  int i = 0;
63
63
  if(atts) {
64
64
  while((attr = atts[i]) != NULL) {
65
- const xmlChar * val = atts[i+1];
66
- VALUE value = val != NULL ? NOKOGIRI_STR_NEW2(val) : Qnil;
67
- rb_ary_push(attributes, rb_ary_new3(2, NOKOGIRI_STR_NEW2(attr), value));
68
- i+=2;
65
+ rb_ary_push(attributes, NOKOGIRI_STR_NEW2(attr));
66
+ i++;
69
67
  }
70
68
  }
71
69
 
@@ -240,7 +238,7 @@ static void deallocate(xmlSAXHandlerPtr handler)
240
238
 
241
239
  static VALUE allocate(VALUE klass)
242
240
  {
243
- xmlSAXHandlerPtr handler = calloc((size_t)1, sizeof(xmlSAXHandler));
241
+ xmlSAXHandlerPtr handler = calloc(1, sizeof(xmlSAXHandler));
244
242
 
245
243
  xmlSetStructuredErrorFunc(NULL, NULL);
246
244
 
@@ -140,44 +140,6 @@ static VALUE get_replace_entities(VALUE self)
140
140
  return Qtrue;
141
141
  }
142
142
 
143
- /*
144
- * call-seq: line
145
- *
146
- * Get the current line the parser context is processing.
147
- */
148
- static VALUE line(VALUE self)
149
- {
150
- xmlParserCtxtPtr ctxt;
151
- xmlParserInputPtr io;
152
-
153
- Data_Get_Struct(self, xmlParserCtxt, ctxt);
154
-
155
- io = ctxt->input;
156
- if(io)
157
- return INT2NUM(io->line);
158
-
159
- return Qnil;
160
- }
161
-
162
- /*
163
- * call-seq: column
164
- *
165
- * Get the current column the parser context is processing.
166
- */
167
- static VALUE column(VALUE self)
168
- {
169
- xmlParserCtxtPtr ctxt;
170
- xmlParserInputPtr io;
171
-
172
- Data_Get_Struct(self, xmlParserCtxt, ctxt);
173
-
174
- io = ctxt->input;
175
- if(io)
176
- return INT2NUM(io->col);
177
-
178
- return Qnil;
179
- }
180
-
181
143
  void init_xml_sax_parser_context()
182
144
  {
183
145
  VALUE nokogiri = rb_define_module("Nokogiri");
@@ -194,6 +156,4 @@ void init_xml_sax_parser_context()
194
156
  rb_define_method(klass, "parse_with", parse_with, 1);
195
157
  rb_define_method(klass, "replace_entities=", set_replace_entities, 1);
196
158
  rb_define_method(klass, "replace_entities", get_replace_entities, 0);
197
- rb_define_method(klass, "line", line, 0);
198
- rb_define_method(klass, "column", column, 0);
199
159
  }
@@ -27,28 +27,6 @@ static VALUE register_ns(VALUE self, VALUE prefix, VALUE uri)
27
27
  return self;
28
28
  }
29
29
 
30
- /*
31
- * call-seq:
32
- * register_variable(name, value)
33
- *
34
- * Register the variable +name+ with +value+.
35
- */
36
- static VALUE register_variable(VALUE self, VALUE name, VALUE value)
37
- {
38
- xmlXPathContextPtr ctx;
39
- xmlXPathObjectPtr xmlValue;
40
- Data_Get_Struct(self, xmlXPathContext, ctx);
41
-
42
- xmlValue = xmlXPathNewCString(StringValuePtr(value));
43
-
44
- xmlXPathRegisterVariable( ctx,
45
- (const xmlChar *)StringValuePtr(name),
46
- xmlValue
47
- );
48
-
49
- return self;
50
- }
51
-
52
30
  static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
53
31
  {
54
32
  VALUE xpath_handler = Qnil;
@@ -68,11 +46,7 @@ static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
68
46
 
69
47
  xpath_handler = (VALUE)(ctx->context->userData);
70
48
 
71
- argv = (VALUE *)calloc((size_t)nargs, sizeof(VALUE));
72
- for (i = 0 ; i < nargs ; ++i) {
73
- rb_gc_register_address(&argv[i]);
74
- }
75
-
49
+ argv = (VALUE *)calloc((unsigned int)nargs, sizeof(VALUE));
76
50
  doc = DOC_RUBY_OBJECT(ctx->context->doc);
77
51
 
78
52
  i = nargs - 1;
@@ -103,10 +77,6 @@ static void ruby_funcall(xmlXPathParserContextPtr ctx, int nargs)
103
77
  nargs,
104
78
  argv
105
79
  );
106
-
107
- for (i = 0 ; i < nargs ; ++i) {
108
- rb_gc_unregister_address(&argv[i]);
109
- }
110
80
  free(argv);
111
81
 
112
82
  switch(TYPE(result)) {
@@ -186,7 +156,7 @@ static void xpath_generic_exception_handler(void * ctx, const char *msg, ...)
186
156
 
187
157
  /*
188
158
  * call-seq:
189
- * evaluate(search_path, handler = nil)
159
+ * evaluate(search_path)
190
160
  *
191
161
  * Evaluate the +search_path+ returning an XML::XPath object.
192
162
  */
@@ -257,8 +227,6 @@ static VALUE evaluate(int argc, VALUE *argv, VALUE self)
257
227
  DOC_RUBY_OBJECT(ctx->doc));
258
228
  }
259
229
 
260
- xmlXPathFreeNodeSetList(xpath);
261
-
262
230
  return thing;
263
231
  }
264
232
 
@@ -304,6 +272,5 @@ void init_xml_xpath_context(void)
304
272
 
305
273
  rb_define_singleton_method(klass, "new", new, 1);
306
274
  rb_define_method(klass, "evaluate", evaluate, -1);
307
- rb_define_method(klass, "register_variable", register_variable, 2);
308
275
  rb_define_method(klass, "register_ns", register_ns, 2);
309
276
  }
@@ -5,8 +5,6 @@
5
5
  #include <libxslt/transform.h>
6
6
  #include <libexslt/exslt.h>
7
7
 
8
- VALUE xslt;
9
-
10
8
  int vasprintf (char **strp, const char *fmt, va_list ap);
11
9
 
12
10
  static void dealloc(xsltStylesheetPtr doc)
@@ -26,7 +24,7 @@ static void xslt_generic_error_handler(void * ctx, const char *msg, ...)
26
24
  vasprintf(&message, msg, args);
27
25
  va_end(args);
28
26
 
29
- rb_exc_raise(rb_exc_new2(rb_eRuntimeError, message));
27
+ rb_raise(rb_eRuntimeError, message);
30
28
  }
31
29
 
32
30
  /*
@@ -99,9 +97,7 @@ static VALUE transform(int argc, VALUE* argv, VALUE self)
99
97
  long param_len, j ;
100
98
 
101
99
  rb_scan_args(argc, argv, "11", &xmldoc, &paramobj);
102
- if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0L) ; }
103
- if (!rb_obj_is_kind_of(xmldoc, cNokogiriXmlDocument))
104
- rb_raise(rb_eArgError, "argument must be a Nokogiri::XML::Document");
100
+ if (NIL_P(paramobj)) { paramobj = rb_ary_new2(0) ; }
105
101
 
106
102
  /* handle hashes as arguments. */
107
103
  if(T_HASH == TYPE(paramobj)) {
@@ -128,133 +124,19 @@ static VALUE transform(int argc, VALUE* argv, VALUE self)
128
124
 
129
125
  if (!result) rb_raise(rb_eRuntimeError, "could not perform xslt transform on document");
130
126
 
131
- return Nokogiri_wrap_xml_document((VALUE)0, result) ;
132
- }
133
-
134
- static void method_caller(xmlXPathParserContextPtr ctxt, int nargs)
135
- {
136
- const xmlChar * function;
137
- const xmlChar * functionURI;
138
- size_t i, count;
139
-
140
- xsltTransformContextPtr transform;
141
- xmlXPathObjectPtr xpath;
142
- VALUE obj;
143
- VALUE *args;
144
- VALUE result;
145
-
146
- transform = xsltXPathGetTransformContext(ctxt);
147
-
148
- function = ctxt->context->function;
149
- functionURI = ctxt->context->functionURI;
150
- obj = (VALUE)xsltGetExtData(transform, functionURI);
151
-
152
- count = (size_t)ctxt->valueNr;
153
- args = calloc(count, sizeof(VALUE *));
154
-
155
- for(i = 0; i < count; i++) {
156
- VALUE thing;
157
-
158
- xpath = valuePop(ctxt);
159
- switch(xpath->type) {
160
- case XPATH_STRING:
161
- thing = NOKOGIRI_STR_NEW2(xpath->stringval);
162
- break;
163
- case XPATH_NODESET:
164
- if(NULL == xpath->nodesetval) {
165
- thing = Nokogiri_wrap_xml_node_set(
166
- xmlXPathNodeSetCreate(NULL),
167
- DOC_RUBY_OBJECT(ctxt->context->doc));
168
- } else {
169
- thing = Nokogiri_wrap_xml_node_set(xpath->nodesetval,
170
- DOC_RUBY_OBJECT(ctxt->context->doc));
171
- }
172
- break;
173
- default:
174
- rb_raise(rb_eRuntimeError, "do not handle type: %d", xpath->type);
175
- }
176
- args[i] = thing;
177
- }
178
- result = rb_funcall3(obj, rb_intern((const char *)function), (int)count, args);
179
- switch(TYPE(result)) {
180
- case T_FLOAT:
181
- case T_BIGNUM:
182
- case T_FIXNUM:
183
- xmlXPathReturnNumber(ctxt, NUM2DBL(result));
184
- break;
185
- case T_STRING:
186
- xmlXPathReturnString(
187
- ctxt,
188
- xmlStrdup((xmlChar *)StringValuePtr(result))
189
- );
190
- break;
191
- case T_TRUE:
192
- xmlXPathReturnTrue(ctxt);
193
- break;
194
- case T_FALSE:
195
- xmlXPathReturnFalse(ctxt);
196
- break;
197
- case T_NIL:
198
- break;
199
- default:
200
- rb_raise(rb_eRuntimeError, "Invalid return type");
201
- }
202
- }
203
-
204
- static void * initFunc(xsltTransformContextPtr ctxt, const xmlChar *uri)
205
- {
206
- VALUE modules = rb_iv_get(xslt, "@modules");
207
- VALUE obj = rb_hash_aref(modules, rb_str_new2((const char *)uri));
208
- VALUE args = { Qfalse };
209
- VALUE methods = rb_funcall(obj, rb_intern("instance_methods"), 1, args);
210
- int i;
211
-
212
- for(i = 0; i < RARRAY_LEN(methods); i++) {
213
- VALUE method_name = rb_obj_as_string(RARRAY_PTR(methods)[i]);
214
- xsltRegisterExtFunction(ctxt,
215
- (unsigned char *)StringValuePtr(method_name), uri, method_caller);
216
- }
217
-
218
- return (void *)rb_class_new_instance(0, NULL, obj);
219
- }
220
-
221
- static void shutdownFunc(xsltTransformContextPtr ctxt,
222
- const xmlChar *uri, void *data)
223
- {
224
- }
225
-
226
- /*
227
- * call-seq:
228
- * register(uri, custom_handler_class)
229
- *
230
- * Register a class that implements custom XLST transformation functions.
231
- */
232
- static VALUE registr(VALUE self, VALUE uri, VALUE obj)
233
- {
234
- VALUE modules = rb_iv_get(self, "@modules");
235
- if(NIL_P(modules)) rb_raise(rb_eRuntimeError, "wtf! @modules isn't set");
236
-
237
- rb_hash_aset(modules, uri, obj);
238
- xsltRegisterExtModule((unsigned char *)StringValuePtr(uri), initFunc, shutdownFunc);
239
- return self;
127
+ return Nokogiri_wrap_xml_document(0, result) ;
240
128
  }
241
129
 
242
130
  VALUE cNokogiriXsltStylesheet ;
243
131
  void init_xslt_stylesheet()
244
132
  {
245
- VALUE nokogiri;
246
- VALUE klass;
247
-
248
- nokogiri = rb_define_module("Nokogiri");
249
- xslt = rb_define_module_under(nokogiri, "XSLT");
250
- klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
251
-
252
- rb_iv_set(xslt, "@modules", rb_hash_new());
133
+ VALUE nokogiri = rb_define_module("Nokogiri");
134
+ VALUE xslt = rb_define_module_under(nokogiri, "XSLT");
135
+ VALUE klass = rb_define_class_under(xslt, "Stylesheet", rb_cObject);
253
136
 
254
137
  cNokogiriXsltStylesheet = klass;
255
138
 
256
139
  rb_define_singleton_method(klass, "parse_stylesheet_doc", parse_stylesheet_doc, 1);
257
- rb_define_singleton_method(xslt, "register", registr, 2);
258
140
  rb_define_method(klass, "serialize", serialize, 1);
259
141
  rb_define_method(klass, "transform", transform, -1);
260
142
  }
data/lib/nokogiri.rb CHANGED
@@ -6,9 +6,13 @@ ENV['PATH'] = [File.expand_path(
6
6
  File.join(File.dirname(__FILE__), "..", "ext", "nokogiri")
7
7
  ), ENV['PATH']].compact.join(';') if RbConfig::CONFIG['host_os'] =~ /(mswin|mingw)/i
8
8
 
9
- if ENV['NOKOGIRI_FFI'] || RUBY_PLATFORM =~ /java/
10
- require 'ffi'
11
- require 'nokogiri/ffi/libxml'
9
+ if defined? RUBY_ENGINE && RUBY_ENGINE == "jruby"
10
+ require 'isorelax.jar'
11
+ require 'jing.jar'
12
+ require 'nekohtml.jar'
13
+ require 'nekodtd.jar'
14
+ require 'xercesImpl.jar'
15
+ require 'nokogiri/nokogiri'
12
16
  else
13
17
  require 'nokogiri/nokogiri'
14
18
  end
data/lib/nokogiri/css.rb CHANGED
@@ -1,12 +1,9 @@
1
1
  require 'nokogiri/css/node'
2
2
  require 'nokogiri/css/xpath_visitor'
3
-
4
- x = $-w
5
- $-w = false
6
- require 'nokogiri/css/parser'
7
- $-w = x
8
-
3
+ require 'nokogiri/css/generated_parser'
4
+ require 'nokogiri/css/generated_tokenizer'
9
5
  require 'nokogiri/css/tokenizer'
6
+ require 'nokogiri/css/parser'
10
7
  require 'nokogiri/css/syntax_error'
11
8
 
12
9
  module Nokogiri
@@ -0,0 +1,669 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.6
4
+ # from Racc grammer file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ module Nokogiri
11
+ module CSS
12
+ class GeneratedParser < Racc::Parser
13
+ ##### State transition tables begin ###
14
+
15
+ racc_action_table = [
16
+ 3, 55, 26, 21, 12, 24, 56, 3, 81, 1,
17
+ 41, 12, 41, 56, 3, 23, 1, 80, 12, 18,
18
+ 92, 91, 4, 1, 9, 10, 18, 13, 16, 4,
19
+ 12, 9, 10, 18, 13, 16, 4, 12, 9, 10,
20
+ 3, 13, 16, 73, 12, 12, 60, 61, 4, 1,
21
+ 57, 10, 12, 44, 16, 4, 61, 1, 10, 18,
22
+ 41, 16, 4, 4, 9, 10, 10, 13, 16, 16,
23
+ 4, 3, 58, 10, 3, 13, 16, 57, 12, 12,
24
+ 27, 82, 28, 48, 26, 51, 12, 53, 26, 51,
25
+ 18, 53, 83, 18, 4, 9, 4, 4, 9, 10,
26
+ 10, 63, 16, 16, 4, 66, 68, 10, 26, 51,
27
+ 16, 53, 86, 87, 66, 68, 67, 69, 70, 62,
28
+ 72, 59, 90, 54, 64, 67, 69, 70, 93, 72,
29
+ 32, 34, 36, 64, 26, 51, -22, 53, 95, 96,
30
+ 31, nil, 33, 35 ]
31
+
32
+ racc_action_check = [
33
+ 0, 20, 3, 3, 0, 3, 43, 30, 52, 0,
34
+ 39, 30, 11, 20, 56, 3, 30, 43, 56, 0,
35
+ 71, 71, 0, 56, 0, 0, 30, 0, 0, 30,
36
+ 8, 30, 30, 56, 30, 30, 56, 6, 56, 56,
37
+ 9, 56, 56, 28, 9, 7, 24, 24, 8, 9,
38
+ 51, 8, 41, 10, 8, 6, 53, 41, 6, 9,
39
+ 7, 6, 9, 7, 9, 9, 7, 9, 9, 7,
40
+ 41, 4, 21, 41, 16, 41, 41, 21, 15, 17,
41
+ 4, 54, 4, 16, 63, 63, 77, 63, 61, 61,
42
+ 4, 61, 55, 16, 14, 4, 15, 17, 16, 15,
43
+ 17, 26, 15, 17, 77, 29, 29, 77, 57, 57,
44
+ 77, 57, 58, 60, 27, 27, 29, 29, 29, 25,
45
+ 29, 22, 65, 19, 29, 27, 27, 27, 74, 27,
46
+ 5, 5, 5, 27, 18, 18, 1, 18, 79, 87,
47
+ 5, nil, 5, 5 ]
48
+
49
+ racc_action_pointer = [
50
+ -2, 108, nil, -8, 69, 123, 31, 39, 24, 38,
51
+ 42, -9, nil, nil, 70, 72, 72, 73, 124, 95,
52
+ 1, 65, 98, nil, 35, 96, 89, 111, 18, 102,
53
+ 5, nil, nil, nil, nil, nil, nil, nil, nil, -11,
54
+ nil, 46, nil, -6, nil, nil, nil, nil, nil, nil,
55
+ nil, 38, -15, 44, 70, 92, 12, 98, 99, nil,
56
+ 106, 78, nil, 74, nil, 97, nil, nil, nil, nil,
57
+ nil, 10, nil, nil, 103, nil, nil, 80, nil, 115,
58
+ nil, nil, nil, nil, nil, nil, nil, 126, nil, nil,
59
+ nil, nil, nil, nil, nil, nil, nil ]
60
+
61
+ racc_action_default = [
62
+ -23, -20, -2, -68, -68, -17, -52, -44, -49, -23,
63
+ -68, -15, -53, -21, -12, -51, -68, -50, -68, -68,
64
+ -68, -37, -68, -27, -35, -68, -36, -56, -68, -56,
65
+ -23, -5, -3, -8, -4, -7, -6, -48, -9, -43,
66
+ -11, -23, -45, -68, -18, -14, -13, -47, -42, -41,
67
+ -46, -37, -68, -35, -68, -68, -23, -68, -68, -28,
68
+ -40, -68, -29, -68, -57, -68, -62, -58, -63, -59,
69
+ -60, -68, -61, -26, -68, -16, -10, -65, -67, -68,
70
+ -31, -30, -19, 97, -1, -34, -39, -68, -32, -33,
71
+ -24, -54, -55, -25, -66, -64, -38 ]
72
+
73
+ racc_goto_table = [
74
+ 37, 39, 42, 22, 40, 75, 20, 29, 45, 47,
75
+ 65, 50, 74, 38, 46, 43, 77, 30, 52, 49,
76
+ 25, 79, nil, nil, nil, nil, nil, nil, nil, nil,
77
+ nil, 84, nil, nil, nil, 78, 76, nil, nil, nil,
78
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
79
+ nil, nil, nil, nil, nil, nil, nil, 85, nil, nil,
80
+ nil, 88, nil, 89, nil, nil, nil, nil, nil, nil,
81
+ nil, 94 ]
82
+
83
+ racc_goto_check = [
84
+ 7, 7, 7, 14, 8, 2, 1, 9, 8, 7,
85
+ 13, 7, 13, 6, 10, 1, 5, 3, 14, 9,
86
+ 15, 19, nil, nil, nil, nil, nil, nil, nil, nil,
87
+ nil, 2, nil, nil, nil, 7, 8, nil, nil, nil,
88
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
89
+ nil, nil, nil, nil, nil, nil, nil, 14, nil, nil,
90
+ nil, 14, nil, 14, nil, nil, nil, nil, nil, nil,
91
+ nil, 7 ]
92
+
93
+ racc_goto_pointer = [
94
+ nil, 6, -25, 12, nil, -25, 6, -6, -3, 3,
95
+ 0, nil, nil, -17, 0, 17, nil, nil, nil, -20 ]
96
+
97
+ racc_goto_default = [
98
+ nil, nil, 2, nil, 5, 7, nil, 11, nil, 14,
99
+ 15, 17, 19, nil, nil, nil, 6, 8, 71, nil ]
100
+
101
+ racc_reduce_table = [
102
+ 0, 0, :racc_error,
103
+ 3, 32, :_reduce_1,
104
+ 1, 32, :_reduce_2,
105
+ 1, 34, :_reduce_3,
106
+ 1, 34, :_reduce_4,
107
+ 1, 34, :_reduce_5,
108
+ 1, 34, :_reduce_6,
109
+ 1, 34, :_reduce_7,
110
+ 1, 34, :_reduce_8,
111
+ 2, 35, :_reduce_9,
112
+ 3, 35, :_reduce_10,
113
+ 2, 35, :_reduce_11,
114
+ 1, 35, :_reduce_none,
115
+ 2, 35, :_reduce_13,
116
+ 2, 35, :_reduce_14,
117
+ 1, 35, :_reduce_15,
118
+ 3, 33, :_reduce_16,
119
+ 1, 33, :_reduce_none,
120
+ 2, 42, :_reduce_18,
121
+ 3, 36, :_reduce_19,
122
+ 1, 36, :_reduce_20,
123
+ 1, 36, :_reduce_21,
124
+ 1, 43, :_reduce_22,
125
+ 0, 43, :_reduce_none,
126
+ 4, 41, :_reduce_24,
127
+ 4, 41, :_reduce_25,
128
+ 3, 41, :_reduce_26,
129
+ 2, 40, :_reduce_27,
130
+ 3, 40, :_reduce_28,
131
+ 3, 40, :_reduce_29,
132
+ 3, 40, :_reduce_30,
133
+ 3, 40, :_reduce_31,
134
+ 3, 45, :_reduce_32,
135
+ 3, 45, :_reduce_33,
136
+ 3, 45, :_reduce_34,
137
+ 1, 45, :_reduce_none,
138
+ 1, 45, :_reduce_none,
139
+ 1, 45, :_reduce_37,
140
+ 4, 46, :_reduce_38,
141
+ 3, 46, :_reduce_39,
142
+ 2, 46, :_reduce_40,
143
+ 2, 47, :_reduce_41,
144
+ 2, 47, :_reduce_42,
145
+ 1, 37, :_reduce_none,
146
+ 0, 37, :_reduce_none,
147
+ 2, 38, :_reduce_45,
148
+ 2, 38, :_reduce_46,
149
+ 2, 38, :_reduce_47,
150
+ 2, 38, :_reduce_48,
151
+ 1, 38, :_reduce_none,
152
+ 1, 38, :_reduce_none,
153
+ 1, 38, :_reduce_none,
154
+ 1, 38, :_reduce_none,
155
+ 1, 48, :_reduce_53,
156
+ 2, 44, :_reduce_54,
157
+ 2, 44, :_reduce_55,
158
+ 0, 44, :_reduce_none,
159
+ 1, 49, :_reduce_57,
160
+ 1, 49, :_reduce_58,
161
+ 1, 49, :_reduce_59,
162
+ 1, 49, :_reduce_60,
163
+ 1, 49, :_reduce_61,
164
+ 1, 49, :_reduce_62,
165
+ 1, 49, :_reduce_63,
166
+ 3, 39, :_reduce_64,
167
+ 1, 50, :_reduce_none,
168
+ 2, 50, :_reduce_none,
169
+ 1, 50, :_reduce_none ]
170
+
171
+ racc_reduce_n = 68
172
+
173
+ racc_shift_n = 97
174
+
175
+ racc_token_table = {
176
+ false => 0,
177
+ :error => 1,
178
+ :FUNCTION => 2,
179
+ :INCLUDES => 3,
180
+ :DASHMATCH => 4,
181
+ :LBRACE => 5,
182
+ :HASH => 6,
183
+ :PLUS => 7,
184
+ :GREATER => 8,
185
+ :S => 9,
186
+ :STRING => 10,
187
+ :IDENT => 11,
188
+ :COMMA => 12,
189
+ :NUMBER => 13,
190
+ :PREFIXMATCH => 14,
191
+ :SUFFIXMATCH => 15,
192
+ :SUBSTRINGMATCH => 16,
193
+ :TILDE => 17,
194
+ :NOT_EQUAL => 18,
195
+ :SLASH => 19,
196
+ :DOUBLESLASH => 20,
197
+ :NOT => 21,
198
+ :EQUAL => 22,
199
+ :RPAREN => 23,
200
+ :LSQUARE => 24,
201
+ :RSQUARE => 25,
202
+ :HAS => 26,
203
+ "." => 27,
204
+ "|" => 28,
205
+ "*" => 29,
206
+ ":" => 30 }
207
+
208
+ racc_nt_base = 31
209
+
210
+ racc_use_result_var = true
211
+
212
+ Racc_arg = [
213
+ racc_action_table,
214
+ racc_action_check,
215
+ racc_action_default,
216
+ racc_action_pointer,
217
+ racc_goto_table,
218
+ racc_goto_check,
219
+ racc_goto_default,
220
+ racc_goto_pointer,
221
+ racc_nt_base,
222
+ racc_reduce_table,
223
+ racc_token_table,
224
+ racc_shift_n,
225
+ racc_reduce_n,
226
+ racc_use_result_var ]
227
+
228
+ Racc_token_to_s_table = [
229
+ "$end",
230
+ "error",
231
+ "FUNCTION",
232
+ "INCLUDES",
233
+ "DASHMATCH",
234
+ "LBRACE",
235
+ "HASH",
236
+ "PLUS",
237
+ "GREATER",
238
+ "S",
239
+ "STRING",
240
+ "IDENT",
241
+ "COMMA",
242
+ "NUMBER",
243
+ "PREFIXMATCH",
244
+ "SUFFIXMATCH",
245
+ "SUBSTRINGMATCH",
246
+ "TILDE",
247
+ "NOT_EQUAL",
248
+ "SLASH",
249
+ "DOUBLESLASH",
250
+ "NOT",
251
+ "EQUAL",
252
+ "RPAREN",
253
+ "LSQUARE",
254
+ "RSQUARE",
255
+ "HAS",
256
+ "\".\"",
257
+ "\"|\"",
258
+ "\"*\"",
259
+ "\":\"",
260
+ "$start",
261
+ "selector",
262
+ "simple_selector_1toN",
263
+ "combinator",
264
+ "simple_selector",
265
+ "element_name",
266
+ "hcap_0toN",
267
+ "hcap_1toN",
268
+ "negation",
269
+ "function",
270
+ "attrib",
271
+ "class",
272
+ "namespace",
273
+ "attrib_val_0or1",
274
+ "expr",
275
+ "an_plus_b",
276
+ "pseudo",
277
+ "attribute_id",
278
+ "eql_incl_dash",
279
+ "negation_arg" ]
280
+
281
+ Racc_debug_parser = false
282
+
283
+ ##### State transition tables end #####
284
+
285
+ # reduce 0 omitted
286
+
287
+ def _reduce_1(val, _values, result)
288
+ result = [val.first, val.last].flatten
289
+
290
+ result
291
+ end
292
+
293
+ def _reduce_2(val, _values, result)
294
+ result = val.flatten
295
+ result
296
+ end
297
+
298
+ def _reduce_3(val, _values, result)
299
+ result = :DIRECT_ADJACENT_SELECTOR
300
+ result
301
+ end
302
+
303
+ def _reduce_4(val, _values, result)
304
+ result = :CHILD_SELECTOR
305
+ result
306
+ end
307
+
308
+ def _reduce_5(val, _values, result)
309
+ result = :PRECEDING_SELECTOR
310
+ result
311
+ end
312
+
313
+ def _reduce_6(val, _values, result)
314
+ result = :DESCENDANT_SELECTOR
315
+ result
316
+ end
317
+
318
+ def _reduce_7(val, _values, result)
319
+ result = :DESCENDANT_SELECTOR
320
+ result
321
+ end
322
+
323
+ def _reduce_8(val, _values, result)
324
+ result = :CHILD_SELECTOR
325
+ result
326
+ end
327
+
328
+ def _reduce_9(val, _values, result)
329
+ result = if val[1].nil?
330
+ val.first
331
+ else
332
+ Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
333
+ end
334
+
335
+ result
336
+ end
337
+
338
+ def _reduce_10(val, _values, result)
339
+ result = Node.new(:CONDITIONAL_SELECTOR,
340
+ [
341
+ val.first,
342
+ Node.new(:COMBINATOR, [val[1], val.last])
343
+ ]
344
+ )
345
+
346
+ result
347
+ end
348
+
349
+ def _reduce_11(val, _values, result)
350
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
351
+
352
+ result
353
+ end
354
+
355
+ # reduce 12 omitted
356
+
357
+ def _reduce_13(val, _values, result)
358
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
359
+
360
+ result
361
+ end
362
+
363
+ def _reduce_14(val, _values, result)
364
+ result = Node.new(:CONDITIONAL_SELECTOR,
365
+ [
366
+ Node.new(:ELEMENT_NAME, ['*']),
367
+ Node.new(:COMBINATOR, val)
368
+ ]
369
+ )
370
+
371
+ result
372
+ end
373
+
374
+ def _reduce_15(val, _values, result)
375
+ result = Node.new(:CONDITIONAL_SELECTOR,
376
+ [Node.new(:ELEMENT_NAME, ['*']), val.first]
377
+ )
378
+
379
+ result
380
+ end
381
+
382
+ def _reduce_16(val, _values, result)
383
+ result = Node.new(val[1], [val.first, val.last])
384
+
385
+ result
386
+ end
387
+
388
+ # reduce 17 omitted
389
+
390
+ def _reduce_18(val, _values, result)
391
+ result = Node.new(:CLASS_CONDITION, [val[1]])
392
+ result
393
+ end
394
+
395
+ def _reduce_19(val, _values, result)
396
+ result = Node.new(:ELEMENT_NAME,
397
+ [[val.first, val.last].compact.join(':')]
398
+ )
399
+
400
+ result
401
+ end
402
+
403
+ def _reduce_20(val, _values, result)
404
+ name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
405
+ result = Node.new(:ELEMENT_NAME, [name])
406
+
407
+ result
408
+ end
409
+
410
+ def _reduce_21(val, _values, result)
411
+ result = Node.new(:ELEMENT_NAME, val)
412
+ result
413
+ end
414
+
415
+ def _reduce_22(val, _values, result)
416
+ result = val[0]
417
+ result
418
+ end
419
+
420
+ # reduce 23 omitted
421
+
422
+ def _reduce_24(val, _values, result)
423
+ result = Node.new(:ATTRIBUTE_CONDITION,
424
+ [Node.new(:ELEMENT_NAME, [val[1]])] + (val[2] || [])
425
+ )
426
+
427
+ result
428
+ end
429
+
430
+ def _reduce_25(val, _values, result)
431
+ result = Node.new(:ATTRIBUTE_CONDITION,
432
+ [val[1]] + (val[2] || [])
433
+ )
434
+
435
+ result
436
+ end
437
+
438
+ def _reduce_26(val, _values, result)
439
+ # Non standard, but hpricot supports it.
440
+ result = Node.new(:PSEUDO_CLASS,
441
+ [Node.new(:FUNCTION, ['nth-child(', val[1]])]
442
+ )
443
+
444
+ result
445
+ end
446
+
447
+ def _reduce_27(val, _values, result)
448
+ result = Node.new(:FUNCTION, [val.first.strip])
449
+
450
+ result
451
+ end
452
+
453
+ def _reduce_28(val, _values, result)
454
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
455
+
456
+ result
457
+ end
458
+
459
+ def _reduce_29(val, _values, result)
460
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
461
+
462
+ result
463
+ end
464
+
465
+ def _reduce_30(val, _values, result)
466
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
467
+
468
+ result
469
+ end
470
+
471
+ def _reduce_31(val, _values, result)
472
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
473
+
474
+ result
475
+ end
476
+
477
+ def _reduce_32(val, _values, result)
478
+ result = [val.first, val.last]
479
+ result
480
+ end
481
+
482
+ def _reduce_33(val, _values, result)
483
+ result = [val.first, val.last]
484
+ result
485
+ end
486
+
487
+ def _reduce_34(val, _values, result)
488
+ result = [val.first, val.last]
489
+ result
490
+ end
491
+
492
+ # reduce 35 omitted
493
+
494
+ # reduce 36 omitted
495
+
496
+ def _reduce_37(val, _values, result)
497
+ if val[0] == 'even'
498
+ val = ["2","n","+","0"]
499
+ result = Node.new(:AN_PLUS_B, val)
500
+ elsif val[0] == 'odd'
501
+ val = ["2","n","+","1"]
502
+ result = Node.new(:AN_PLUS_B, val)
503
+ else
504
+ # This is not CSS standard. It allows us to support this:
505
+ # assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
506
+ # assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
507
+ # assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
508
+ result = val
509
+ end
510
+
511
+ result
512
+ end
513
+
514
+ def _reduce_38(val, _values, result)
515
+ if val[1] == 'n'
516
+ result = Node.new(:AN_PLUS_B, val)
517
+ else
518
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
519
+ end
520
+
521
+ result
522
+ end
523
+
524
+ def _reduce_39(val, _values, result)
525
+ # n+3, -n+3
526
+ if val[0] == 'n'
527
+ val.unshift("1")
528
+ result = Node.new(:AN_PLUS_B, val)
529
+ elsif val[0] == '-n'
530
+ val[0] = 'n'
531
+ val.unshift("-1")
532
+ result = Node.new(:AN_PLUS_B, val)
533
+ else
534
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
535
+ end
536
+
537
+ result
538
+ end
539
+
540
+ def _reduce_40(val, _values, result)
541
+ if val[1] == 'n'
542
+ val << "+"
543
+ val << "0"
544
+ result = Node.new(:AN_PLUS_B, val)
545
+ else
546
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
547
+ end
548
+
549
+ result
550
+ end
551
+
552
+ def _reduce_41(val, _values, result)
553
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
554
+
555
+ result
556
+ end
557
+
558
+ def _reduce_42(val, _values, result)
559
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
560
+ result
561
+ end
562
+
563
+ # reduce 43 omitted
564
+
565
+ # reduce 44 omitted
566
+
567
+ def _reduce_45(val, _values, result)
568
+ result = Node.new(:COMBINATOR, val)
569
+
570
+ result
571
+ end
572
+
573
+ def _reduce_46(val, _values, result)
574
+ result = Node.new(:COMBINATOR, val)
575
+
576
+ result
577
+ end
578
+
579
+ def _reduce_47(val, _values, result)
580
+ result = Node.new(:COMBINATOR, val)
581
+
582
+ result
583
+ end
584
+
585
+ def _reduce_48(val, _values, result)
586
+ result = Node.new(:COMBINATOR, val)
587
+
588
+ result
589
+ end
590
+
591
+ # reduce 49 omitted
592
+
593
+ # reduce 50 omitted
594
+
595
+ # reduce 51 omitted
596
+
597
+ # reduce 52 omitted
598
+
599
+ def _reduce_53(val, _values, result)
600
+ result = Node.new(:ID, val)
601
+ result
602
+ end
603
+
604
+ def _reduce_54(val, _values, result)
605
+ result = [val.first, val[1]]
606
+ result
607
+ end
608
+
609
+ def _reduce_55(val, _values, result)
610
+ result = [val.first, val[1]]
611
+ result
612
+ end
613
+
614
+ # reduce 56 omitted
615
+
616
+ def _reduce_57(val, _values, result)
617
+ result = :equal
618
+ result
619
+ end
620
+
621
+ def _reduce_58(val, _values, result)
622
+ result = :prefix_match
623
+ result
624
+ end
625
+
626
+ def _reduce_59(val, _values, result)
627
+ result = :suffix_match
628
+ result
629
+ end
630
+
631
+ def _reduce_60(val, _values, result)
632
+ result = :substring_match
633
+ result
634
+ end
635
+
636
+ def _reduce_61(val, _values, result)
637
+ result = :not_equal
638
+ result
639
+ end
640
+
641
+ def _reduce_62(val, _values, result)
642
+ result = :includes
643
+ result
644
+ end
645
+
646
+ def _reduce_63(val, _values, result)
647
+ result = :dash_match
648
+ result
649
+ end
650
+
651
+ def _reduce_64(val, _values, result)
652
+ result = Node.new(:NOT, [val[1]])
653
+
654
+ result
655
+ end
656
+
657
+ # reduce 65 omitted
658
+
659
+ # reduce 66 omitted
660
+
661
+ # reduce 67 omitted
662
+
663
+ def _reduce_none(val, _values, result)
664
+ val[0]
665
+ end
666
+
667
+ end # class GeneratedParser
668
+ end # module CSS
669
+ end # module Nokogiri