nokogiri 1.5.10 → 1.10.4

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 (182) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE-DEPENDENCIES.md +1614 -0
  3. data/LICENSE.md +9 -0
  4. data/README.md +198 -0
  5. data/bin/nokogiri +50 -10
  6. data/dependencies.yml +72 -0
  7. data/ext/nokogiri/extconf.rb +634 -92
  8. data/ext/nokogiri/html_document.c +8 -8
  9. data/ext/nokogiri/html_element_description.c +15 -15
  10. data/ext/nokogiri/html_entity_lookup.c +1 -1
  11. data/ext/nokogiri/html_sax_parser_context.c +4 -4
  12. data/ext/nokogiri/html_sax_push_parser.c +2 -2
  13. data/ext/nokogiri/nokogiri.c +20 -12
  14. data/ext/nokogiri/nokogiri.h +1 -44
  15. data/ext/nokogiri/xml_attr.c +34 -25
  16. data/ext/nokogiri/xml_cdata.c +12 -6
  17. data/ext/nokogiri/xml_comment.c +18 -3
  18. data/ext/nokogiri/xml_document.c +64 -32
  19. data/ext/nokogiri/xml_dtd.c +2 -2
  20. data/ext/nokogiri/xml_encoding_handler.c +3 -3
  21. data/ext/nokogiri/xml_entity_reference.c +1 -1
  22. data/ext/nokogiri/xml_io.c +11 -6
  23. data/ext/nokogiri/xml_namespace.c +50 -17
  24. data/ext/nokogiri/xml_namespace.h +3 -2
  25. data/ext/nokogiri/xml_node.c +459 -240
  26. data/ext/nokogiri/xml_node_set.c +166 -147
  27. data/ext/nokogiri/xml_node_set.h +2 -4
  28. data/ext/nokogiri/xml_processing_instruction.c +2 -2
  29. data/ext/nokogiri/xml_reader.c +6 -19
  30. data/ext/nokogiri/xml_sax_parser.c +11 -13
  31. data/ext/nokogiri/xml_sax_parser_context.c +41 -1
  32. data/ext/nokogiri/xml_sax_push_parser.c +56 -12
  33. data/ext/nokogiri/xml_schema.c +1 -1
  34. data/ext/nokogiri/xml_syntax_error.c +11 -5
  35. data/ext/nokogiri/xml_syntax_error.h +1 -1
  36. data/ext/nokogiri/xml_text.c +1 -1
  37. data/ext/nokogiri/xml_xpath_context.c +17 -38
  38. data/ext/nokogiri/xslt_stylesheet.c +10 -10
  39. data/lib/nokogiri/css/node.rb +0 -50
  40. data/lib/nokogiri/css/parser.rb +263 -233
  41. data/lib/nokogiri/css/parser.y +54 -40
  42. data/lib/nokogiri/css/tokenizer.rb +104 -103
  43. data/lib/nokogiri/css/tokenizer.rex +5 -5
  44. data/lib/nokogiri/css/xpath_visitor.rb +78 -19
  45. data/lib/nokogiri/decorators/slop.rb +12 -5
  46. data/lib/nokogiri/html/document.rb +102 -21
  47. data/lib/nokogiri/html/document_fragment.rb +11 -3
  48. data/lib/nokogiri/html/sax/parser.rb +12 -2
  49. data/lib/nokogiri/html/sax/push_parser.rb +22 -2
  50. data/lib/nokogiri/version.rb +40 -22
  51. data/lib/nokogiri/xml/builder.rb +34 -31
  52. data/lib/nokogiri/xml/document.rb +20 -14
  53. data/lib/nokogiri/xml/document_fragment.rb +50 -2
  54. data/lib/nokogiri/xml/dtd.rb +14 -4
  55. data/lib/nokogiri/xml/entity_reference.rb +18 -0
  56. data/lib/nokogiri/xml/node.rb +148 -203
  57. data/lib/nokogiri/xml/node_set.rb +139 -123
  58. data/lib/nokogiri/xml/parse_options.rb +22 -0
  59. data/lib/nokogiri/xml/sax/document.rb +1 -1
  60. data/lib/nokogiri/xml/sax/parser.rb +7 -8
  61. data/lib/nokogiri/xml/searchable.rb +230 -0
  62. data/lib/nokogiri/xml/syntax_error.rb +24 -1
  63. data/lib/nokogiri/xml.rb +3 -1
  64. data/lib/nokogiri.rb +40 -24
  65. data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +78 -0
  66. data/patches/libxml2/0002-Remove-script-macro-support.patch +40 -0
  67. data/patches/libxml2/0003-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  68. data/patches/libxslt/0001-Fix-security-framework-bypass.patch +120 -0
  69. data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
  70. data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
  71. metadata +252 -388
  72. data/.autotest +0 -26
  73. data/.gemtest +0 -0
  74. data/CHANGELOG.ja.rdoc +0 -785
  75. data/CHANGELOG.rdoc +0 -783
  76. data/C_CODING_STYLE.rdoc +0 -33
  77. data/Manifest.txt +0 -303
  78. data/README.ja.rdoc +0 -106
  79. data/README.rdoc +0 -175
  80. data/ROADMAP.md +0 -90
  81. data/Rakefile +0 -228
  82. data/STANDARD_RESPONSES.md +0 -47
  83. data/Y_U_NO_GEMSPEC.md +0 -155
  84. data/build_all +0 -105
  85. data/tasks/cross_compile.rb +0 -150
  86. data/tasks/nokogiri.org.rb +0 -24
  87. data/tasks/test.rb +0 -95
  88. data/test/css/test_nthiness.rb +0 -159
  89. data/test/css/test_parser.rb +0 -341
  90. data/test/css/test_tokenizer.rb +0 -198
  91. data/test/css/test_xpath_visitor.rb +0 -91
  92. data/test/decorators/test_slop.rb +0 -16
  93. data/test/files/2ch.html +0 -108
  94. data/test/files/address_book.rlx +0 -12
  95. data/test/files/address_book.xml +0 -10
  96. data/test/files/bar/bar.xsd +0 -4
  97. data/test/files/dont_hurt_em_why.xml +0 -422
  98. data/test/files/encoding.html +0 -82
  99. data/test/files/encoding.xhtml +0 -84
  100. data/test/files/exslt.xml +0 -8
  101. data/test/files/exslt.xslt +0 -35
  102. data/test/files/foo/foo.xsd +0 -4
  103. data/test/files/metacharset.html +0 -10
  104. data/test/files/noencoding.html +0 -47
  105. data/test/files/po.xml +0 -32
  106. data/test/files/po.xsd +0 -66
  107. data/test/files/shift_jis.html +0 -10
  108. data/test/files/shift_jis.xml +0 -5
  109. data/test/files/snuggles.xml +0 -3
  110. data/test/files/staff.dtd +0 -10
  111. data/test/files/staff.xml +0 -59
  112. data/test/files/staff.xslt +0 -32
  113. data/test/files/test_document_url/bar.xml +0 -2
  114. data/test/files/test_document_url/document.dtd +0 -4
  115. data/test/files/test_document_url/document.xml +0 -6
  116. data/test/files/tlm.html +0 -850
  117. data/test/files/to_be_xincluded.xml +0 -2
  118. data/test/files/valid_bar.xml +0 -2
  119. data/test/files/xinclude.xml +0 -4
  120. data/test/helper.rb +0 -154
  121. data/test/html/sax/test_parser.rb +0 -141
  122. data/test/html/sax/test_parser_context.rb +0 -46
  123. data/test/html/test_builder.rb +0 -164
  124. data/test/html/test_document.rb +0 -552
  125. data/test/html/test_document_encoding.rb +0 -138
  126. data/test/html/test_document_fragment.rb +0 -261
  127. data/test/html/test_element_description.rb +0 -105
  128. data/test/html/test_named_characters.rb +0 -14
  129. data/test/html/test_node.rb +0 -196
  130. data/test/html/test_node_encoding.rb +0 -27
  131. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  132. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  133. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  134. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  135. data/test/test_convert_xpath.rb +0 -135
  136. data/test/test_css_cache.rb +0 -45
  137. data/test/test_encoding_handler.rb +0 -46
  138. data/test/test_memory_leak.rb +0 -156
  139. data/test/test_nokogiri.rb +0 -132
  140. data/test/test_reader.rb +0 -555
  141. data/test/test_soap4r_sax.rb +0 -52
  142. data/test/test_xslt_transforms.rb +0 -254
  143. data/test/xml/node/test_save_options.rb +0 -28
  144. data/test/xml/node/test_subclass.rb +0 -44
  145. data/test/xml/sax/test_parser.rb +0 -366
  146. data/test/xml/sax/test_parser_context.rb +0 -106
  147. data/test/xml/sax/test_push_parser.rb +0 -157
  148. data/test/xml/test_attr.rb +0 -64
  149. data/test/xml/test_attribute_decl.rb +0 -86
  150. data/test/xml/test_builder.rb +0 -306
  151. data/test/xml/test_c14n.rb +0 -151
  152. data/test/xml/test_cdata.rb +0 -48
  153. data/test/xml/test_comment.rb +0 -29
  154. data/test/xml/test_document.rb +0 -828
  155. data/test/xml/test_document_encoding.rb +0 -28
  156. data/test/xml/test_document_fragment.rb +0 -223
  157. data/test/xml/test_dtd.rb +0 -103
  158. data/test/xml/test_dtd_encoding.rb +0 -33
  159. data/test/xml/test_element_content.rb +0 -56
  160. data/test/xml/test_element_decl.rb +0 -73
  161. data/test/xml/test_entity_decl.rb +0 -122
  162. data/test/xml/test_entity_reference.rb +0 -245
  163. data/test/xml/test_namespace.rb +0 -95
  164. data/test/xml/test_node.rb +0 -1137
  165. data/test/xml/test_node_attributes.rb +0 -96
  166. data/test/xml/test_node_encoding.rb +0 -107
  167. data/test/xml/test_node_inheritance.rb +0 -32
  168. data/test/xml/test_node_reparenting.rb +0 -374
  169. data/test/xml/test_node_set.rb +0 -755
  170. data/test/xml/test_parse_options.rb +0 -64
  171. data/test/xml/test_processing_instruction.rb +0 -30
  172. data/test/xml/test_reader_encoding.rb +0 -142
  173. data/test/xml/test_relax_ng.rb +0 -60
  174. data/test/xml/test_schema.rb +0 -103
  175. data/test/xml/test_syntax_error.rb +0 -12
  176. data/test/xml/test_text.rb +0 -45
  177. data/test/xml/test_unparented_node.rb +0 -422
  178. data/test/xml/test_xinclude.rb +0 -83
  179. data/test/xml/test_xpath.rb +0 -295
  180. data/test/xslt/test_custom_functions.rb +0 -133
  181. data/test/xslt/test_exception_handling.rb +0 -37
  182. data/test_all +0 -81
