nokogiri-backupify 1.5.0.beta.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (275) hide show
  1. data/.autotest +26 -0
  2. data/CHANGELOG.ja.rdoc +509 -0
  3. data/CHANGELOG.rdoc +490 -0
  4. data/Manifest.txt +274 -0
  5. data/README.ja.rdoc +106 -0
  6. data/README.rdoc +150 -0
  7. data/Rakefile +217 -0
  8. data/bin/nokogiri +54 -0
  9. data/deps.rip +5 -0
  10. data/ext/java/nokogiri/EncodingHandler.java +124 -0
  11. data/ext/java/nokogiri/HtmlDocument.java +146 -0
  12. data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
  13. data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
  14. data/ext/java/nokogiri/HtmlSaxParserContext.java +256 -0
  15. data/ext/java/nokogiri/NokogiriService.java +466 -0
  16. data/ext/java/nokogiri/XmlAttr.java +183 -0
  17. data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
  18. data/ext/java/nokogiri/XmlCdata.java +89 -0
  19. data/ext/java/nokogiri/XmlComment.java +84 -0
  20. data/ext/java/nokogiri/XmlDocument.java +514 -0
  21. data/ext/java/nokogiri/XmlDocumentFragment.java +216 -0
  22. data/ext/java/nokogiri/XmlDtd.java +464 -0
  23. data/ext/java/nokogiri/XmlElement.java +221 -0
  24. data/ext/java/nokogiri/XmlElementContent.java +382 -0
  25. data/ext/java/nokogiri/XmlElementDecl.java +147 -0
  26. data/ext/java/nokogiri/XmlEntityDecl.java +161 -0
  27. data/ext/java/nokogiri/XmlEntityReference.java +75 -0
  28. data/ext/java/nokogiri/XmlNamespace.java +127 -0
  29. data/ext/java/nokogiri/XmlNode.java +1392 -0
  30. data/ext/java/nokogiri/XmlNodeSet.java +284 -0
  31. data/ext/java/nokogiri/XmlProcessingInstruction.java +103 -0
  32. data/ext/java/nokogiri/XmlReader.java +409 -0
  33. data/ext/java/nokogiri/XmlRelaxng.java +199 -0
  34. data/ext/java/nokogiri/XmlSaxParserContext.java +353 -0
  35. data/ext/java/nokogiri/XmlSaxPushParser.java +182 -0
  36. data/ext/java/nokogiri/XmlSchema.java +175 -0
  37. data/ext/java/nokogiri/XmlSyntaxError.java +114 -0
  38. data/ext/java/nokogiri/XmlText.java +135 -0
  39. data/ext/java/nokogiri/XmlXpathContext.java +175 -0
  40. data/ext/java/nokogiri/XsltStylesheet.java +181 -0
  41. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +205 -0
  42. data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
  43. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +80 -0
  44. data/ext/java/nokogiri/internals/NokogiriHandler.java +326 -0
  45. data/ext/java/nokogiri/internals/NokogiriHelpers.java +583 -0
  46. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +170 -0
  47. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +118 -0
  48. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +73 -0
  49. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
  50. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +78 -0
  51. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +120 -0
  52. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +56 -0
  53. data/ext/java/nokogiri/internals/ParserContext.java +278 -0
  54. data/ext/java/nokogiri/internals/PushInputStream.java +411 -0
  55. data/ext/java/nokogiri/internals/ReaderNode.java +473 -0
  56. data/ext/java/nokogiri/internals/SaveContext.java +282 -0
  57. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +68 -0
  58. data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
  59. data/ext/java/nokogiri/internals/XmlDomParser.java +77 -0
  60. data/ext/java/nokogiri/internals/XmlDomParserContext.java +233 -0
  61. data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
  62. data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
  63. data/ext/nokogiri/depend +358 -0
  64. data/ext/nokogiri/extconf.rb +124 -0
  65. data/ext/nokogiri/html_document.c +154 -0
  66. data/ext/nokogiri/html_document.h +10 -0
  67. data/ext/nokogiri/html_element_description.c +276 -0
  68. data/ext/nokogiri/html_element_description.h +10 -0
  69. data/ext/nokogiri/html_entity_lookup.c +32 -0
  70. data/ext/nokogiri/html_entity_lookup.h +8 -0
  71. data/ext/nokogiri/html_sax_parser_context.c +94 -0
  72. data/ext/nokogiri/html_sax_parser_context.h +11 -0
  73. data/ext/nokogiri/nokogiri.c +92 -0
  74. data/ext/nokogiri/nokogiri.h +160 -0
  75. data/ext/nokogiri/xml_attr.c +94 -0
  76. data/ext/nokogiri/xml_attr.h +9 -0
  77. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  78. data/ext/nokogiri/xml_attribute_decl.h +9 -0
  79. data/ext/nokogiri/xml_cdata.c +56 -0
  80. data/ext/nokogiri/xml_cdata.h +9 -0
  81. data/ext/nokogiri/xml_comment.c +54 -0
  82. data/ext/nokogiri/xml_comment.h +9 -0
  83. data/ext/nokogiri/xml_document.c +478 -0
  84. data/ext/nokogiri/xml_document.h +23 -0
  85. data/ext/nokogiri/xml_document_fragment.c +48 -0
  86. data/ext/nokogiri/xml_document_fragment.h +10 -0
  87. data/ext/nokogiri/xml_dtd.c +202 -0
  88. data/ext/nokogiri/xml_dtd.h +10 -0
  89. data/ext/nokogiri/xml_element_content.c +123 -0
  90. data/ext/nokogiri/xml_element_content.h +10 -0
  91. data/ext/nokogiri/xml_element_decl.c +69 -0
  92. data/ext/nokogiri/xml_element_decl.h +9 -0
  93. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  94. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  95. data/ext/nokogiri/xml_entity_decl.c +110 -0
  96. data/ext/nokogiri/xml_entity_decl.h +10 -0
  97. data/ext/nokogiri/xml_entity_reference.c +52 -0
  98. data/ext/nokogiri/xml_entity_reference.h +9 -0
  99. data/ext/nokogiri/xml_io.c +31 -0
  100. data/ext/nokogiri/xml_io.h +11 -0
  101. data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
  102. data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
  103. data/ext/nokogiri/xml_namespace.c +84 -0
  104. data/ext/nokogiri/xml_namespace.h +13 -0
  105. data/ext/nokogiri/xml_node.c +1384 -0
  106. data/ext/nokogiri/xml_node.h +13 -0
  107. data/ext/nokogiri/xml_node_set.c +418 -0
  108. data/ext/nokogiri/xml_node_set.h +9 -0
  109. data/ext/nokogiri/xml_processing_instruction.c +56 -0
  110. data/ext/nokogiri/xml_processing_instruction.h +9 -0
  111. data/ext/nokogiri/xml_reader.c +684 -0
  112. data/ext/nokogiri/xml_reader.h +10 -0
  113. data/ext/nokogiri/xml_relax_ng.c +161 -0
  114. data/ext/nokogiri/xml_relax_ng.h +9 -0
  115. data/ext/nokogiri/xml_sax_parser.c +288 -0
  116. data/ext/nokogiri/xml_sax_parser.h +39 -0
  117. data/ext/nokogiri/xml_sax_parser_context.c +199 -0
  118. data/ext/nokogiri/xml_sax_parser_context.h +10 -0
  119. data/ext/nokogiri/xml_sax_push_parser.c +115 -0
  120. data/ext/nokogiri/xml_sax_push_parser.h +9 -0
  121. data/ext/nokogiri/xml_schema.c +205 -0
  122. data/ext/nokogiri/xml_schema.h +9 -0
  123. data/ext/nokogiri/xml_syntax_error.c +58 -0
  124. data/ext/nokogiri/xml_syntax_error.h +13 -0
  125. data/ext/nokogiri/xml_text.c +50 -0
  126. data/ext/nokogiri/xml_text.h +9 -0
  127. data/ext/nokogiri/xml_xpath_context.c +309 -0
  128. data/ext/nokogiri/xml_xpath_context.h +9 -0
  129. data/ext/nokogiri/xslt_stylesheet.c +258 -0
  130. data/ext/nokogiri/xslt_stylesheet.h +9 -0
  131. data/lib/isorelax.jar +0 -0
  132. data/lib/jing.jar +0 -0
  133. data/lib/nekodtd.jar +0 -0
  134. data/lib/nekohtml.jar +0 -0
  135. data/lib/nokogiri.rb +143 -0
  136. data/lib/nokogiri/css.rb +23 -0
  137. data/lib/nokogiri/css/node.rb +99 -0
  138. data/lib/nokogiri/css/parser.rb +677 -0
  139. data/lib/nokogiri/css/parser.y +237 -0
  140. data/lib/nokogiri/css/parser_extras.rb +91 -0
  141. data/lib/nokogiri/css/syntax_error.rb +7 -0
  142. data/lib/nokogiri/css/tokenizer.rb +152 -0
  143. data/lib/nokogiri/css/tokenizer.rex +55 -0
  144. data/lib/nokogiri/css/xpath_visitor.rb +171 -0
  145. data/lib/nokogiri/decorators/slop.rb +35 -0
  146. data/lib/nokogiri/html.rb +36 -0
  147. data/lib/nokogiri/html/builder.rb +35 -0
  148. data/lib/nokogiri/html/document.rb +221 -0
  149. data/lib/nokogiri/html/document_fragment.rb +41 -0
  150. data/lib/nokogiri/html/element_description.rb +23 -0
  151. data/lib/nokogiri/html/element_description_defaults.rb +671 -0
  152. data/lib/nokogiri/html/entity_lookup.rb +13 -0
  153. data/lib/nokogiri/html/sax/parser.rb +52 -0
  154. data/lib/nokogiri/html/sax/parser_context.rb +16 -0
  155. data/lib/nokogiri/syntax_error.rb +4 -0
  156. data/lib/nokogiri/version.rb +35 -0
  157. data/lib/nokogiri/xml.rb +67 -0
  158. data/lib/nokogiri/xml/attr.rb +14 -0
  159. data/lib/nokogiri/xml/attribute_decl.rb +18 -0
  160. data/lib/nokogiri/xml/builder.rb +418 -0
  161. data/lib/nokogiri/xml/cdata.rb +11 -0
  162. data/lib/nokogiri/xml/character_data.rb +7 -0
  163. data/lib/nokogiri/xml/document.rb +218 -0
  164. data/lib/nokogiri/xml/document_fragment.rb +84 -0
  165. data/lib/nokogiri/xml/dtd.rb +22 -0
  166. data/lib/nokogiri/xml/element_content.rb +36 -0
  167. data/lib/nokogiri/xml/element_decl.rb +13 -0
  168. data/lib/nokogiri/xml/entity_decl.rb +19 -0
  169. data/lib/nokogiri/xml/namespace.rb +13 -0
  170. data/lib/nokogiri/xml/node.rb +907 -0
  171. data/lib/nokogiri/xml/node/save_options.rb +45 -0
  172. data/lib/nokogiri/xml/node_set.rb +350 -0
  173. data/lib/nokogiri/xml/notation.rb +6 -0
  174. data/lib/nokogiri/xml/parse_options.rb +85 -0
  175. data/lib/nokogiri/xml/pp.rb +2 -0
  176. data/lib/nokogiri/xml/pp/character_data.rb +18 -0
  177. data/lib/nokogiri/xml/pp/node.rb +56 -0
  178. data/lib/nokogiri/xml/processing_instruction.rb +8 -0
  179. data/lib/nokogiri/xml/reader.rb +112 -0
  180. data/lib/nokogiri/xml/relax_ng.rb +32 -0
  181. data/lib/nokogiri/xml/sax.rb +4 -0
  182. data/lib/nokogiri/xml/sax/document.rb +164 -0
  183. data/lib/nokogiri/xml/sax/parser.rb +115 -0
  184. data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
  185. data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
  186. data/lib/nokogiri/xml/schema.rb +57 -0
  187. data/lib/nokogiri/xml/syntax_error.rb +47 -0
  188. data/lib/nokogiri/xml/text.rb +9 -0
  189. data/lib/nokogiri/xml/xpath.rb +10 -0
  190. data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
  191. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  192. data/lib/nokogiri/xslt.rb +52 -0
  193. data/lib/nokogiri/xslt/stylesheet.rb +25 -0
  194. data/lib/xercesImpl.jar +0 -0
  195. data/lib/xsd/xmlparser/nokogiri.rb +90 -0
  196. data/tasks/cross_compile.rb +177 -0
  197. data/tasks/test.rb +94 -0
  198. data/test/css/test_nthiness.rb +159 -0
  199. data/test/css/test_parser.rb +303 -0
  200. data/test/css/test_tokenizer.rb +198 -0
  201. data/test/css/test_xpath_visitor.rb +85 -0
  202. data/test/decorators/test_slop.rb +16 -0
  203. data/test/files/2ch.html +108 -0
  204. data/test/files/address_book.rlx +12 -0
  205. data/test/files/address_book.xml +10 -0
  206. data/test/files/bar/bar.xsd +4 -0
  207. data/test/files/dont_hurt_em_why.xml +422 -0
  208. data/test/files/exslt.xml +8 -0
  209. data/test/files/exslt.xslt +35 -0
  210. data/test/files/foo/foo.xsd +4 -0
  211. data/test/files/po.xml +32 -0
  212. data/test/files/po.xsd +66 -0
  213. data/test/files/shift_jis.html +10 -0
  214. data/test/files/shift_jis.xml +5 -0
  215. data/test/files/snuggles.xml +3 -0
  216. data/test/files/staff.dtd +10 -0
  217. data/test/files/staff.xml +59 -0
  218. data/test/files/staff.xslt +32 -0
  219. data/test/files/tlm.html +850 -0
  220. data/test/files/valid_bar.xml +2 -0
  221. data/test/helper.rb +171 -0
  222. data/test/html/sax/test_parser.rb +136 -0
  223. data/test/html/sax/test_parser_context.rb +48 -0
  224. data/test/html/test_builder.rb +164 -0
  225. data/test/html/test_document.rb +457 -0
  226. data/test/html/test_document_encoding.rb +123 -0
  227. data/test/html/test_document_fragment.rb +255 -0
  228. data/test/html/test_element_description.rb +100 -0
  229. data/test/html/test_named_characters.rb +14 -0
  230. data/test/html/test_node.rb +190 -0
  231. data/test/html/test_node_encoding.rb +27 -0
  232. data/test/test_convert_xpath.rb +135 -0
  233. data/test/test_css_cache.rb +45 -0
  234. data/test/test_encoding_handler.rb +46 -0
  235. data/test/test_memory_leak.rb +52 -0
  236. data/test/test_nokogiri.rb +132 -0
  237. data/test/test_reader.rb +403 -0
  238. data/test/test_soap4r_sax.rb +52 -0
  239. data/test/test_xslt_transforms.rb +189 -0
  240. data/test/xml/node/test_save_options.rb +20 -0
  241. data/test/xml/node/test_subclass.rb +44 -0
  242. data/test/xml/sax/test_parser.rb +338 -0
  243. data/test/xml/sax/test_parser_context.rb +113 -0
  244. data/test/xml/sax/test_push_parser.rb +156 -0
  245. data/test/xml/test_attr.rb +65 -0
  246. data/test/xml/test_attribute_decl.rb +86 -0
  247. data/test/xml/test_builder.rb +210 -0
  248. data/test/xml/test_cdata.rb +50 -0
  249. data/test/xml/test_comment.rb +29 -0
  250. data/test/xml/test_document.rb +675 -0
  251. data/test/xml/test_document_encoding.rb +26 -0
  252. data/test/xml/test_document_fragment.rb +192 -0
  253. data/test/xml/test_dtd.rb +107 -0
  254. data/test/xml/test_dtd_encoding.rb +33 -0
  255. data/test/xml/test_element_content.rb +56 -0
  256. data/test/xml/test_element_decl.rb +73 -0
  257. data/test/xml/test_entity_decl.rb +122 -0
  258. data/test/xml/test_entity_reference.rb +21 -0
  259. data/test/xml/test_namespace.rb +70 -0
  260. data/test/xml/test_node.rb +899 -0
  261. data/test/xml/test_node_attributes.rb +34 -0
  262. data/test/xml/test_node_encoding.rb +107 -0
  263. data/test/xml/test_node_reparenting.rb +321 -0
  264. data/test/xml/test_node_set.rb +708 -0
  265. data/test/xml/test_parse_options.rb +52 -0
  266. data/test/xml/test_processing_instruction.rb +30 -0
  267. data/test/xml/test_reader_encoding.rb +126 -0
  268. data/test/xml/test_relax_ng.rb +60 -0
  269. data/test/xml/test_schema.rb +89 -0
  270. data/test/xml/test_syntax_error.rb +12 -0
  271. data/test/xml/test_text.rb +47 -0
  272. data/test/xml/test_unparented_node.rb +381 -0
  273. data/test/xml/test_xpath.rb +237 -0
  274. data/test/xslt/test_custom_functions.rb +94 -0
  275. metadata +525 -0
