nokogiri 1.5.0.beta.3 → 1.5.0.beta.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 (87) hide show
  1. data/CHANGELOG.ja.rdoc +32 -16
  2. data/CHANGELOG.rdoc +18 -0
  3. data/Manifest.txt +1 -2
  4. data/README.rdoc +27 -3
  5. data/Rakefile +39 -83
  6. data/ext/java/nokogiri/EncodingHandler.java +1 -1
  7. data/ext/java/nokogiri/HtmlDocument.java +11 -14
  8. data/ext/java/nokogiri/HtmlElementDescription.java +1 -1
  9. data/ext/java/nokogiri/HtmlEntityLookup.java +1 -1
  10. data/ext/java/nokogiri/HtmlSaxParserContext.java +13 -10
  11. data/ext/java/nokogiri/NokogiriService.java +103 -34
  12. data/ext/java/nokogiri/XmlAttr.java +14 -6
  13. data/ext/java/nokogiri/XmlAttributeDecl.java +1 -1
  14. data/ext/java/nokogiri/XmlCdata.java +3 -1
  15. data/ext/java/nokogiri/XmlComment.java +3 -1
  16. data/ext/java/nokogiri/XmlDocument.java +29 -8
  17. data/ext/java/nokogiri/XmlDocumentFragment.java +14 -13
  18. data/ext/java/nokogiri/XmlDtd.java +5 -2
  19. data/ext/java/nokogiri/XmlElement.java +2 -1
  20. data/ext/java/nokogiri/XmlElementContent.java +1 -1
  21. data/ext/java/nokogiri/XmlElementDecl.java +2 -1
  22. data/ext/java/nokogiri/XmlEntityDecl.java +2 -1
  23. data/ext/java/nokogiri/XmlEntityReference.java +1 -1
  24. data/ext/java/nokogiri/XmlNamespace.java +3 -2
  25. data/ext/java/nokogiri/XmlNode.java +17 -10
  26. data/ext/java/nokogiri/XmlNodeSet.java +40 -13
  27. data/ext/java/nokogiri/XmlProcessingInstruction.java +1 -1
  28. data/ext/java/nokogiri/XmlReader.java +3 -1
  29. data/ext/java/nokogiri/XmlRelaxng.java +37 -92
  30. data/ext/java/nokogiri/XmlSaxParserContext.java +25 -11
  31. data/ext/java/nokogiri/XmlSaxPushParser.java +6 -4
  32. data/ext/java/nokogiri/XmlSchema.java +190 -46
  33. data/ext/java/nokogiri/XmlSyntaxError.java +42 -37
  34. data/ext/java/nokogiri/XmlText.java +3 -2
  35. data/ext/java/nokogiri/XmlXpathContext.java +8 -4
  36. data/ext/java/nokogiri/XsltStylesheet.java +12 -10
  37. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +8 -7
  38. data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +1 -1
  39. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +11 -5
  40. data/ext/java/nokogiri/internals/NokogiriHandler.java +36 -9
  41. data/ext/java/nokogiri/internals/NokogiriHelpers.java +21 -22
  42. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +5 -4
  43. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +1 -1
  44. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +2 -1
  45. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +1 -1
  46. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +2 -1
  47. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +15 -9
  48. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +1 -1
  49. data/ext/java/nokogiri/internals/ParserContext.java +18 -7
  50. data/ext/java/nokogiri/internals/PushInputStream.java +1 -1
  51. data/ext/java/nokogiri/internals/ReaderNode.java +7 -6
  52. data/ext/java/nokogiri/internals/SaveContext.java +16 -10
  53. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +13 -5
  54. data/ext/java/nokogiri/internals/XmlDeclHandler.java +1 -1
  55. data/ext/java/nokogiri/internals/XmlDomParser.java +1 -1
  56. data/ext/java/nokogiri/internals/XmlDomParserContext.java +13 -8
  57. data/ext/java/nokogiri/internals/XmlSaxParser.java +1 -1
  58. data/ext/java/nokogiri/internals/XsltExtensionFunction.java +1 -1
  59. data/ext/nokogiri/extconf.rb +3 -3
  60. data/ext/nokogiri/xml_document.c +9 -0
  61. data/ext/nokogiri/xml_sax_parser.c +4 -2
  62. data/lib/nokogiri.rb +9 -6
  63. data/lib/nokogiri/css.rb +1 -3
  64. data/lib/nokogiri/css/parser.rb +665 -70
  65. data/lib/nokogiri/css/parser.y +3 -1
  66. data/lib/nokogiri/css/parser_extras.rb +91 -0
  67. data/lib/nokogiri/css/tokenizer.rb +148 -3
  68. data/lib/nokogiri/css/tokenizer.rex +1 -1
  69. data/lib/nokogiri/html/document.rb +138 -11
  70. data/lib/nokogiri/html/sax/parser.rb +6 -2
  71. data/lib/nokogiri/version.rb +1 -1
  72. data/lib/nokogiri/xml/node.rb +2 -2
  73. data/lib/nokogiri/xml/node/save_options.rb +3 -0
  74. data/lib/nokogiri/xml/node_set.rb +1 -1
  75. data/test/css/test_tokenizer.rb +8 -0
  76. data/test/helper.rb +2 -0
  77. data/test/html/sax/test_parser.rb +43 -0
  78. data/test/html/test_document.rb +59 -0
  79. data/test/html/test_document_encoding.rb +48 -0
  80. data/test/html/test_element_description.rb +1 -1
  81. data/test/xml/sax/test_parser.rb +16 -0
  82. data/test/xml/test_document.rb +3 -1
  83. data/test/xml/test_node.rb +4 -1
  84. data/test/xml/test_node_set.rb +10 -0
  85. metadata +90 -107
  86. data/lib/nokogiri/css/generated_parser.rb +0 -676
  87. data/lib/nokogiri/css/generated_tokenizer.rb +0 -145
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * (The MIT License)
3
3
  *