@@ -1,6 +1,6 @@
1
1
  #
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by Racc 1.4.8
3
+ # This file is automatically generated by Racc 1.4.14
4
4
  # from Racc grammer file "".
5
5
  #
6
6
 
@@ -8,182 +8,212 @@ require 'racc/parser.rb'
8
8
 
9
9
 
10
10
  require 'nokogiri/css/parser_extras'
11
+
11
12
  module Nokogiri
12
13
  module CSS
13
14
  class Parser < Racc::Parser
15
+
16
+
17
+ def unescape_css_identifier(identifier)
18
+ identifier.gsub(/\\(?:([^0-9a-fA-F])|([0-9a-fA-F]{1,6})\s?)/){ |m| $1 || [$2.hex].pack('U') }
19
+ end
20
+
21
+ def unescape_css_string(str)
22
+ str.gsub(/\\(?:([^0-9a-fA-F])|([0-9a-fA-F]{1,6})\s?)/) do |m|
23
+ if $1=="\n"
24
+ ''
25
+ else
26
+ $1 || [$2.hex].pack('U')
27
+ end
28
+ end
29
+ end
14
30
  ##### State transition tables begin ###
15
31
 
16
32
  racc_action_table = [
17
- 21, 4, 5, 7, 29, 4, 5, 7, 30, 19,
18
- -26, 6, 21, 9, 8, 6, 29, 9, 8, 22,
19
- 31, 19, 20, 21, 23, 15, 17, 29, 24, 83,
20
- 31, 22, 19, 84, 20, 21, 23, 15, 17, 29,
21
- 24, 92, 22, 85, 19, 20, 21, 23, 15, 17,
22
- 20, 24, 82, 90, 22, 59, 24, 20, 89, 23,
23
- 15, 17, 21, 24, 88, 22, 29, 4, 5, 7,
24
- 23, 19, 71, 29, 91, 29, 86, 6, 19, 9,
25
- 8, 22, 29, 29, 20, 89, 23, 15, 17, 35,
26
- 24, 20, 29, 20, 15, 17, 15, 24, 35, 24,
27
- 20, 20, 29, 15, 15, 93, 24, 24, 21, 64,
28
- 20, 95, 29, 15, 97, 96, 24, 43, -26, 46,
29
- 20, 52, 53, 15, 51, 98, 24, 22, 79, 80,
30
- 20, 99, 23, 15, 48, 42, 24, 79, 80, 75,
31
- 76, 77, 101, 78, 87, 86, 41, 74, 75, 76,
32
- 77, 35, 78, 104, 52, 56, 74, 55, 52, 56,
33
- 105, 55, 52, 56, nil, 55, 52, 56, nil, 55 ]
33
+ 24, 93, 56, 57, 33, 55, 94, 23, 24, 22,
34
+ 12, 93, 33, 27, 35, 52, 44, 22, -23, 25,
35
+ 45, 98, 23, 33, 26, 18, 20, 25, 27, -23,
36
+ 23, 24, 26, 18, 20, 33, 27, 11, 39, 24,
37
+ 22, 23, 74, 33, 18, 91, 90, 27, 22, 12,
38
+ 25, 24, -23, 23, 85, 26, 18, 20, 25, 27,
39
+ 66, 23, 24, 26, 18, 20, 33, 27, 86, 88,
40
+ 51, 22, 89, 92, 24, 26, 56, 87, 95, 60,
41
+ 90, 25, 96, 46, 23, 49, 26, 18, 20, 99,
42
+ 27, 33, 33, 51, 103, 104, 56, 58, 26, 60,
43
+ 93, 106, 33, 33, 33, 109, 39, 39, 110, 23,
44
+ 23, nil, 18, 18, 20, 27, 27, 39, 39, 39,
45
+ 23, 23, 23, 18, 18, 18, 27, 27, 27, 33,
46
+ 33, 101, 100, nil, 102, 22, 56, 87, nil, 60,
47
+ 33, nil, nil, nil, 39, 39, nil, 23, 23, nil,
48
+ 18, 18, 20, 27, 27, 39, 82, 83, 23, 56,
49
+ 87, 18, 60, nil, 27, 82, 83, 78, 79, 80,
50
+ nil, 81, nil, nil, nil, 77, 78, 79, 80, nil,
51
+ 81, 4, 5, 10, 77, 4, 5, 43, nil, 56,
52
+ 87, 6, 60, 8, 7, 6, nil, 8, 7, 4,
53
+ 5, 10, nil, nil, nil, nil, nil, nil, nil, 6,
54
+ nil, 8, 7 ]
34
55
 