@@ -0,0 +1,99 @@
1
+ module Nokogiri
2
+ module CSS
3
+ class Node
4
+ # Get the type of this node
5
+ attr_accessor :type
6
+ # Get the value of this node
7
+ attr_accessor :value
8
+
9
+ # Create a new Node with +type+ and +value+
10
+ def initialize type, value
11
+ @type = type
12
+ @value = value
13
+ end
14
+
15
+ # Accept +visitor+
16
+ def accept visitor
17
+ visitor.send(:"visit_#{type.to_s.downcase}", self)
18
+ end
19
+
20
+ ###
21
+ # Convert this CSS node to xpath with +prefix+ using +visitor+
22
+ def to_xpath prefix = '//', visitor = XPathVisitor.new
23
+ self.preprocess!
24
+ prefix + visitor.accept(self)
25
+ end
26
+
27
+ # Preprocess this node tree
28
+ def preprocess!
29
+ ### Deal with nth-child
30
+ matches = find_by_type(
31
+ [:CONDITIONAL_SELECTOR,
32
+ [:ELEMENT_NAME],
33
+ [:PSEUDO_CLASS,
34
+ [:FUNCTION]
35
+ ]
36
+ ]
37
+ )
38
+ matches.each do |match|
39
+ if match.value[1].value[0].value[0] =~ /^nth-(last-)?child/
40
+ tag_name = match.value[0].value.first
41
+ match.value[0].value = ['*']
42
+ match.value[1] = Node.new(:COMBINATOR, [
43
+ match.value[1].value[0],
44
+ Node.new(:FUNCTION, ['self(', tag_name])
45
+ ])
46
+ end
47
+ end
48
+
49
+ ### Deal with first-child, last-child
50
+ matches = find_by_type(
51
+ [:CONDITIONAL_SELECTOR,
52
+ [:ELEMENT_NAME], [:PSEUDO_CLASS]
53
+ ])
54
+ matches.each do |match|
55
+ if ['first-child', 'last-child'].include?(match.value[1].value.first)
56
+ which = match.value[1].value.first.gsub(/-\w*$/, '')
57
+ tag_name = match.value[0].value.first
58
+ match.value[0].value = ['*']
59
+ match.value[1] = Node.new(:COMBINATOR, [
60
+ Node.new(:FUNCTION, ["#{which}("]),
61
+ Node.new(:FUNCTION, ['self(', tag_name])
62
+ ])
63
+ elsif 'only-child' == match.value[1].value.first
64
+ tag_name = match.value[0].value.first
65
+ match.value[0].value = ['*']
66
+ match.value[1] = Node.new(:COMBINATOR, [
67
+ Node.new(:FUNCTION, ["#{match.value[1].value.first}("]),
68
+ Node.new(:FUNCTION, ['self(', tag_name])
69
+ ])
70
+ end
71
+ end
72
+
73
+ self
74
+ end
75
+
76
+ # Find a node by type using +types+
77
+ def find_by_type types
78
+ matches = []
79
+ matches << self if to_type == types
80
+ @value.each do |v|
81
+ matches += v.find_by_type(types) if v.respond_to?(:find_by_type)
82
+ end
83
+ matches
84
+ end
85
+
86
+ # Convert to_type
87
+ def to_type
88
+ [@type] + @value.map { |n|
89
+ n.to_type if n.respond_to?(:to_type)
90
+ }.compact
91
+ end
92
+
93
+ # Convert to array
94
+ def to_a
95
+ [@type] + @value.map { |n| n.respond_to?(:to_a) ? n.to_a : [n] }
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,677 @@
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
+ require 'nokogiri/css/parser_extras'
11
+ module Nokogiri
12
+ module CSS
13
+ class Parser < Racc::Parser
14
+ ##### State transition tables begin ###
15
+
16
+ racc_action_table = [
17
+ 4, 56, 27, 22, 12, 24, 57, 4, 65, 1,
18
+ 41, 12, 75, 57, 4, 23, 1, 82, 12, 19,
19
+ 93, 92, 5, 1, 9, 10, 19, 13, 16, 5,
20
+ 12, 9, 10, 19, 13, 16, 5, 5, 9, 10,
21
+ 4, 13, 16, 16, 12, 41, 64, 4, 5, 1,
22
+ 60, 10, 12, 59, 16, 59, 28, 1, 29, 19,
23
+ 12, 12, 5, 62, 9, 10, 19, 13, 16, 12,
24
+ 5, 9, 83, 10, 12, 13, 16, 84, 5, 5,
25
+ 63, 10, 10, 12, 16, 16, 58, 5, 61, 62,
26
+ 10, 4, 5, 16, 87, 10, 27, 53, 16, 54,
27
+ 49, 5, 88, 41, 10, 68, 70, 16, 27, 53,
28
+ 19, 54, 44, 91, 21, 9, 69, 71, 72, 94,
29
+ 74, 68, 70, -23, 66, 33, 35, 37, 27, 53,
30
+ 96, 54, 69, 71, 72, 32, 74, 34, 36, 97,
31
+ 66, 27, 53, nil, 54 ]
32
+
33
+ racc_action_check = [
34
+ 0, 20, 4, 4, 0, 4, 43, 9, 27, 0,
35
+ 39, 9, 29, 20, 31, 4, 9, 43, 31, 0,
36
+ 73, 73, 0, 31, 0, 0, 9, 0, 0, 9,
37
+ 7, 9, 9, 31, 9, 9, 31, 14, 31, 31,
38
+ 57, 31, 31, 14, 57, 7, 26, 5, 7, 57,
39
+ 22, 7, 41, 53, 7, 22, 5, 41, 5, 57,
40
+ 8, 79, 57, 54, 57, 57, 5, 57, 57, 18,
41
+ 41, 5, 55, 41, 17, 41, 41, 56, 8, 79,
42
+ 25, 8, 79, 15, 8, 79, 21, 18, 24, 24,
43
+ 18, 16, 17, 18, 60, 17, 59, 59, 17, 59,
44
+ 16, 15, 61, 11, 15, 30, 30, 15, 19, 19,
45
+ 16, 19, 10, 67, 2, 16, 30, 30, 30, 76,
46
+ 30, 28, 28, 1, 30, 6, 6, 6, 62, 62,
47
+ 81, 62, 28, 28, 28, 6, 28, 6, 6, 88,
48
+ 28, 65, 65, nil, 65 ]
49
+
50
+ racc_action_pointer = [
51
+ -2, 95, 86, nil, -8, 45, 118, 24, 54, 5,
52
+ 101, 82, nil, nil, 13, 77, 89, 68, 63, 98,
53
+ 1, 75, 43, nil, 77, 57, 23, -4, 118, -13,
54
+ 102, 12, nil, nil, nil, nil, nil, nil, nil, -11,
55
+ nil, 46, nil, -6, nil, nil, nil, nil, nil, nil,
56
+ nil, nil, nil, 41, 51, 49, 77, 38, nil, 86,
57
+ 81, 95, 118, nil, nil, 131, nil, 88, nil, nil,
58
+ nil, nil, nil, 10, nil, nil, 94, nil, nil, 55,
59
+ nil, 107, nil, nil, nil, nil, nil, nil, 126, nil,
60
+ nil, nil, nil, nil, nil, nil, nil, nil ]
61
+
62
+ racc_action_default = [
63
+ -24, -21, -69, -2, -69, -69, -18, -45, -50, -24,
64
+ -69, -16, -54, -22, -12, -53, -69, -52, -51, -69,
65
+ -69, -69, -38, -28, -36, -69, -69, -37, -57, -69,
66
+ -57, -24, -5, -3, -8, -4, -7, -6, -9, -44,
67
+ -11, -24, -46, -69, -19, -15, -13, -14, -49, -43,
68
+ -42, -48, -47, -38, -36, -69, -69, -24, -20, -69,
69
+ -69, -41, -69, -29, -30, -69, -58, -69, -63, -59,
70
+ -64, -60, -61, -69, -62, -27, -69, -17, -10, -66,
71
+ -68, -69, -32, -31, 98, -1, -35, -40, -69, -33,
72
+ -34, -25, -55, -56, -26, -67, -65, -39 ]
73
+
74
+ racc_goto_table = [
75
+ 39, 42, 25, 40, 77, 30, 20, 45, 48, 79,
76
+ 51, 52, 67, 46, 76, 43, 50, 55, 47, 38,
77
+ 31, 26, 81, nil, nil, nil, nil, nil, nil, nil,
78
+ 85, nil, nil, nil, 80, 78, nil, nil, nil, nil,
79
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
80
+ nil, nil, nil, nil, nil, nil, nil, 86, nil, nil,
81
+ 89, nil, nil, 90, nil, nil, nil, nil, nil, nil,
82
+ nil, nil, 95 ]
83
+
84
+ racc_goto_check = [
85
+ 7, 7, 15, 8, 2, 9, 1, 8, 7, 5,
86
+ 7, 7, 14, 10, 14, 1, 9, 15, 11, 6,
87
+ 3, 16, 19, nil, nil, nil, nil, nil, nil, nil,
88
+ 2, nil, nil, nil, 7, 8, nil, nil, nil, nil,
89
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
90
+ nil, nil, nil, nil, nil, nil, nil, 15, nil, nil,
91
+ 15, nil, nil, 15, nil, nil, nil, nil, nil, nil,
92
+ nil, nil, 7 ]
93
+
94
+ racc_goto_pointer = [
95
+ nil, 6, -27, 14, nil, -32, 12, -7, -4, 0,
96
+ -1, 4, nil, nil, -16, -2, 17, nil, nil, -19 ]
97
+
98
+ racc_goto_default = [
99
+ nil, nil, 3, nil, 6, 7, nil, 11, nil, 14,
100
+ 15, 17, 18, 2, nil, nil, nil, 8, 73, nil ]
101
+
102
+ racc_reduce_table = [
103
+ 0, 0, :racc_error,
104
+ 3, 32, :_reduce_1,
105
+ 1, 32, :_reduce_2,
106
+ 1, 34, :_reduce_3,
107
+ 1, 34, :_reduce_4,
108
+ 1, 34, :_reduce_5,
109
+ 1, 34, :_reduce_6,
110
+ 1, 34, :_reduce_7,
111
+ 1, 34, :_reduce_8,
112
+ 2, 35, :_reduce_9,
113
+ 3, 35, :_reduce_10,
114
+ 2, 35, :_reduce_11,
115
+ 1, 35, :_reduce_none,
116
+ 2, 35, :_reduce_13,
117
+ 2, 35, :_reduce_14,
118
+ 2, 35, :_reduce_15,
119
+ 1, 35, :_reduce_16,
120
+ 3, 33, :_reduce_17,
121
+ 1, 33, :_reduce_none,
122
+ 2, 43, :_reduce_19,
123
+ 3, 36, :_reduce_20,
124
+ 1, 36, :_reduce_21,
125
+ 1, 36, :_reduce_22,
126
+ 1, 44, :_reduce_23,
127
+ 0, 44, :_reduce_none,
128
+ 4, 42, :_reduce_25,
129
+ 4, 42, :_reduce_26,
130
+ 3, 42, :_reduce_27,
131
+ 2, 40, :_reduce_28,
132
+ 3, 40, :_reduce_29,
133
+ 3, 40, :_reduce_30,
134
+ 3, 40, :_reduce_31,
135
+ 3, 40, :_reduce_32,
136
+ 3, 46, :_reduce_33,
137
+ 3, 46, :_reduce_34,
138
+ 3, 46, :_reduce_35,
139
+ 1, 46, :_reduce_none,
140
+ 1, 46, :_reduce_none,
141
+ 1, 46, :_reduce_38,
142
+ 4, 47, :_reduce_39,
143
+ 3, 47, :_reduce_40,
144
+ 2, 47, :_reduce_41,
145
+ 2, 41, :_reduce_42,
146
+ 2, 41, :_reduce_43,
147
+ 1, 37, :_reduce_none,
148
+ 0, 37, :_reduce_none,
149
+ 2, 38, :_reduce_46,
150
+ 2, 38, :_reduce_47,
151
+ 2, 38, :_reduce_48,
152
+ 2, 38, :_reduce_49,
153
+ 1, 38, :_reduce_none,
154
+ 1, 38, :_reduce_none,
155
+ 1, 38, :_reduce_none,
156
+ 1, 38, :_reduce_none,
157
+ 1, 48, :_reduce_54,
158
+ 2, 45, :_reduce_55,
159
+ 2, 45, :_reduce_56,
160
+ 0, 45, :_reduce_none,
161
+ 1, 49, :_reduce_58,
162
+ 1, 49, :_reduce_59,
163
+ 1, 49, :_reduce_60,
164
+ 1, 49, :_reduce_61,
165
+ 1, 49, :_reduce_62,
166
+ 1, 49, :_reduce_63,
167
+ 1, 49, :_reduce_64,
168
+ 3, 39, :_reduce_65,
169
+ 1, 50, :_reduce_none,
170
+ 2, 50, :_reduce_none,
171
+ 1, 50, :_reduce_none ]
172
+
173
+ racc_reduce_n = 69
174
+
175
+ racc_shift_n = 98
176
+
177
+ racc_token_table = {
178
+ false => 0,
179
+ :error => 1,
180
+ :FUNCTION => 2,
181
+ :INCLUDES => 3,
182
+ :DASHMATCH => 4,
183
+ :LBRACE => 5,
184
+ :HASH => 6,
185
+ :PLUS => 7,
186
+ :GREATER => 8,
187
+ :S => 9,
188
+ :STRING => 10,
189
+ :IDENT => 11,
190
+ :COMMA => 12,
191
+ :NUMBER => 13,
192
+ :PREFIXMATCH => 14,
193
+ :SUFFIXMATCH => 15,
194
+ :SUBSTRINGMATCH => 16,
195
+ :TILDE => 17,
196
+ :NOT_EQUAL => 18,
197
+ :SLASH => 19,
198
+ :DOUBLESLASH => 20,
199
+ :NOT => 21,
200
+ :EQUAL => 22,
201
+ :RPAREN => 23,
202
+ :LSQUARE => 24,
203
+ :RSQUARE => 25,
204
+ :HAS => 26,
205
+ "." => 27,
206
+ "|" => 28,
207
+ "*" => 29,
208
+ ":" => 30 }
209
+
210
+ racc_nt_base = 31
211
+
212
+ racc_use_result_var = true
213
+
214
+ Racc_arg = [
215
+ racc_action_table,
216
+ racc_action_check,
217
+ racc_action_default,
218
+ racc_action_pointer,
219
+ racc_goto_table,
220
+ racc_goto_check,
221
+ racc_goto_default,
222
+ racc_goto_pointer,
223
+ racc_nt_base,
224
+ racc_reduce_table,
225
+ racc_token_table,
226
+ racc_shift_n,
227
+ racc_reduce_n,
228
+ racc_use_result_var ]
229
+
230
+ Racc_token_to_s_table = [
231
+ "$end",
232
+ "error",
233
+ "FUNCTION",
234
+ "INCLUDES",
235
+ "DASHMATCH",
236
+ "LBRACE",
237
+ "HASH",
238
+ "PLUS",
239
+ "GREATER",
240
+ "S",
241
+ "STRING",
242
+ "IDENT",
243
+ "COMMA",
244
+ "NUMBER",
245
+ "PREFIXMATCH",
246
+ "SUFFIXMATCH",
247
+ "SUBSTRINGMATCH",
248
+ "TILDE",
249
+ "NOT_EQUAL",
250
+ "SLASH",
251
+ "DOUBLESLASH",
252
+ "NOT",
253
+ "EQUAL",
254
+ "RPAREN",
255
+ "LSQUARE",
256
+ "RSQUARE",
257
+ "HAS",
258
+ "\".\"",
259
+ "\"|\"",
260
+ "\"*\"",
261
+ "\":\"",
262
+ "$start",
263
+ "selector",
264
+ "simple_selector_1toN",
265
+ "combinator",
266
+ "simple_selector",
267
+ "element_name",
268
+ "hcap_0toN",
269
+ "hcap_1toN",
270
+ "negation",
271
+ "function",
272
+ "pseudo",
273
+ "attrib",
274
+ "class",
275
+ "namespace",
276
+ "attrib_val_0or1",
277
+ "expr",
278
+ "an_plus_b",
279
+ "attribute_id",
280
+ "eql_incl_dash",
281
+ "negation_arg" ]
282
+
283
+ Racc_debug_parser = false
284
+
285
+ ##### State transition tables end #####
286
+
287
+ # reduce 0 omitted
288
+
289
+ def _reduce_1(val, _values, result)
290
+ result = [val.first, val.last].flatten
291
+
292
+ result
293
+ end
294
+
295
+ def _reduce_2(val, _values, result)
296
+ result = val.flatten
297
+ result
298
+ end
299
+
300
+ def _reduce_3(val, _values, result)
301
+ result = :DIRECT_ADJACENT_SELECTOR
302
+ result
303
+ end
304
+
305
+ def _reduce_4(val, _values, result)
306
+ result = :CHILD_SELECTOR
307
+ result
308
+ end
309
+
310
+ def _reduce_5(val, _values, result)
311
+ result = :PRECEDING_SELECTOR
312
+ result
313
+ end
314
+
315
+ def _reduce_6(val, _values, result)
316
+ result = :DESCENDANT_SELECTOR
317
+ result
318
+ end
319
+
320
+ def _reduce_7(val, _values, result)
321
+ result = :DESCENDANT_SELECTOR
322
+ result
323
+ end
324
+
325
+ def _reduce_8(val, _values, result)
326
+ result = :CHILD_SELECTOR
327
+ result
328
+ end
329
+
330
+ def _reduce_9(val, _values, result)
331
+ result = if val[1].nil?
332
+ val.first
333
+ else
334
+ Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
335
+ end
336
+
337
+ result
338
+ end
339
+
340
+ def _reduce_10(val, _values, result)
341
+ result = Node.new(:CONDITIONAL_SELECTOR,
342
+ [
343
+ val.first,
344
+ Node.new(:COMBINATOR, [val[1], val.last])
345
+ ]
346
+ )
347
+
348
+ result
349
+ end
350
+
351
+ def _reduce_11(val, _values, result)
352
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
353
+
354
+ result
355
+ end
356
+
357
+ # reduce 12 omitted
358
+
359
+ def _reduce_13(val, _values, result)
360
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
361
+
362
+ result
363
+ end
364
+
365
+ def _reduce_14(val, _values, result)
366
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
367
+
368
+ result
369
+ end
370
+
371
+ def _reduce_15(val, _values, result)
372
+ result = Node.new(:CONDITIONAL_SELECTOR,
373
+ [
374
+ Node.new(:ELEMENT_NAME, ['*']),
375
+ Node.new(:COMBINATOR, val)
376
+ ]
377
+ )
378
+
379
+ result
380
+ end
381
+
382
+ def _reduce_16(val, _values, result)
383
+ result = Node.new(:CONDITIONAL_SELECTOR,
384
+ [Node.new(:ELEMENT_NAME, ['*']), val.first]
385
+ )
386
+
387
+ result
388
+ end
389
+
390
+ def _reduce_17(val, _values, result)
391
+ result = Node.new(val[1], [val.first, val.last])
392
+
393
+ result
394
+ end
395
+
396
+ # reduce 18 omitted
397
+
398
+ def _reduce_19(val, _values, result)
399
+ result = Node.new(:CLASS_CONDITION, [val[1]])
400
+ result
401
+ end
402
+
403
+ def _reduce_20(val, _values, result)
404
+ result = Node.new(:ELEMENT_NAME,
405
+ [[val.first, val.last].compact.join(':')]
406
+ )
407
+
408
+ result
409
+ end
410
+
411
+ def _reduce_21(val, _values, result)
412
+ name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
413
+ result = Node.new(:ELEMENT_NAME, [name])
414
+
415
+ result
416
+ end
417
+
418
+ def _reduce_22(val, _values, result)
419
+ result = Node.new(:ELEMENT_NAME, val)
420
+ result
421
+ end
422
+
423
+ def _reduce_23(val, _values, result)
424
+ result = val[0]
425
+ result
426
+ end
427
+
428
+ # reduce 24 omitted
429
+
430
+ def _reduce_25(val, _values, result)
431
+ result = Node.new(:ATTRIBUTE_CONDITION,
432
+ [Node.new(:ELEMENT_NAME, [val[1]])] + (val[2] || [])
433
+ )
434
+
435
+ result
436
+ end
437
+
438
+ def _reduce_26(val, _values, result)
439
+ result = Node.new(:ATTRIBUTE_CONDITION,
440
+ [val[1]] + (val[2] || [])
441
+ )
442
+
443
+ result
444
+ end
445
+
446
+ def _reduce_27(val, _values, result)
447
+ # Non standard, but hpricot supports it.
448
+ result = Node.new(:PSEUDO_CLASS,
449
+ [Node.new(:FUNCTION, ['nth-child(', val[1]])]
450
+ )
451
+
452
+ result
453
+ end
454
+
455
+ def _reduce_28(val, _values, result)
456
+ result = Node.new(:FUNCTION, [val.first.strip])
457
+
458
+ result
459
+ end
460
+
461
+ def _reduce_29(val, _values, result)
462
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
463
+
464
+ result
465
+ end
466
+
467
+ def _reduce_30(val, _values, result)
468
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
469
+
470
+ result
471
+ end
472
+
473
+ def _reduce_31(val, _values, result)
474
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
475
+
476
+ result
477
+ end
478
+
479
+ def _reduce_32(val, _values, result)
480
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
481
+
482
+ result
483
+ end
484
+
485
+ def _reduce_33(val, _values, result)
486
+ result = [val.first, val.last]
487
+ result
488
+ end
489
+
490
+ def _reduce_34(val, _values, result)
491
+ result = [val.first, val.last]
492
+ result
493
+ end
494
+
495
+ def _reduce_35(val, _values, result)
496
+ result = [val.first, val.last]
497
+ result
498
+ end
499
+
500
+ # reduce 36 omitted
501
+
502
+ # reduce 37 omitted
503
+
504
+ def _reduce_38(val, _values, result)
505
+ if val[0] == 'even'
506
+ val = ["2","n","+","0"]
507
+ result = Node.new(:AN_PLUS_B, val)
508
+ elsif val[0] == 'odd'
509
+ val = ["2","n","+","1"]
510
+ result = Node.new(:AN_PLUS_B, val)
511
+ else
512
+ # This is not CSS standard. It allows us to support this:
513
+ # assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
514
+ # assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
515
+ # assert_xpath("//a[foo(., a, 10)]", @parser.parse('a:foo(a, 10)'))
516
+ result = val
517
+ end
518
+
519
+ result
520
+ end
521
+
522
+ def _reduce_39(val, _values, result)
523
+ if val[1] == 'n'
524
+ result = Node.new(:AN_PLUS_B, val)
525
+ else
526
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
527
+ end
528
+
529
+ result
530
+ end
531
+
532
+ def _reduce_40(val, _values, result)
533
+ # n+3, -n+3
534
+ if val[0] == 'n'
535
+ val.unshift("1")
536
+ result = Node.new(:AN_PLUS_B, val)
537
+ elsif val[0] == '-n'
538
+ val[0] = 'n'
539
+ val.unshift("-1")
540
+ result = Node.new(:AN_PLUS_B, val)
541
+ else
542
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
543
+ end
544
+
545
+ result
546
+ end
547
+
548
+ def _reduce_41(val, _values, result)
549
+ if val[1] == 'n'
550
+ val << "+"
551
+ val << "0"
552
+ result = Node.new(:AN_PLUS_B, val)
553
+ else
554
+ raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
555
+ end
556
+
557
+ result
558
+ end
559
+
560
+ def _reduce_42(val, _values, result)
561
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
562
+
563
+ result
564
+ end
565
+
566
+ def _reduce_43(val, _values, result)
567
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
568
+ result
569
+ end
570
+
571
+ # reduce 44 omitted
572
+
573
+ # reduce 45 omitted
574
+
575
+ def _reduce_46(val, _values, result)
576
+ result = Node.new(:COMBINATOR, val)
577
+
578
+ result
579
+ end
580
+
581
+ def _reduce_47(val, _values, result)
582
+ result = Node.new(:COMBINATOR, val)
583
+
584
+ result
585
+ end
586
+
587
+ def _reduce_48(val, _values, result)
588
+ result = Node.new(:COMBINATOR, val)
589
+
590
+ result
591
+ end
592
+
593
+ def _reduce_49(val, _values, result)
594
+ result = Node.new(:COMBINATOR, val)
595
+
596
+ result
597
+ end
598
+
599
+ # reduce 50 omitted
600
+
601
+ # reduce 51 omitted
602
+
603
+ # reduce 52 omitted
604
+
605
+ # reduce 53 omitted
606
+
607
+ def _reduce_54(val, _values, result)
608
+ result = Node.new(:ID, val)
609
+ result
610
+ end
611
+
612
+ def _reduce_55(val, _values, result)
613
+ result = [val.first, val[1]]
614
+ result
615
+ end
616
+
617
+ def _reduce_56(val, _values, result)
618
+ result = [val.first, val[1]]
619
+ result
620
+ end
621
+
622
+ # reduce 57 omitted
623
+
624
+ def _reduce_58(val, _values, result)
625
+ result = :equal
626
+ result
627
+ end
628
+
629
+ def _reduce_59(val, _values, result)
630
+ result = :prefix_match
631
+ result
632
+ end
633
+
634
+ def _reduce_60(val, _values, result)
635
+ result = :suffix_match
636
+ result
637
+ end
638
+
639
+ def _reduce_61(val, _values, result)
640
+ result = :substring_match
641
+ result
642
+ end
643
+
644
+ def _reduce_62(val, _values, result)
645
+ result = :not_equal
646
+ result
647
+ end
648
+
649
+ def _reduce_63(val, _values, result)
650
+ result = :includes
651
+ result
652
+ end
653
+
654
+ def _reduce_64(val, _values, result)
655
+ result = :dash_match
656
+ result
657
+ end
658
+
659
+ def _reduce_65(val, _values, result)
660
+ result = Node.new(:NOT, [val[1]])
661
+
662
+ result
663
+ end
664
+
665
+ # reduce 66 omitted
666
+
667
+ # reduce 67 omitted
668
+
669
+ # reduce 68 omitted
670
+
671
+ def _reduce_none(val, _values, result)
672
+ val[0]
673
+ end
674
+
675
+ end # class Parser
676
+ end # module CSS
677
+ end # module Nokogiri