4
- * Copyright (c) 2008 - 2010:
4
+ * Copyright (c) 2008 - 2011:
5
5
  *
6
6
  * * {Aaron Patterson}[http://tenderlovemaking.com]
7
7
  * * {Mike Dalessio}[http://mike.daless.io]
@@ -17,9 +17,9 @@ end
17
17
  $CFLAGS << " #{ENV["CFLAGS"]}"
18
18
  $LIBS << " #{ENV["LIBS"]}"
19
19
 
20
- if Config::CONFIG['target_os'] == 'mingw32' || Config::CONFIG['target_os'] =~ /mswin32/
20
+ if RbConfig::CONFIG['target_os'] == 'mingw32' || RbConfig::CONFIG['target_os'] =~ /mswin32/
21
21
  $CFLAGS << " -DXP_WIN -DXP_WIN32 -DUSE_INCLUDED_VASPRINTF"
22
- elsif Config::CONFIG['target_os'] =~ /solaris/
22
+ elsif RbConfig::CONFIG['target_os'] =~ /solaris/
23
23
  $CFLAGS << " -DUSE_INCLUDED_VASPRINTF"
24
24
  else
25
25
  $CFLAGS << " -g -DXP_UNIX"
@@ -33,7 +33,7 @@ if RbConfig::MAKEFILE_CONFIG['CC'] =~ /gcc/
33
33
  $CFLAGS << " -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline"
34
34
  end
35
35
 
36
- if Config::CONFIG['target_os'] =~ /mswin32/
36
+ if RbConfig::CONFIG['target_os'] =~ /mswin32/
37
37
  lib_prefix = 'lib'
38
38
 
39
39
  # There's no default include/lib dir on Windows. Let's just add the Ruby ones
@@ -41,6 +41,7 @@ static void dealloc(xmlDocPtr doc)
41
41
  static void recursively_remove_namespaces_from_node(xmlNodePtr node)
42
42
  {
43
43
  xmlNodePtr child ;
44
+ xmlAttrPtr property ;
44
45
 
45
46
  xmlSetNs(node, NULL);
46
47
 
@@ -51,6 +52,14 @@ static void recursively_remove_namespaces_from_node(xmlNodePtr node)
51
52
  xmlFreeNsList(node->nsDef);
52
53
  node->nsDef = NULL;
53
54
  }
55
+
56
+ if (node->properties != NULL) {
57
+ property = node->properties ;
58
+ while (property != NULL) {
59
+ if (property->ns) property->ns = NULL ;
60
+ property = property->next ;
61
+ }
62
+ }
54
63
  }
55
64
 
56
65
  /*
@@ -62,8 +62,10 @@ 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
- rb_ary_push(attributes, NOKOGIRI_STR_NEW2(attr));
66
- i++;
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;
67
69
  }
68
70
  }
69
71
 
@@ -7,12 +7,15 @@ ENV['PATH'] = [File.expand_path(
7
7
  ), ENV['PATH']].compact.join(';') if RbConfig::CONFIG['host_os'] =~ /(mswin|mingw)/i
8
8
 
9
9
  if defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby"
10
- # If JRuby::Rack::VERSION is defined, Nokogiri is in a servlet.
11
- # If AppEngine::ApiProxy is defined, Nokogiri is on Google App Egnine.
12
- # These two cases don't need to require jar archives because those
13
- # should be in WEB-INF/lib and already set in the classpath by
14
- # a servlet container.
15
- unless defined?(JRuby::Rack::VERSION) || defined?(AppEngine::ApiProxy)
10
+ # The line below caused a problem on non-GAE rack environment.
11
+ # unless defined?(JRuby::Rack::VERSION) || defined?(AppEngine::ApiProxy)
12
+ #
13
+ # However, simply cutting defined?(JRuby::Rack::VERSION) off resulted in
14
+ # an unable-to-load-nokogiri problem. Thus, now, Nokogiri checks the presense
15
+ # of appengine-rack.jar in $LOAD_PATH. If Nokogiri is on GAE, Nokogiri
16
+ # should skip loading xml jars. This is because those are in WEB-INF/lib and
17
+ # already set in the classpath.
18
+ unless $LOAD_PATH.to_s.include?("appengine-rack")
16
19
  require 'isorelax.jar'
17
20
  require 'jing.jar'
18
21
  require 'nekohtml.jar'
@@ -1,9 +1,7 @@
1
1
  require 'nokogiri/css/node'
2
2
  require 'nokogiri/css/xpath_visitor'
3
- require 'nokogiri/css/generated_parser'
4
- require 'nokogiri/css/generated_tokenizer'
5
- require 'nokogiri/css/tokenizer'
6
3
  require 'nokogiri/css/parser'
4
+ require 'nokogiri/css/tokenizer'
7
5
  require 'nokogiri/css/syntax_error'
8
6
 
9
7
  module Nokogiri
@@ -1,82 +1,677 @@
1
- require 'thread'
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.4.6
4
+ # from Racc grammer file "".
5
+ #
2
6
 
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ require 'nokogiri/css/parser_extras'
3
11
  module Nokogiri
4
12
  module CSS
5
- class Parser < GeneratedTokenizer
6
- @cache_on = true
7
- @cache = {}
8
- @mutex = Mutex.new
9
-
10
- class << self
11
- # Turn on CSS parse caching
12
- attr_accessor :cache_on
13
- alias :cache_on? :cache_on
14
- alias :set_cache :cache_on=
15
-
16
- # Get the css selector in +string+ from the cache
17
- def [] string
18
- return unless @cache_on
19
- @mutex.synchronize { @cache[string] }
20
- end
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
21
445
 
22
- # Set the css selector in +string+ in the cache to +value+
23
- def []= string, value
24
- return value unless @cache_on
25
- @mutex.synchronize { @cache[string] = value }
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
26
517
  end
518
+
519
+ result
520
+ end
27
521
 
28
- # Clear the cache
29
- def clear_cache
30
- @mutex.synchronize { @cache = {} }
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]}'"
31
527
  end
528
+
529
+ result
530
+ end
32
531
 
33
- # Execute +block+ without cache
34
- def without_cache &block
35
- tmp = @cache_on
36
- @cache_on = false
37
- block.call
38
- @cache_on = tmp
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]}'"
39
543
  end
544
+
545
+ result
546
+ end
40
547
 
41
- ###
42
- # Parse this CSS selector in +selector+. Returns an AST.
43
- def parse selector
44
- @warned ||= false
45
- unless @warned
46
- $stderr.puts('Nokogiri::CSS::Parser.parse is deprecated, call Nokogiri::CSS.parse(), this will be removed August 1st or version 1.4.0 (whichever is first)')
47
- @warned = true
48
- end
49
- new.parse selector
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]}'"
50
555
  end
51
- end
52
-
53
- # Create a new CSS parser with respect to +namespaces+
54
- def initialize namespaces = {}
55
- @namespaces = namespaces
56
- super()
57
- end
58
- alias :parse :scan_str
59
-
60
- # Get the xpath for +string+ using +options+
61
- def xpath_for string, options={}
62
- key = "#{string}#{options[:ns]}#{options[:prefix]}"
63
- v = self.class[key]
64
- return v if v
65
-
66
- args = [
67
- options[:prefix] || '//',
68
- options[:visitor] || XPathVisitor.new
69
- ]
70
- self.class[key] = parse(string).map { |ast|
71
- ast.to_xpath(*args)
72
- }
73
- end
74
-
75
- # On CSS parser error, raise an exception
76
- def on_error error_token_id, error_value, value_stack
77
- after = value_stack.compact.last
78
- raise SyntaxError.new("unexpected '#{error_value}' after '#{after}'")
79
- end
80
- end
81
- 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
82
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