35
56
  racc_action_check = [
36
- 0, 14, 14, 14, 0, 0, 0, 0, 1, 0,
37
- 43, 14, 40, 14, 14, 0, 40, 0, 0, 0,
38
- 1, 40, 0, 31, 0, 0, 0, 31, 0, 47,
39
- 57, 40, 31, 49, 40, 13, 40, 40, 40, 13,
40
- 40, 57, 31, 50, 13, 31, 24, 31, 31, 31,
41
- 11, 31, 46, 53, 13, 24, 11, 13, 53, 13,
42
- 13, 13, 23, 13, 52, 24, 23, 23, 23, 23,
43
- 24, 23, 42, 35, 54, 28, 55, 23, 35, 23,
44
- 23, 23, 27, 10, 23, 56, 23, 23, 23, 33,
45
- 23, 35, 26, 28, 35, 35, 28, 35, 10, 28,
46
- 27, 10, 25, 27, 10, 67, 27, 10, 20, 30,
47
- 26, 72, 68, 26, 73, 73, 26, 20, 19, 20,
48
- 25, 21, 21, 25, 21, 81, 25, 20, 45, 45,
49
- 68, 83, 20, 68, 21, 18, 68, 44, 44, 45,
50
- 45, 45, 87, 45, 51, 51, 15, 45, 44, 44,
51
- 44, 12, 44, 90, 89, 89, 44, 89, 86, 86,
52
- 101, 86, 88, 88, nil, 88, 22, 22, nil, 22 ]
57
+ 3, 58, 24, 24, 3, 24, 57, 15, 9, 3,
58
+ 64, 57, 9, 15, 11, 24, 18, 9, 58, 3,
59
+ 21, 64, 3, 14, 3, 3, 3, 9, 3, 22,
60
+ 9, 12, 9, 9, 9, 12, 9, 1, 14, 42,
61
+ 12, 14, 45, 42, 14, 55, 55, 14, 42, 1,
62
+ 12, 27, 46, 12, 49, 12, 12, 12, 42, 12,
63
+ 27, 42, 43, 42, 42, 42, 43, 42, 50, 53,
64
+ 27, 43, 54, 56, 23, 27, 51, 51, 59, 51,
65
+ 60, 43, 61, 23, 43, 23, 43, 43, 43, 75,
66
+ 43, 28, 25, 23, 84, 86, 25, 25, 23, 25,
67
+ 87, 91, 29, 30, 31, 94, 28, 25, 106, 28,
68
+ 25, nil, 28, 25, 25, 28, 25, 29, 30, 31,
69
+ 29, 30, 31, 29, 30, 31, 29, 30, 31, 32,
70
+ 39, 76, 76, nil, 76, 39, 90, 90, nil, 90,
71
+ 62, nil, nil, nil, 32, 39, nil, 32, 39, nil,
72
+ 32, 39, 39, 32, 39, 62, 47, 47, 62, 92,
73
+ 92, 62, 92, nil, 62, 48, 48, 47, 47, 47,
74
+ nil, 47, nil, nil, nil, 47, 48, 48, 48, nil,
75
+ 48, 0, 0, 0, 48, 17, 17, 17, nil, 93,
76
+ 93, 0, 93, 0, 0, 17, nil, 17, 17, 26,
77
+ 26, 26, nil, nil, nil, nil, nil, nil, nil, 26,
78
+ nil, 26, 26 ]
53
79
 
54
80
  racc_action_pointer = [
55
- -2, 8, nil, nil, nil, nil, nil, nil, nil, nil,
56
- 77, 26, 130, 33, -6, 135, nil, nil, 106, 89,
57
- 106, 111, 156, 60, 44, 96, 86, 76, 69, nil,
58
- 109, 21, nil, 68, nil, 67, nil, nil, nil, nil,
59
- 10, nil, 61, -19, 134, 125, 27, 0, nil, 10,
60
- 20, 133, 52, 46, 51, 64, 73, 18, nil, nil,
61
- nil, nil, nil, nil, nil, nil, nil, 82, 106, nil,
62
- nil, nil, 86, 104, nil, nil, nil, nil, nil, nil,
63
- nil, 100, nil, 120, nil, nil, 148, 135, 152, 144,
64
- 140, nil, nil, nil, nil, nil, nil, nil, nil, nil,
65
- nil, 147, nil, nil, nil, nil ]
81
+ 174, 37, nil, -2, nil, nil, nil, nil, nil, 6,
82
+ nil, 14, 29, nil, 17, -17, nil, 178, 5, nil,
83
+ nil, -9, 0, 72, -8, 86, 192, 49, 85, 96,
84
+ 97, 98, 123, nil, nil, nil, nil, nil, nil, 124,
85
+ nil, nil, 37, 60, nil, 31, 23, 153, 162, 29,
86
+ 39, 66, nil, 46, 49, 34, 61, -1, -11, 55,
87
+ 68, 59, 134, nil, -2, nil, nil, nil, nil, nil,
88
+ nil, nil, nil, nil, nil, 64, 121, nil, nil, nil,
89
+ nil, nil, nil, nil, 69, nil, 84, 88, nil, nil,
90
+ 126, 94, 149, 179, 92, nil, nil, nil, nil, nil,
91
+ nil, nil, nil, nil, nil, nil, 95, nil, nil, nil,
92
+ nil ]
66
93
 
67
94
  racc_action_default = [
68
- -27, -74, -2, -3, -4, -5, -6, -7, -8, -9,
69
- -50, -13, -17, -27, -20, -74, -22, -23, -74, -25,
70
- -27, -74, -74, -27, -74, -55, -56, -57, -58, -59,
71
- -74, -27, -10, -49, -12, -27, -14, -15, -16, -18,
72
- -27, -21, -74, -32, -62, -62, -74, -74, -33, -74,
73
- -74, -41, -42, -43, -74, -41, -43, -74, -47, -48,
74
- -51, -52, -53, -54, 106, -1, -11, -74, -71, -73,
75
- -19, -24, -74, -74, -63, -64, -65, -66, -67, -68,
76
- -69, -74, -30, -74, -34, -35, -74, -46, -74, -74,
77
- -74, -36, -37, -70, -72, -28, -60, -61, -29, -31,
78
- -38, -74, -39, -40, -45, -44 ]
95
+ -75, -76, -2, -24, -4, -5, -6, -7, -8, -24,
96
+ -74, -76, -24, -3, -47, -10, -13, -17, -76, -19,
97
+ -20, -76, -22, -24, -76, -24, -75, -76, -53, -54,
98
+ -55, -56, -57, -58, -14, 111, -1, -9, -46, -24,
99
+ -11, -12, -24, -24, -18, -76, -29, -62, -62, -76,
100
+ -76, -76, -30, -76, -76, -38, -39, -40, -22, -76,
101
+ -38, -76, -71, -73, -76, -44, -45, -48, -49, -50,
102
+ -51, -52, -15, -16, -21, -76, -76, -63, -64, -65,
103
+ -66, -67, -68, -69, -76, -27, -76, -40, -31, -32,
104
+ -76, -43, -76, -76, -76, -33, -70, -72, -34, -25,
105
+ -59, -60, -61, -26, -28, -35, -76, -36, -37, -42,
106
+ -41 ]
79
107
 
80
108
  racc_goto_table = [
81
- 49, 54, 33, 39, 36, 1, 34, 45, 38, 72,
82
- 81, 58, 32, 37, 47, 44, 68, 60, 61, 62,
83
- 63, 65, 40, 50, 67, nil, nil, 69, 57, 66,
84
- 70, nil, nil, nil, nil, nil, nil, nil, nil, nil,
109
+ 53, 38, 13, 1, 42, 48, 62, 37, 34, 65,
110
+ 40, 36, 63, 75, 84, 67, 68, 69, 70, 71,
111
+ 62, 41, 50, 47, 54, nil, 63, nil, nil, 64,
85
112
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
113
+ nil, 72, 73, nil, nil, nil, nil, nil, nil, 97,
86
114
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
87
- 94, nil, nil, nil, nil, 100, nil, 102, 103 ]
115
+ nil, nil, nil, nil, nil, nil, 105, nil, 107, 108 ]
88
116
 
89
117
  racc_goto_check = [
90
- 18, 18, 8, 2, 11, 1, 9, 10, 9, 17,
91
- 17, 10, 7, 12, 15, 16, 6, 8, 8, 8,
92
- 8, 2, 4, 19, 22, nil, nil, 8, 1, 9,
93
- 2, nil, nil, nil, nil, nil, nil, nil, nil, nil,
118
+ 18, 12, 2, 1, 5, 9, 7, 8, 2, 9,
119
+ 10, 2, 12, 17, 17, 12, 12, 12, 12, 12,
120
+ 7, 11, 15, 16, 19, nil, 12, nil, nil, 1,
94
121
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
122
+ nil, 2, 2, nil, nil, nil, nil, nil, nil, 12,
95
123
  nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
96
- 8, nil, nil, nil, nil, 18, nil, 18, 18 ]
124
+ nil, nil, nil, nil, nil, nil, 18, nil, 18, 18 ]
97
125
 
98
126
  racc_goto_pointer = [
99
- nil, 5, -10, nil, 8, nil, -19, 2, -8, -4,
100
- -13, -7, 2, nil, nil, -6, -5, -35, -21, 2,
101
- nil, nil, -11 ]
127
+ nil, 3, -1, nil, nil, -13, nil, -19, -7, -18,
128
+ -5, 6, -13, nil, nil, -1, 0, -34, -24, 0,
129
+ nil, nil, nil, nil ]
102
130
 
103
131
  racc_goto_default = [
104
- nil, nil, 3, 2, 13, 14, 10, nil, 12, nil,
105
- 11, 28, 27, 26, 16, 18, nil, nil, nil, nil,
106
- 25, 73, nil ]
132
+ nil, nil, nil, 2, 3, 9, 17, 14, nil, 15,
133
+ 31, 30, 16, 29, 19, 21, nil, nil, 59, nil,
134
+ 28, 32, 76, 61 ]
107
135
 
108
136
  racc_reduce_table = [
109
137
  0, 0, :racc_error,
110
138
  3, 32, :_reduce_1,
111
139
  1, 32, :_reduce_2,
112
- 1, 32, :_reduce_3,
113
- 1, 35, :_reduce_4,
114
- 1, 35, :_reduce_5,
115
- 1, 35, :_reduce_6,
116
- 1, 35, :_reduce_7,
117
- 1, 35, :_reduce_8,
118
- 1, 35, :_reduce_9,
119
- 2, 36, :_reduce_10,
120
- 3, 36, :_reduce_11,
121
- 2, 36, :_reduce_12,
122
- 1, 36, :_reduce_none,
123
- 2, 36, :_reduce_14,
124
- 2, 36, :_reduce_15,
125
- 2, 36, :_reduce_16,
126
- 1, 36, :_reduce_17,
127
- 2, 34, :_reduce_18,
128
- 3, 33, :_reduce_19,
129
- 1, 33, :_reduce_none,
130
- 2, 44, :_reduce_21,
140
+ 2, 32, :_reduce_3,
141
+ 1, 36, :_reduce_4,
142
+ 1, 36, :_reduce_5,
143
+ 1, 36, :_reduce_6,
144
+ 1, 36, :_reduce_7,
145
+ 1, 36, :_reduce_8,
146
+ 2, 37, :_reduce_9,
131
147
  1, 37, :_reduce_none,
132
- 1, 37, :_reduce_23,
133
- 3, 45, :_reduce_24,
134
- 1, 45, :_reduce_25,
135
- 1, 46, :_reduce_26,
148
+ 2, 37, :_reduce_11,
149
+ 2, 37, :_reduce_12,
150
+ 1, 37, :_reduce_13,
151
+ 2, 34, :_reduce_14,
152
+ 3, 33, :_reduce_15,
153
+ 3, 33, :_reduce_16,
154
+ 1, 33, :_reduce_none,
155
+ 2, 44, :_reduce_18,
156
+ 1, 38, :_reduce_none,
157
+ 1, 38, :_reduce_20,
158
+ 3, 45, :_reduce_21,
159
+ 1, 45, :_reduce_22,
160
+ 1, 46, :_reduce_23,
136
161
  0, 46, :_reduce_none,
137
- 4, 43, :_reduce_28,
138
- 4, 43, :_reduce_29,
139
- 3, 43, :_reduce_30,
140
- 3, 47, :_reduce_31,
141
- 1, 47, :_reduce_32,
142
- 2, 41, :_reduce_33,
143
- 3, 41, :_reduce_34,
144
- 3, 41, :_reduce_35,
145
- 3, 41, :_reduce_36,
146
- 3, 41, :_reduce_37,
147
- 3, 49, :_reduce_38,
148
- 3, 49, :_reduce_39,
149
- 3, 49, :_reduce_40,
162
+ 4, 42, :_reduce_25,
163
+ 4, 42, :_reduce_26,
164
+ 3, 42, :_reduce_27,
165
+ 3, 47, :_reduce_28,
166
+ 1, 47, :_reduce_29,
167
+ 2, 40, :_reduce_30,
168
+ 3, 40, :_reduce_31,
169
+ 3, 40, :_reduce_32,
170
+ 3, 40, :_reduce_33,
171
+ 3, 40, :_reduce_34,
172
+ 3, 49, :_reduce_35,
173
+ 3, 49, :_reduce_36,
174
+ 3, 49, :_reduce_37,
150
175
  1, 49, :_reduce_none,
151
176
  1, 49, :_reduce_none,
152
- 1, 49, :_reduce_43,
153
- 4, 50, :_reduce_44,
154
- 3, 50, :_reduce_45,
155
- 2, 50, :_reduce_46,
156
- 2, 42, :_reduce_47,
157
- 2, 42, :_reduce_48,
158
- 1, 38, :_reduce_none,
159
- 0, 38, :_reduce_none,
160
- 2, 39, :_reduce_51,
161
- 2, 39, :_reduce_52,
162
- 2, 39, :_reduce_53,
163
- 2, 39, :_reduce_54,
164
- 1, 39, :_reduce_none,
177
+ 1, 49, :_reduce_40,
178
+ 4, 50, :_reduce_41,
179
+ 3, 50, :_reduce_42,
180
+ 2, 50, :_reduce_43,
181
+ 2, 41, :_reduce_44,
182
+ 2, 41, :_reduce_45,
165
183
  1, 39, :_reduce_none,
166
- 1, 39, :_reduce_none,
167
- 1, 39, :_reduce_none,
168
- 1, 51, :_reduce_59,
184
+ 0, 39, :_reduce_none,
185
+ 2, 43, :_reduce_48,
186
+ 2, 43, :_reduce_49,
187
+ 2, 43, :_reduce_50,
188
+ 2, 43, :_reduce_51,
189
+ 2, 43, :_reduce_52,
190
+ 1, 43, :_reduce_none,
191
+ 1, 43, :_reduce_none,
192
+ 1, 43, :_reduce_none,
193
+ 1, 43, :_reduce_none,
194
+ 1, 43, :_reduce_none,
195
+ 1, 51, :_reduce_58,
196
+ 2, 48, :_reduce_59,
169
197
  2, 48, :_reduce_60,
170
198
  2, 48, :_reduce_61,
171
199
  0, 48, :_reduce_none,
172
- 1, 52, :_reduce_63,
173
- 1, 52, :_reduce_64,
174
- 1, 52, :_reduce_65,
175
- 1, 52, :_reduce_66,
176
- 1, 52, :_reduce_67,
177
- 1, 52, :_reduce_68,
178
- 1, 52, :_reduce_69,
179
- 3, 40, :_reduce_70,
180
- 1, 53, :_reduce_none,
181
- 2, 53, :_reduce_none,
182
- 1, 53, :_reduce_none ]
183
-
184
- racc_reduce_n = 74
185
-
186
- racc_shift_n = 106
200
+ 1, 53, :_reduce_63,
201
+ 1, 53, :_reduce_64,
202
+ 1, 53, :_reduce_65,
203
+ 1, 53, :_reduce_66,
204
+ 1, 53, :_reduce_67,
205
+ 1, 53, :_reduce_68,
206
+ 1, 53, :_reduce_69,
207
+ 3, 52, :_reduce_70,
208
+ 1, 54, :_reduce_none,
209
+ 2, 54, :_reduce_none,
210
+ 1, 54, :_reduce_none,
211
+ 1, 35, :_reduce_none,
212
+ 0, 35, :_reduce_none ]
213
+
214
+ racc_reduce_n = 76
215
+
216
+ racc_shift_n = 111
187
217
 
188
218
  racc_token_table = {
189
219
  false => 0,
@@ -274,23 +304,24 @@ Racc_token_to_s_table = [
274
304
  "selector",
275
305
  "simple_selector_1toN",
276
306
  "prefixless_combinator_selector",
307
+ "optional_S",
277
308
  "combinator",
278
309
  "simple_selector",
279
310
  "element_name",
280
311
  "hcap_0toN",
281
- "hcap_1toN",
282
- "negation",
283
312
  "function",
284
313
  "pseudo",
285
314
  "attrib",
315
+ "hcap_1toN",
286
316
  "class",
287
317
  "namespaced_ident",
288
318
  "namespace",
289
319
  "attrib_name",
290
320
  "attrib_val_0or1",
291
321
  "expr",
292
- "an_plus_b",
322
+ "nth",
293
323
  "attribute_id",
324
+ "negation",
294
325
  "eql_incl_dash",
295
326
  "negation_arg" ]
296
327
 
@@ -312,7 +343,7 @@ def _reduce_2(val, _values, result)
312
343
  end
313
344
 
314
345
  def _reduce_3(val, _values, result)
315
- result = val.flatten
346
+ result = [val.last].flatten
316
347
  result
317
348
  end
318
349
 
@@ -337,16 +368,11 @@ def _reduce_7(val, _values, result)
337
368
  end
338
369
 
339
370
  def _reduce_8(val, _values, result)
340
- result = :DESCENDANT_SELECTOR
341
- result
342
- end
343
-
344
- def _reduce_9(val, _values, result)
345
371
  result = :CHILD_SELECTOR
346
372
  result
347
373
  end
348
374
 
349
- def _reduce_10(val, _values, result)
375
+ def _reduce_9(val, _values, result)
350
376
  result = if val[1].nil?
351
377
  val.first
352
378
  else
@@ -356,83 +382,61 @@ def _reduce_10(val, _values, result)
356
382
  result
357
383
  end
358
384
 
359
- def _reduce_11(val, _values, result)
360
- result = Node.new(:CONDITIONAL_SELECTOR,
361
- [
362
- val.first,
363
- Node.new(:COMBINATOR, [val[1], val.last])
364
- ]
365
- )
366
-
367
- result
368
- end
369
-
370
- def _reduce_12(val, _values, result)
371
- result = Node.new(:CONDITIONAL_SELECTOR, val)
372
-
373
- result
374
- end
375
-
376
- # reduce 13 omitted
385
+ # reduce 10 omitted
377
386
 
378
- def _reduce_14(val, _values, result)
387
+ def _reduce_11(val, _values, result)
379
388
  result = Node.new(:CONDITIONAL_SELECTOR, val)
380
389
 
381
390
  result
382
391
  end
383
392
 
384
- def _reduce_15(val, _values, result)
393
+ def _reduce_12(val, _values, result)
385
394
  result = Node.new(:CONDITIONAL_SELECTOR, val)
386
395
 
387
396
  result
388
397
  end
389
398
 
390
- def _reduce_16(val, _values, result)
399
+ def _reduce_13(val, _values, result)
391
400
  result = Node.new(:CONDITIONAL_SELECTOR,
392
- [
393
- Node.new(:ELEMENT_NAME, ['*']),
394
- Node.new(:COMBINATOR, val)
395
- ]
401
+ [Node.new(:ELEMENT_NAME, ['*']), val.first]
396
402
  )
397
403
 
398
404
  result
399
405
  end
400
406
 
401
- def _reduce_17(val, _values, result)
402
- result = Node.new(:CONDITIONAL_SELECTOR,
403
- [Node.new(:ELEMENT_NAME, ['*']), val.first]
404
- )
407
+ def _reduce_14(val, _values, result)
408
+ result = Node.new(val.first, [nil, val.last])
405
409
 
406
410
  result
407
411
  end
408
412
 
409
- def _reduce_18(val, _values, result)
410
- result = Node.new(val.first, [nil, val.last])
413
+ def _reduce_15(val, _values, result)
414
+ result = Node.new(val[1], [val.first, val.last])
411
415
 
412
416
  result
413
417
  end
414
418
 
415
- def _reduce_19(val, _values, result)
416
- result = Node.new(val[1], [val.first, val.last])
419
+ def _reduce_16(val, _values, result)
420
+ result = Node.new(:DESCENDANT_SELECTOR, [val.first, val.last])
417
421
 
418
422
  result
419
423
  end
420
424
 
421
- # reduce 20 omitted
425
+ # reduce 17 omitted
422
426
 
423
- def _reduce_21(val, _values, result)
424
- result = Node.new(:CLASS_CONDITION, [val[1]])
427
+ def _reduce_18(val, _values, result)
428
+ result = Node.new(:CLASS_CONDITION, [unescape_css_identifier(val[1])])
425
429
  result
426
430
  end
427
431
 
428
- # reduce 22 omitted
432
+ # reduce 19 omitted
429
433
 
430
- def _reduce_23(val, _values, result)
434
+ def _reduce_20(val, _values, result)
431
435
  result = Node.new(:ELEMENT_NAME, val)
432
436
  result
433
437
  end
434
438
 
435
- def _reduce_24(val, _values, result)
439
+ def _reduce_21(val, _values, result)
436
440
  result = Node.new(:ELEMENT_NAME,
437
441
  [[val.first, val.last].compact.join(':')]
438
442
  )
@@ -440,21 +444,21 @@ def _reduce_24(val, _values, result)
440
444
  result
441
445
  end
442
446
 
443
- def _reduce_25(val, _values, result)
447
+ def _reduce_22(val, _values, result)
444
448
  name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
445
449
  result = Node.new(:ELEMENT_NAME, [name])
446
450
 
447
451
  result
448
452
  end
449
453
 
450
- def _reduce_26(val, _values, result)
454
+ def _reduce_23(val, _values, result)
451
455
  result = val[0]
452
456
  result
453
457
  end
454
458
 
455
- # reduce 27 omitted
459
+ # reduce 24 omitted
456
460
 
457
- def _reduce_28(val, _values, result)
461
+ def _reduce_25(val, _values, result)
458
462
  result = Node.new(:ATTRIBUTE_CONDITION,
459
463
  [val[1]] + (val[2] || [])
460
464
  )
@@ -462,7 +466,7 @@ def _reduce_28(val, _values, result)
462
466
  result
463
467
  end
464
468
 
465
- def _reduce_29(val, _values, result)
469
+ def _reduce_26(val, _values, result)
466
470
  result = Node.new(:ATTRIBUTE_CONDITION,
467
471
  [val[1]] + (val[2] || [])
468
472
  )
@@ -470,7 +474,7 @@ def _reduce_29(val, _values, result)
470
474
  result
471
475
  end
472
476
 
473
- def _reduce_30(val, _values, result)
477
+ def _reduce_27(val, _values, result)
474
478
  # Non standard, but hpricot supports it.
475
479
  result = Node.new(:PSEUDO_CLASS,
476
480
  [Node.new(:FUNCTION, ['nth-child(', val[1]])]
@@ -479,7 +483,7 @@ def _reduce_30(val, _values, result)
479
483
  result
480
484
  end
481
485
 
482
- def _reduce_31(val, _values, result)
486
+ def _reduce_28(val, _values, result)
483
487
  result = Node.new(:ELEMENT_NAME,
484
488
  [[val.first, val.last].compact.join(':')]
485
489
  )
@@ -487,7 +491,7 @@ def _reduce_31(val, _values, result)
487
491
  result
488
492
  end
489
493
 
490
- def _reduce_32(val, _values, result)
494
+ def _reduce_29(val, _values, result)
491
495
  # Default namespace is not applied to attributes.
492
496
  # So we don't add prefix "xmlns:" as in namespaced_ident.
493
497
  result = Node.new(:ELEMENT_NAME, [val.first])
@@ -495,62 +499,63 @@ def _reduce_32(val, _values, result)
495
499
  result
496
500
  end
497
501
 
498
- def _reduce_33(val, _values, result)
502
+ def _reduce_30(val, _values, result)
499
503
  result = Node.new(:FUNCTION, [val.first.strip])
500
504
 
501
505
  result
502
506
  end
503
507
 
504
- def _reduce_34(val, _values, result)
508
+ def _reduce_31(val, _values, result)
505
509
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
506
510
 
507
511
  result
508
512
  end
509
513
 
510
- def _reduce_35(val, _values, result)
514
+ def _reduce_32(val, _values, result)
511
515
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
512
516
 
513
517
  result
514
518
  end
515
519
 
516
- def _reduce_36(val, _values, result)
520
+ def _reduce_33(val, _values, result)
517
521
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
518
522
 
519
523
  result
520
524
  end
521
525
 
522
- def _reduce_37(val, _values, result)
526
+ def _reduce_34(val, _values, result)
523
527
  result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
524
528
 
525
529
  result
526
530
  end
527
531
 
528
- def _reduce_38(val, _values, result)
532
+ def _reduce_35(val, _values, result)
529
533
  result = [val.first, val.last]
530
534
  result
531
535
  end
532
536
 
533
- def _reduce_39(val, _values, result)
537
+ def _reduce_36(val, _values, result)
534
538
  result = [val.first, val.last]
535
539
  result
536
540
  end
537
541
 
538
- def _reduce_40(val, _values, result)
542
+ def _reduce_37(val, _values, result)
539
543
  result = [val.first, val.last]
540
544
  result
541
545
  end
542
546
 
543
- # reduce 41 omitted
547
+ # reduce 38 omitted
544
548
 
545
- # reduce 42 omitted
549
+ # reduce 39 omitted
546
550
 
547
- def _reduce_43(val, _values, result)
548
- if val[0] == 'even'
549
- val = ["2","n","+","0"]
550
- result = Node.new(:AN_PLUS_B, val)
551
- elsif val[0] == 'odd'
552
- val = ["2","n","+","1"]
553
- result = Node.new(:AN_PLUS_B, val)
551
+ def _reduce_40(val, _values, result)
552
+ case val[0]
553
+ when 'even'
554
+ result = Node.new(:NTH, ['2','n','+','0'])
555
+ when 'odd'
556
+ result = Node.new(:NTH, ['2','n','+','1'])
557
+ when 'n'
558
+ result = Node.new(:NTH, ['1','n','+','0'])
554
559
  else
555
560
  # This is not CSS standard. It allows us to support this:
556
561
  # assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
@@ -562,9 +567,9 @@ def _reduce_43(val, _values, result)
562
567
  result
563
568
  end
564
569
 
565
- def _reduce_44(val, _values, result)
570
+ def _reduce_41(val, _values, result)
566
571
  if val[1] == 'n'
567
- result = Node.new(:AN_PLUS_B, val)
572
+ result = Node.new(:NTH, val)
568
573
  else
569
574
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
570
575
  end
@@ -572,15 +577,15 @@ def _reduce_44(val, _values, result)
572
577
  result
573
578
  end
574
579
 
575
- def _reduce_45(val, _values, result)
580
+ def _reduce_42(val, _values, result)
576
581
  # n+3, -n+3
577
582
  if val[0] == 'n'
578
583
  val.unshift("1")
579
- result = Node.new(:AN_PLUS_B, val)
584
+ result = Node.new(:NTH, val)
580
585
  elsif val[0] == '-n'
581
586
  val[0] = 'n'
582
587
  val.unshift("-1")
583
- result = Node.new(:AN_PLUS_B, val)
588
+ result = Node.new(:NTH, val)
584
589
  else
585
590
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
586
591
  end
@@ -588,11 +593,19 @@ def _reduce_45(val, _values, result)
588
593
  result
589
594
  end
590
595
 
591
- def _reduce_46(val, _values, result)
592
- if val[1] == 'n'
596
+ def _reduce_43(val, _values, result)
597
+ # 5n, -5n, 10n-1
598
+ n = val[1]
599
+ if n[0, 2] == 'n-'
600
+ val[1] = 'n'
601
+ val << "-"
602
+ # b is contained in n as n is the string "n-b"
603
+ val << n[2, n.size]
604
+ result = Node.new(:NTH, val)
605
+ elsif n == 'n'
593
606
  val << "+"
594
607
  val << "0"
595
- result = Node.new(:AN_PLUS_B, val)
608
+ result = Node.new(:NTH, val)
596
609
  else
597
610
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
598
611
  end
@@ -600,60 +613,73 @@ def _reduce_46(val, _values, result)
600
613
  result
601
614
  end
602
615
 
603
- def _reduce_47(val, _values, result)
616
+ def _reduce_44(val, _values, result)
604
617
  result = Node.new(:PSEUDO_CLASS, [val[1]])
605
618
 
606
619
  result
607
620
  end
608
621
 
609
- def _reduce_48(val, _values, result)
622
+ def _reduce_45(val, _values, result)
610
623
  result = Node.new(:PSEUDO_CLASS, [val[1]])
611
624
  result
612
625
  end
613
626
 
614
- # reduce 49 omitted
627
+ # reduce 46 omitted
615
628
 
616
- # reduce 50 omitted
629
+ # reduce 47 omitted
617
630
 
618
- def _reduce_51(val, _values, result)
631
+ def _reduce_48(val, _values, result)
619
632
  result = Node.new(:COMBINATOR, val)
620
633
 
621
634
  result
622
635
  end
623
636
 
624
- def _reduce_52(val, _values, result)
637
+ def _reduce_49(val, _values, result)
625
638
  result = Node.new(:COMBINATOR, val)
626
639
 
627
640
  result
628
641
  end
629
642
 
630
- def _reduce_53(val, _values, result)
643
+ def _reduce_50(val, _values, result)
631
644
  result = Node.new(:COMBINATOR, val)
632
645
 
633
646
  result
634
647
  end
635
648
 
636
- def _reduce_54(val, _values, result)
649
+ def _reduce_51(val, _values, result)
637
650
  result = Node.new(:COMBINATOR, val)
638
651
 
639
652
  result
640
653
  end
641
654
 
655
+ def _reduce_52(val, _values, result)
656
+ result = Node.new(:COMBINATOR, val)
657
+
658
+ result
659
+ end
660
+
661
+ # reduce 53 omitted
662
+
663
+ # reduce 54 omitted
664
+
642
665
  # reduce 55 omitted
643
666
 
644
667
  # reduce 56 omitted
645
668
 
646
669
  # reduce 57 omitted
647
670
 
648
- # reduce 58 omitted
671
+ def _reduce_58(val, _values, result)
672
+ result = Node.new(:ID, [unescape_css_identifier(val.first)])
673
+ result
674
+ end
649
675
 
650
676
  def _reduce_59(val, _values, result)
651
- result = Node.new(:ID, val)
677
+ result = [val.first, unescape_css_identifier(val[1])]
652
678
  result
653
679
  end
654
680
 
655
681
  def _reduce_60(val, _values, result)
656
- result = [val.first, val[1]]
682
+ result = [val.first, unescape_css_string(val[1])]
657
683
  result
658
684
  end
659
685
 
@@ -711,6 +737,10 @@ end
711
737
 
712
738
  # reduce 73 omitted
713
739
 
740
+ # reduce 74 omitted
741
+
742
+ # reduce 75 omitted
743
+
714
744
  def _reduce_none(val, _values, result)
715
745
  val[0]
716
746
  end