nokogiri 1.3.0 → 1.3.1

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

Potentially problematic release.


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

@@ -1,26 +1,46 @@
1
+ === 1.3.1 / 2009年6月7日
2
+
3
+ * バグの修正
4
+
5
+ * extconf.rb は任意のRelaxNGとSchemaの機能を探すようになった
6
+ * ドキュメントのノードキャッシュに名前空間のノードが入るようになった
7
+
1
8
  === 1.3.0 / 2009年5月30日
2
9
 
3
10
  * 新しい機能
4
11
 
5
- * ビルダーはブロックのアリティによりスコープを変換出来るようになった
6
- * ビルダーはアンダースコア、アンダーラインで終わるメソッドをtagzと同様の機能でサポートするようになった
7
- * Nokogiri::XML::Node#<=> はドキュメントの位置によりノードを比較するようになった
8
- * Nokogiri::XML::Node#matches?は与えられたセレクタ内でノードが認知されたらtrueを返す事が出来るようになった
9
- * Nokogiri::XML::Node#ancestors はNokogiri::XML::NodeSetを返すようになった
10
- * Nokogiri::XML::Node#ancestorsはオプションのセレクタに対応する親をマッチするようになった
11
- * Nokogiri::HTML::Document#meta_encoding はメタデータのエンコードを返すようになった
12
- * Nokogiri::HTML::Document#meta_encoding= はメタデータのエンコードを設定するようになった
13
- * Nokogiri::XML::Document#encoding= はドキュメントのエンコードを設定するようになった
14
- * Nokogiri::XML::Schema はドキュメントがXSDのスキーマに沿って記述されているかを検証するようになった
15
- * Nokogiri::XML::RelaxNG はドキュメントがRelaxNGのスキーマに沿って記述されているかを検証するようになった
16
- * Nokogiri::HTML::ElementDescription はHTML要素の説明フェッチ動作するようになった
17
- * Nokogiri::XML::Node#descriptionは ノードの説明をフェッチ動作するようになった
12
+ * Builderがブロックの引数の数に応じてスコープが定まるようになった
13
+ * Builderがアンダースコアで終わるメソッドをtagzと同様にサポートするようになった
14
+ * Nokogiri::XML::Node#<=> がドキュメントの位置によりノードを比較するように
15
+ なった
16
+ * Nokogiri::XML::Node#matches?が与えられたセレクタ内でノードがあればtrue
17
+ を返すようになった
18
+ * Nokogiri::XML::Node#ancestors がNokogiri::XML::NodeSetオブジェクトを返すようになった
19
+ * Nokogiri::XML::Node#ancestorsがオプションのセレクタに対応する親をマッチする
20
+ ようになった
21
+ * Nokogiri::HTML::Document#meta_encoding がメタデータのエンコードを返すように
22
+ なった
23
+ * Nokogiri::HTML::Document#meta_encoding= でメタデータのエンコードを
24
+ 設定できるようになった
25
+ * Nokogiri::XML::Document#encoding= でドキュメントのエンコードを
26
+ 設定できるようになった
27
+ * Nokogiri::XML::Schema でドキュメントがXSDのスキーマに沿って記述されているか
28
+ を検証できるようになった
29
+ * Nokogiri::XML::RelaxNG でドキュメントがRelaxNGのスキーマに沿って
30
+ 記述されているかを検証できるようになった
31
+ * Nokogiri::HTML::ElementDescription はHTML要素の説明フェッチ動作するよう
32
+ になった
33
+ * Nokogiri::XML::Node#descriptionは ノードの説明をフェッチ動作するよう
34
+ になった
18
35
  * Nokogiri::XML::Node#accept は Visitor パターンを実行するようになった
19
- * bin/nokogiri にドキュメントを簡単に監査するようになった (Yataka HARAさんに感謝感激)
20
- * Nokogiri::XML::NodeSetが更にArrayとEnumerableの演算をサポートするようになった:
21
- index, delete, slice, - (差分), + (連結), & (共通部分),
22
- push, pop, shift, ==
23
- * Nokogiri.XML, Nokogiri.HTML はNokogiri::XML::ParseOptions objectと一緒に呼び出されるブロックを受け入れるようになった
36
+ * 簡単にドキュメントを解析するコマンド bin/nokogiri を追加
37
+ (Yataka HARAさんに感謝感激)
38
+ * Nokogiri::XML::NodeSetが更にArrayとEnumerableの演算を
39
+ サポートするようになった:
40
+ index, delete, slice, - (差分), + (連結), & (共通部分),
41
+ push, pop, shift, ==
42
+ * Nokogiri.XML, Nokogiri.HTML はNokogiri::XML::ParseOptions objectと一緒に
43
+ 呼び出されるブロックを受け入れるようになった
24
44
  * Nokogiri::XML::Node#namespace は Nokogiri::XML::Namespaceを返すようになった
25
45
  * Nokogiri::XML::Node#namespaceはノードの名前空間を設定するようになった
26
46
  * FFI 経由で JRuby 1.3.0 をサポートするようになった
@@ -28,13 +48,15 @@
28
48
  * バグの修正
29
49
 
30
50
  * nilがCDATAsonstructorに渡される際の問題を修正
31
- * Fragment メソッドが正規表現を抜け出させるようになった (Thanks Joel!) (LH #73)
51
+ * Fragment メソッドが正規表現を抜け出させるようになった
52
+ (Joelさんに感謝感激) (LH #73)
32
53
  * Builder スコープのLH #61, LH #74, LH #70に関しての様々な問題を修正
33
54
  * 名前空間を付け加える時、名前空間が LH#78より除去されてしまう問題を修正
34
55
  * 連結しないノードが発生し、再育成してしまう問題を修正(GH#22)
35
56
  * XSLT が解析中にエラーを発見し損なう問題を修正(GH#32)
36
57
  * CSS selectors内での条件属性のバグ問題を修正(GH#36)
37
- * Node#before/after/inner_html=で値なしのHTML属性が受け入れられなかった問題を修正 (GH#35)
58
+ * Node#before/after/inner_html=で値なしのHTML属性が受け入れられなかった問題を
59
+ 修正 (GH#35)
38
60
 
39
61
  === 1.2.3 / 2009年3月22日
40
62
 
@@ -53,13 +75,13 @@
53
75
 
54
76
  * Nokogiri は soap4r と一緒に使う事が可能。(XSD::XMLParser::Nokogiri 参照)
55
77
  * Nokogiri::XML::Node#inner_html= はノードの中のHTMLをセット出来る
56
- * Nokogiriのビルダーのインタフェースの改良
78
+ * NokogiriのBuilderのインタフェースの改良
57
79
  * Nokogiri::XML::Node#swap は、現在のノードに新しいhtmlを交換する事が出来る
58
80
 
59
81
 
60
82
  * バグの修正
61
83
 
62
- * ビルダーAPIのタグのネスティングを修正 (LH #41)
84
+ * BuilderAPIのタグのネスティングを修正 (LH #41)
63
85
  * Nokogiri::HTML.fragment はテキストだけのノードを適切に扱う事が出来る(LH #43)
64
86
  * Nokogiri::XML::Node#before はテキストノードのはじめに挿入する事が出来る (LH #44)
65
87
  * Nokogiri::XML::Node#after はテキストノードの文末に挿入する事が出来る
@@ -184,7 +206,7 @@
184
206
 
185
207
  * 弱参照からドキュメント参照へのメモリー管理の変換
186
208
  * メモリリークに接続
187
- * ビルダーブロックが取り囲んでいるコンテキストから
209
+ * Builderブロックが取り囲んでいるコンテキストから
188
210
  メソッドの呼び出しをする事が出来る
189
211
 
190
212
  === 1.0.3
@@ -1,3 +1,10 @@
1
+ === 1.3.1 / 2009-06-07
2
+
3
+ * Bugfixes
4
+
5
+ * extconf.rb checks for optional RelaxNG and Schema functions
6
+ * Namespace nodes are added to the Document node cache
7
+
1
8
  === 1.3.0 / 2009-05-30
2
9
 
3
10
  * New Features
@@ -8,7 +8,11 @@
8
8
 
9
9
  == DESCRIPTION:
10
10
 
11
- Nokogiri はHTMLやXMLやSAXやXSLTやReaderのパーサーです。
11
+ Nokogiri はHTMLやXMLやSAXやXSLTやReaderのパーサーです。Nokogiri はドキュメント
12
+ をXPath と CSS3 セレクター経由で検索する機能が特徴のひとつ。
13
+
14
+ XMLは暴力に似ている - XMLが君の問題を解決しないとしたら、君はXMLを十分に
15
+ 使いこなしていない事になる。
12
16
 
13
17
  == FEATURES:
14
18
 
@@ -8,7 +8,11 @@
8
8
 
9
9
  == DESCRIPTION:
10
10
 
11
- Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser.
11
+ Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among Nokogiri's
12
+ many features is the ability to search documents via XPath or CSS3 selectors.
13
+
14
+ XML is like violence - if it doesn’t solve your problems, you are not using
15
+ enough of it.
12
16
 
13
17
  == FEATURES:
14
18
 
data/Rakefile CHANGED
@@ -29,7 +29,7 @@ HOE = Hoe.new('nokogiri', Nokogiri::VERSION) do |p|
29
29
  ]
30
30
 
31
31
  p.extra_dev_deps << "racc"
32
- p.extra_dev_deps << "tenderlove-frex"
32
+ p.extra_dev_deps << "rexical"
33
33
  p.extra_dev_deps << "rake-compiler"
34
34
 
35
35
  p.spec_extras = { :extensions => ["ext/nokogiri/extconf.rb"] }
@@ -74,7 +74,7 @@ require "#{HOE.name}/\#{RUBY_VERSION.sub(/\\.\\d+$/, '')}/#{HOE.name}"
74
74
  eoruby
75
75
  end
76
76
  HOE.spec.extensions = []
77
- HOE.spec.platform = 'i386-mingw32'
77
+ HOE.spec.platform = 'x86-mswin32'
78
78
  HOE.spec.files += Dir["lib/#{HOE.name}/#{HOE.name}.rb"]
79
79
  HOE.spec.files += Dir["lib/#{HOE.name}/1.{8,9}/*"]
80
80
  HOE.spec.files += Dir["ext/nokogiri/*.dll"]
@@ -119,7 +119,7 @@ file GENERATED_PARSER => "lib/nokogiri/css/parser.y" do |t|
119
119
  begin
120
120
  racc = `which racc`.strip
121
121
  racc = "#{::Config::CONFIG['bindir']}/racc" if racc.empty?
122
- sh "#{racc} -o #{t.name} #{t.prerequisites.first}"
122
+ sh "#{racc} -l -o #{t.name} #{t.prerequisites.first}"
123
123
  rescue
124
124
  abort "need racc, sudo gem install racc"
125
125
  end
@@ -127,9 +127,9 @@ end
127
127
 
128
128
  file GENERATED_TOKENIZER => "lib/nokogiri/css/tokenizer.rex" do |t|
129
129
  begin
130
- sh "frex --independent -o #{t.name} #{t.prerequisites.first}"
130
+ sh "rex --independent -o #{t.name} #{t.prerequisites.first}"
131
131
  rescue
132
- abort "need frex, sudo gem install tenderlove-frex -s http://gems.github.com"
132
+ abort "need rexical, sudo gem install rexical"
133
133
  end
134
134
  end
135
135
 
@@ -190,15 +190,15 @@ unless windows || java || ENV['NOKOGIRI_FFI']
190
190
  end
191
191
 
192
192
  namespace :install do
193
- desc "Install frex and racc for development"
194
- task :deps => %w(frex racc)
193
+ desc "Install rex and racc for development"
194
+ task :deps => %w(rexical racc)
195
195
 
196
196
  task :racc do |t|
197
197
  sh "sudo gem install racc"
198
198
  end
199
199
 
200
- task :frex do
201
- sh "sudo gem install tenderlove-frex -s http://gems.github.com"
200
+ task :rexical do
201
+ sh "sudo gem install rexical"
202
202
  end
203
203
  end
204
204
 
@@ -22,17 +22,35 @@ end
22
22
  $CFLAGS << " -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline"
23
23
 
24
24
  HEADER_DIRS = [
25
- File.join(INCLUDEDIR, "libxml2"),
26
- INCLUDEDIR,
25
+ # First search /opt/local for macports
26
+ '/opt/local/include',
27
+ '/opt/local/include/libxml2',
28
+
29
+ # Then search /usr/local for people that installed from source
30
+ '/usr/local/include',
27
31
  '/usr/local/include/libxml2',
32
+
33
+ # Check the ruby install locations
34
+ INCLUDEDIR,
35
+ File.join(INCLUDEDIR, "libxml2"),
36
+
37
+ # Finally fall back to /usr
38
+ '/usr/include',
28
39
  '/usr/include/libxml2',
29
40
  ]
30
41
 
31
42
  LIB_DIRS = [
32
- LIBDIR,
43
+ # First search /opt/local for macports
33
44
  '/opt/local/lib',
45
+
46
+ # Then search /usr/local for people that installed from source
34
47
  '/usr/local/lib',
35
- '/usr/lib'
48
+
49
+ # Check the ruby install locations
50
+ LIBDIR,
51
+
52
+ # Finally fall back to /usr
53
+ '/usr/lib',
36
54
  ]
37
55
 
38
56
  iconv_dirs = dir_config('iconv', '/opt/local/include', '/opt/local/lib')
@@ -80,6 +98,11 @@ unless find_library('exslt', 'exsltFuncRegister', *LIB_DIRS)
80
98
  abort "libxslt is missing. try 'port install libxslt' or 'yum install libxslt-devel'"
81
99
  end
82
100
 
101
+ have_func('xmlRelaxNGSetParserStructuredErrors')
102
+ have_func('xmlRelaxNGSetValidStructuredErrors')
103
+ have_func('xmlSchemaSetValidStructuredErrors')
104
+ have_func('xmlSchemaSetParserStructuredErrors')
105
+
83
106
  if ENV['CPUPROFILE']
84
107
  unless find_library('profiler', 'ProfilerEnable', *LIB_DIRS)
85
108
  abort "google performance tools are not installed"
@@ -12,6 +12,7 @@
12
12
  #include <libxml/xmlschemas.h>
13
13
  #include <libxml/HTMLparser.h>
14
14
  #include <libxml/HTMLtree.h>
15
+ #include <libxml/relaxng.h>
15
16
 
16
17
  #ifdef USE_INCLUDED_VASPRINTF
17
18
  int vasprintf (char **strp, const char *fmt, va_list ap);
@@ -49,6 +49,11 @@ VALUE Nokogiri_wrap_xml_namespace(xmlDocPtr doc, xmlNsPtr node)
49
49
 
50
50
  VALUE ns = Data_Wrap_Struct(cNokogiriXmlNamespace, 0, 0, node);
51
51
 
52
+ VALUE document = DOC_RUBY_OBJECT(doc);
53
+
54
+ VALUE node_cache = rb_iv_get(document, "@node_cache");
55
+ rb_ary_push(node_cache, ns);
56
+
52
57
  rb_iv_set(ns, "@document", DOC_RUBY_OBJECT(doc));
53
58
 
54
59
  node->_private = (void *)ns;
@@ -807,57 +807,44 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
807
807
  if(RTEST(klass))
808
808
  rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
809
809
 
810
- if(!RTEST(klass)) switch(node->type)
810
+ else switch(node->type)
811
811
  {
812
812
  case XML_ELEMENT_NODE:
813
813
  klass = cNokogiriXmlElement;
814
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
815
814
  break;
816
815
  case XML_TEXT_NODE:
817
816
  klass = cNokogiriXmlText;
818
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
817
+ break;
818
+ case XML_ATTRIBUTE_NODE:
819
+ klass = cNokogiriXmlAttr;
819
820
  break;
820
821
  case XML_ENTITY_REF_NODE:
821
822
  klass = cNokogiriXmlEntityReference;
822
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
823
823
  break;
824
824
  case XML_COMMENT_NODE:
825
825
  klass = cNokogiriXmlComment;
826
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
827
826
  break;
828
827
  case XML_DOCUMENT_FRAG_NODE:
829
828
  klass = cNokogiriXmlDocumentFragment;
830
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
831
829
  break;
832
830
  case XML_PI_NODE:
833
831
  klass = cNokogiriXmlProcessingInstruction;
834
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
835
- break;
836
- case XML_ATTRIBUTE_NODE:
837
- klass = cNokogiriXmlAttr;
838
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
839
832
  break;
840
833
  case XML_ENTITY_DECL:
841
834
  klass = cNokogiriXmlEntityDeclaration;
842
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
843
835
  break;
844
836
  case XML_CDATA_SECTION_NODE:
845
837
  klass = cNokogiriXmlCData;
846
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
847
838
  break;
848
839
  case XML_DTD_NODE:
849
840
  klass = rb_const_get(mNokogiriXml, rb_intern("DTD"));
850
- rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
851
841
  break;
852
842
  default:
853
- rb_node = Data_Wrap_Struct(
854
- cNokogiriXmlNode,
855
- mark,
856
- debug_node_dealloc,
857
- node
858
- );
843
+ klass = cNokogiriXmlNode;
859
844
  }
860
845
 
846
+ rb_node = Data_Wrap_Struct(klass, mark, debug_node_dealloc, node) ;
847
+
861
848
  node->_private = (void *)rb_node;
862
849
 
863
850
  if (DOC_RUBY_OBJECT_TEST(node->doc) && DOC_RUBY_OBJECT(node->doc)) {
@@ -866,7 +853,6 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
866
853
  }
867
854
 
868
855
  rb_ary_push(node_cache, rb_node);
869
- //rb_iv_set(rb_node, "@document", document);
870
856
  rb_funcall(document, rb_intern("decorate"), 1, rb_node);
871
857
 
872
858
  return rb_node ;
@@ -30,13 +30,13 @@ static VALUE validate_document(VALUE self, VALUE document)
30
30
  rb_raise(rb_eRuntimeError, "Could not create a validation context");
31
31
  }
32
32
 
33
- if (! is_2_6_16()) {
34
- xmlRelaxNGSetValidStructuredErrors(
35
- valid_ctxt,
36
- Nokogiri_error_array_pusher,
37
- (void *)errors
38
- );
39
- }
33
+ #ifdef HAVE_XMLRELAXNGSETVALIDSTRUCTUREDERRORS
34
+ xmlRelaxNGSetValidStructuredErrors(
35
+ valid_ctxt,
36
+ Nokogiri_error_array_pusher,
37
+ (void *)errors
38
+ );
39
+ #endif
40
40
 
41
41
  xmlRelaxNGValidateDoc(valid_ctxt, doc);
42
42
 
@@ -61,13 +61,13 @@ static VALUE read_memory(VALUE klass, VALUE content)
61
61
  VALUE errors = rb_ary_new();
62
62
  xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
63
63
 
64
- if (! is_2_6_16()) {
65
- xmlRelaxNGSetParserStructuredErrors(
66
- ctx,
67
- Nokogiri_error_array_pusher,
68
- (void *)errors
69
- );
70
- }
64
+ #ifdef HAVE_XMLRELAXNGSETPARSERSTRUCTUREDERRORS
65
+ xmlRelaxNGSetParserStructuredErrors(
66
+ ctx,
67
+ Nokogiri_error_array_pusher,
68
+ (void *)errors
69
+ );
70
+ #endif
71
71
 
72
72
  xmlRelaxNGPtr schema = xmlRelaxNGParse(ctx);
73
73
 
@@ -30,13 +30,13 @@ static VALUE validate_document(VALUE self, VALUE document)
30
30
  rb_raise(rb_eRuntimeError, "Could not create a validation context");
31
31
  }
32
32
 
33
- if (! is_2_6_16()) {
34
- xmlSchemaSetValidStructuredErrors(
35
- valid_ctxt,
36
- Nokogiri_error_array_pusher,
37
- (void *)errors
38
- );
39
- }
33
+ #ifdef HAVE_XMLSCHEMASETVALIDSTRUCTUREDERRORS
34
+ xmlSchemaSetValidStructuredErrors(
35
+ valid_ctxt,
36
+ Nokogiri_error_array_pusher,
37
+ (void *)errors
38
+ );
39
+ #endif
40
40
 
41
41
  xmlSchemaValidateDoc(valid_ctxt, doc);
42
42
 
@@ -62,13 +62,13 @@ static VALUE read_memory(VALUE klass, VALUE content)
62
62
  VALUE errors = rb_ary_new();
63
63
  xmlSetStructuredErrorFunc((void *)errors, Nokogiri_error_array_pusher);
64
64
 
65
- if (! is_2_6_16()) {
66
- xmlSchemaSetParserStructuredErrors(
67
- ctx,
68
- Nokogiri_error_array_pusher,
69
- (void *)errors
70
- );
71
- }
65
+ #ifdef HAVE_XMLSCHEMASETPARSERSTRUCTUREDERRORS
66
+ xmlSchemaSetParserStructuredErrors(
67
+ ctx,
68
+ Nokogiri_error_array_pusher,
69
+ (void *)errors
70
+ );
71
+ #endif
72
72
 
73
73
  xmlSchemaPtr schema = xmlSchemaParse(ctx);
74
74
 
@@ -271,78 +271,59 @@ Racc_debug_parser = false
271
271
 
272
272
  # reduce 0 omitted
273
273
 
274
- module_eval(<<'.,.,', 'parser.y', 9)
275
- def _reduce_1(val, _values, result)
276
- result = [val.first, val.last].flatten
274
+ def _reduce_1(val, _values, result)
275
+ result = [val.first, val.last].flatten
277
276
 
278
277
  result
279
- end
280
- .,.,
278
+ end
281
279
 
282
- module_eval(<<'.,.,', 'parser.y', 11)
283
- def _reduce_2(val, _values, result)
284
- result = val.flatten
280
+ def _reduce_2(val, _values, result)
281
+ result = val.flatten
285
282
  result
286
- end
287
- .,.,
283
+ end
288
284
 
289
- module_eval(<<'.,.,', 'parser.y', 14)
290
- def _reduce_3(val, _values, result)
291
- result = :DIRECT_ADJACENT_SELECTOR
285
+ def _reduce_3(val, _values, result)
286
+ result = :DIRECT_ADJACENT_SELECTOR
292
287
  result
293
- end
294
- .,.,
288
+ end
295
289
 
296
- module_eval(<<'.,.,', 'parser.y', 15)
297
- def _reduce_4(val, _values, result)
298
- result = :CHILD_SELECTOR
290
+ def _reduce_4(val, _values, result)
291
+ result = :CHILD_SELECTOR
299
292
  result
300
- end
301
- .,.,
293
+ end
302
294
 
303
- module_eval(<<'.,.,', 'parser.y', 16)
304
- def _reduce_5(val, _values, result)
305
- result = :PRECEDING_SELECTOR
295
+ def _reduce_5(val, _values, result)
296
+ result = :PRECEDING_SELECTOR
306
297
  result
307
- end
308
- .,.,
298
+ end
309
299
 
310
- module_eval(<<'.,.,', 'parser.y', 17)
311
- def _reduce_6(val, _values, result)
312
- result = :DESCENDANT_SELECTOR
300
+ def _reduce_6(val, _values, result)
301
+ result = :DESCENDANT_SELECTOR
313
302
  result
314
- end
315
- .,.,
303
+ end
316
304
 
317
- module_eval(<<'.,.,', 'parser.y', 18)
318
- def _reduce_7(val, _values, result)
319
- result = :DESCENDANT_SELECTOR
305
+ def _reduce_7(val, _values, result)
306
+ result = :DESCENDANT_SELECTOR
320
307
  result
321
- end
322
- .,.,
308
+ end
323
309
 
324
- module_eval(<<'.,.,', 'parser.y', 19)
325
- def _reduce_8(val, _values, result)
326
- result = :CHILD_SELECTOR
310
+ def _reduce_8(val, _values, result)
311
+ result = :CHILD_SELECTOR
327
312
  result
328
- end
329
- .,.,
313
+ end
330
314
 
331
- module_eval(<<'.,.,', 'parser.y', 23)
332
- def _reduce_9(val, _values, result)
333
- result = if val[1].nil?
315
+ def _reduce_9(val, _values, result)
316
+ result = if val[1].nil?
334
317
  val.first
335
318
  else
336
319
  Node.new(:CONDITIONAL_SELECTOR, [val.first, val[1]])
337
320
  end
338
321
 
339
322
  result
340
- end
341
- .,.,
323
+ end
342
324
 
343
- module_eval(<<'.,.,', 'parser.y', 30)
344
- def _reduce_10(val, _values, result)
345
- result = Node.new(:CONDITIONAL_SELECTOR,
325
+ def _reduce_10(val, _values, result)
326
+ result = Node.new(:CONDITIONAL_SELECTOR,
346
327
  [
347
328
  val.first,
348
329
  Node.new(:COMBINATOR, [val[1], val.last])
@@ -350,30 +331,24 @@ module_eval(<<'.,.,', 'parser.y', 30)
350
331
  )
351
332
 
352
333
  result
353
- end
354
- .,.,
334
+ end
355
335
 
356
- module_eval(<<'.,.,', 'parser.y', 38)
357
- def _reduce_11(val, _values, result)
358
- result = Node.new(:CONDITIONAL_SELECTOR, val)
336
+ def _reduce_11(val, _values, result)
337
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
359
338
 
360
339
  result
361
- end
362
- .,.,
340
+ end
363
341
 
364
342
  # reduce 12 omitted
365
343
 
366
- module_eval(<<'.,.,', 'parser.y', 42)
367
- def _reduce_13(val, _values, result)
368
- result = Node.new(:CONDITIONAL_SELECTOR, val)
344
+ def _reduce_13(val, _values, result)
345
+ result = Node.new(:CONDITIONAL_SELECTOR, val)
369
346
 
370
347
  result
371
- end
372
- .,.,
348
+ end
373
349
 
374
- module_eval(<<'.,.,', 'parser.y', 45)
375
- def _reduce_14(val, _values, result)
376
- result = Node.new(:CONDITIONAL_SELECTOR,
350
+ def _reduce_14(val, _values, result)
351
+ result = Node.new(:CONDITIONAL_SELECTOR,
377
352
  [
378
353
  Node.new(:ELEMENT_NAME, ['*']),
379
354
  Node.new(:COMBINATOR, val)
@@ -381,162 +356,126 @@ module_eval(<<'.,.,', 'parser.y', 45)
381
356
  )
382
357
 
383
358
  result
384
- end
385
- .,.,
359
+ end
386
360
 
387
- module_eval(<<'.,.,', 'parser.y', 53)
388
- def _reduce_15(val, _values, result)
389
- result = Node.new(:CONDITIONAL_SELECTOR,
361
+ def _reduce_15(val, _values, result)
362
+ result = Node.new(:CONDITIONAL_SELECTOR,
390
363
  [Node.new(:ELEMENT_NAME, ['*']), val.first]
391
364
  )
392
365
 
393
366
  result
394
- end
395
- .,.,
367
+ end
396
368
 
397
- module_eval(<<'.,.,', 'parser.y', 60)
398
- def _reduce_16(val, _values, result)
399
- result = Node.new(val[1], [val.first, val.last])
369
+ def _reduce_16(val, _values, result)
370
+ result = Node.new(val[1], [val.first, val.last])
400
371
 
401
372
  result
402
- end
403
- .,.,
373
+ end
404
374
 
405
375
  # reduce 17 omitted
406
376
 
407
- module_eval(<<'.,.,', 'parser.y', 65)
408
- def _reduce_18(val, _values, result)
409
- result = Node.new(:CLASS_CONDITION, [val[1]])
377
+ def _reduce_18(val, _values, result)
378
+ result = Node.new(:CLASS_CONDITION, [val[1]])
410
379
  result
411
- end
412
- .,.,
380
+ end
413
381
 
414
- module_eval(<<'.,.,', 'parser.y', 69)
415
- def _reduce_19(val, _values, result)
416
- result = Node.new(:ELEMENT_NAME,
382
+ def _reduce_19(val, _values, result)
383
+ result = Node.new(:ELEMENT_NAME,
417
384
  [[val.first, val.last].compact.join(':')]
418
385
  )
419
386
 
420
387
  result
421
- end
422
- .,.,
388
+ end
423
389
 
424
- module_eval(<<'.,.,', 'parser.y', 74)
425
- def _reduce_20(val, _values, result)
426
- name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
390
+ def _reduce_20(val, _values, result)
391
+ name = @namespaces.key?('xmlns') ? "xmlns:#{val.first}" : val.first
427
392
  result = Node.new(:ELEMENT_NAME, [name])
428
393
 
429
394
  result
430
- end
431
- .,.,
395
+ end
432
396
 
433
- module_eval(<<'.,.,', 'parser.y', 77)
434
- def _reduce_21(val, _values, result)
435
- result = Node.new(:ELEMENT_NAME, val)
397
+ def _reduce_21(val, _values, result)
398
+ result = Node.new(:ELEMENT_NAME, val)
436
399
  result
437
- end
438
- .,.,
400
+ end
439
401
 
440
- module_eval(<<'.,.,', 'parser.y', 80)
441
- def _reduce_22(val, _values, result)
442
- result = val[0]
402
+ def _reduce_22(val, _values, result)
403
+ result = val[0]
443
404
  result
444
- end
445
- .,.,
405
+ end
446
406
 
447
407
  # reduce 23 omitted
448
408
 
449
- module_eval(<<'.,.,', 'parser.y', 85)
450
- def _reduce_24(val, _values, result)
451
- result = Node.new(:ATTRIBUTE_CONDITION,
409
+ def _reduce_24(val, _values, result)
410
+ result = Node.new(:ATTRIBUTE_CONDITION,
452
411
  [Node.new(:ELEMENT_NAME, [val[1]])] + (val[2] || [])
453
412
  )
454
413
 
455
414
  result
456
- end
457
- .,.,
415
+ end
458
416
 
459
- module_eval(<<'.,.,', 'parser.y', 90)
460
- def _reduce_25(val, _values, result)
461
- result = Node.new(:ATTRIBUTE_CONDITION,
417
+ def _reduce_25(val, _values, result)
418
+ result = Node.new(:ATTRIBUTE_CONDITION,
462
419
  [val[1]] + (val[2] || [])
463
420
  )
464
421
 
465
422
  result
466
- end
467
- .,.,
423
+ end
468
424
 
469
- module_eval(<<'.,.,', 'parser.y', 95)
470
- def _reduce_26(val, _values, result)
471
- # Non standard, but hpricot supports it.
425
+ def _reduce_26(val, _values, result)
426
+ # Non standard, but hpricot supports it.
472
427
  result = Node.new(:PSEUDO_CLASS,
473
428
  [Node.new(:FUNCTION, ['nth-child(', val[1]])]
474
429
  )
475
430
 
476
431
  result
477
- end
478
- .,.,
432
+ end
479
433
 
480
- module_eval(<<'.,.,', 'parser.y', 103)
481
- def _reduce_27(val, _values, result)
482
- result = Node.new(:FUNCTION, [val.first.strip])
434
+ def _reduce_27(val, _values, result)
435
+ result = Node.new(:FUNCTION, [val.first.strip])
483
436
 
484
437
  result
485
- end
486
- .,.,
438
+ end
487
439
 
488
- module_eval(<<'.,.,', 'parser.y', 106)
489
- def _reduce_28(val, _values, result)
490
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
440
+ def _reduce_28(val, _values, result)
441
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
491
442
 
492
443
  result
493
- end
494
- .,.,
444
+ end
495
445
 
496
- module_eval(<<'.,.,', 'parser.y', 109)
497
- def _reduce_29(val, _values, result)
498
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
446
+ def _reduce_29(val, _values, result)
447
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
499
448
 
500
449
  result
501
- end
502
- .,.,
450
+ end
503
451
 
504
- module_eval(<<'.,.,', 'parser.y', 112)
505
- def _reduce_30(val, _values, result)
506
- result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
452
+ def _reduce_30(val, _values, result)
453
+ result = Node.new(:FUNCTION, [val.first.strip, val[1]].flatten)
507
454
 
508
455
  result
509
- end
510
- .,.,
456
+ end
511
457
 
512
- module_eval(<<'.,.,', 'parser.y', 116)
513
- def _reduce_31(val, _values, result)
514
- result = [val.first, val.last]
458
+ def _reduce_31(val, _values, result)
459
+ result = [val.first, val.last]
515
460
  result
516
- end
517
- .,.,
461
+ end
518
462
 
519
- module_eval(<<'.,.,', 'parser.y', 117)
520
- def _reduce_32(val, _values, result)
521
- result = [val.first, val.last]
463
+ def _reduce_32(val, _values, result)
464
+ result = [val.first, val.last]
522
465
  result
523
- end
524
- .,.,
466
+ end
525
467
 
526
- module_eval(<<'.,.,', 'parser.y', 118)
527
- def _reduce_33(val, _values, result)
528
- result = [val.first, val.last]
468
+ def _reduce_33(val, _values, result)
469
+ result = [val.first, val.last]
529
470
  result
530
- end
531
- .,.,
471
+ end
532
472
 
533
473
  # reduce 34 omitted
534
474
 
535
475
  # reduce 35 omitted
536
476
 
537
- module_eval(<<'.,.,', 'parser.y', 123)
538
- def _reduce_36(val, _values, result)
539
- if val[0] == 'even'
477
+ def _reduce_36(val, _values, result)
478
+ if val[0] == 'even'
540
479
  val = ["2","n","+","0"]
541
480
  result = Node.new(:AN_PLUS_B, val)
542
481
  elsif val[0] == 'odd'
@@ -551,24 +490,20 @@ module_eval(<<'.,.,', 'parser.y', 123)
551
490
  end
552
491
 
553
492
  result
554
- end
555
- .,.,
493
+ end
556
494
 
557
- module_eval(<<'.,.,', 'parser.y', 141)
558
- def _reduce_37(val, _values, result)
559
- if val[1] == 'n'
495
+ def _reduce_37(val, _values, result)
496
+ if val[1] == 'n'
560
497
  result = Node.new(:AN_PLUS_B, val)
561
498
  else
562
499
  raise Racc::ParseError, "parse error on IDENT '#{val[1]}'"
563
500
  end
564
501
 
565
502
  result
566
- end
567
- .,.,
503
+ end
568
504
 
569
- module_eval(<<'.,.,', 'parser.y', 147)
570
- def _reduce_38(val, _values, result)
571
- # n+3, -n+3
505
+ def _reduce_38(val, _values, result)
506
+ # n+3, -n+3
572
507
  if val[0] == 'n'
573
508
  val.unshift("1")
574
509
  result = Node.new(:AN_PLUS_B, val)
@@ -581,12 +516,10 @@ module_eval(<<'.,.,', 'parser.y', 147)
581
516
  end
582
517
 
583
518
  result
584
- end
585
- .,.,
519
+ end
586
520
 
587
- module_eval(<<'.,.,', 'parser.y', 161)
588
- def _reduce_39(val, _values, result)
589
- if val[1] == 'n'
521
+ def _reduce_39(val, _values, result)
522
+ if val[1] == 'n'
590
523
  val << "+"
591
524
  val << "0"
592
525
  result = Node.new(:AN_PLUS_B, val)
@@ -595,59 +528,46 @@ module_eval(<<'.,.,', 'parser.y', 161)
595
528
  end
596
529
 
597
530
  result
598
- end
599
- .,.,
531
+ end
600
532
 
601
- module_eval(<<'.,.,', 'parser.y', 172)
602
- def _reduce_40(val, _values, result)
603
- result = Node.new(:PSEUDO_CLASS, [val[1]])
533
+ def _reduce_40(val, _values, result)
534
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
604
535
 
605
536
  result
606
- end
607
- .,.,
537
+ end
608
538
 
609
- module_eval(<<'.,.,', 'parser.y', 174)
610
- def _reduce_41(val, _values, result)
611
- result = Node.new(:PSEUDO_CLASS, [val[1]])
539
+ def _reduce_41(val, _values, result)
540
+ result = Node.new(:PSEUDO_CLASS, [val[1]])
612
541
  result
613
- end
614
- .,.,
542
+ end
615
543
 
616
544
  # reduce 42 omitted
617
545
 
618
546
  # reduce 43 omitted
619
547
 
620
- module_eval(<<'.,.,', 'parser.y', 182)
621
- def _reduce_44(val, _values, result)
622
- result = Node.new(:COMBINATOR, val)
548
+ def _reduce_44(val, _values, result)
549
+ result = Node.new(:COMBINATOR, val)
623
550
 
624
551
  result
625
- end
626
- .,.,
552
+ end
627
553
 
628
- module_eval(<<'.,.,', 'parser.y', 185)
629
- def _reduce_45(val, _values, result)
630
- result = Node.new(:COMBINATOR, val)
554
+ def _reduce_45(val, _values, result)
555
+ result = Node.new(:COMBINATOR, val)
631
556
 
632
557
  result
633
- end
634
- .,.,
558
+ end
635
559
 
636
- module_eval(<<'.,.,', 'parser.y', 188)
637
- def _reduce_46(val, _values, result)
638
- result = Node.new(:COMBINATOR, val)
560
+ def _reduce_46(val, _values, result)
561
+ result = Node.new(:COMBINATOR, val)
639
562
 
640
563
  result
641
- end
642
- .,.,
564
+ end
643
565
 
644
- module_eval(<<'.,.,', 'parser.y', 191)
645
- def _reduce_47(val, _values, result)
646
- result = Node.new(:COMBINATOR, val)
566
+ def _reduce_47(val, _values, result)
567
+ result = Node.new(:COMBINATOR, val)
647
568
 
648
569
  result
649
- end
650
- .,.,
570
+ end
651
571
 
652
572
  # reduce 48 omitted
653
573
 
@@ -657,85 +577,63 @@ module_eval(<<'.,.,', 'parser.y', 191)
657
577
 
658
578
  # reduce 51 omitted
659
579
 
660
- module_eval(<<'.,.,', 'parser.y', 199)
661
- def _reduce_52(val, _values, result)
662
- result = Node.new(:ID, val)
580
+ def _reduce_52(val, _values, result)
581
+ result = Node.new(:ID, val)
663
582
  result
664
- end
665
- .,.,
583
+ end
666
584
 
667
- module_eval(<<'.,.,', 'parser.y', 202)
668
- def _reduce_53(val, _values, result)
669
- result = [val.first, val[1]]
585
+ def _reduce_53(val, _values, result)
586
+ result = [val.first, val[1]]
670
587
  result
671
- end
672
- .,.,
588
+ end
673
589
 
674
- module_eval(<<'.,.,', 'parser.y', 203)
675
- def _reduce_54(val, _values, result)
676
- result = [val.first, val[1]]
590
+ def _reduce_54(val, _values, result)
591
+ result = [val.first, val[1]]
677
592
  result
678
- end
679
- .,.,
593
+ end
680
594
 
681
595
  # reduce 55 omitted
682
596
 
683
- module_eval(<<'.,.,', 'parser.y', 207)
684
- def _reduce_56(val, _values, result)
685
- result = :equal
597
+ def _reduce_56(val, _values, result)
598
+ result = :equal
686
599
  result
687
- end
688
- .,.,
600
+ end
689
601
 
690
- module_eval(<<'.,.,', 'parser.y', 208)
691
- def _reduce_57(val, _values, result)
692
- result = :prefix_match
602
+ def _reduce_57(val, _values, result)
603
+ result = :prefix_match
693
604
  result
694
- end
695
- .,.,
605
+ end
696
606
 
697
- module_eval(<<'.,.,', 'parser.y', 209)
698
- def _reduce_58(val, _values, result)
699
- result = :suffix_match
607
+ def _reduce_58(val, _values, result)
608
+ result = :suffix_match
700
609
  result
701
- end
702
- .,.,
610
+ end
703
611
 
704
- module_eval(<<'.,.,', 'parser.y', 210)
705
- def _reduce_59(val, _values, result)
706
- result = :substring_match
612
+ def _reduce_59(val, _values, result)
613
+ result = :substring_match
707
614
  result
708
- end
709
- .,.,
615
+ end
710
616
 
711
- module_eval(<<'.,.,', 'parser.y', 211)
712
- def _reduce_60(val, _values, result)
713
- result = :not_equal
617
+ def _reduce_60(val, _values, result)
618
+ result = :not_equal
714
619
  result
715
- end
716
- .,.,
620
+ end
717
621
 
718
- module_eval(<<'.,.,', 'parser.y', 212)
719
- def _reduce_61(val, _values, result)
720
- result = :includes
622
+ def _reduce_61(val, _values, result)
623
+ result = :includes
721
624
  result
722
- end
723
- .,.,
625
+ end
724
626
 
725
- module_eval(<<'.,.,', 'parser.y', 213)
726
- def _reduce_62(val, _values, result)
727
- result = :dash_match
627
+ def _reduce_62(val, _values, result)
628
+ result = :dash_match
728
629
  result
729
- end
730
- .,.,
630
+ end
731
631
 
732
- module_eval(<<'.,.,', 'parser.y', 217)
733
- def _reduce_63(val, _values, result)
734
- result = Node.new(:NOT, [val[1]])
632
+ def _reduce_63(val, _values, result)
633
+ result = Node.new(:NOT, [val[1]])
735
634
 
736
635
  result
737
- end
738
- .,.,
636
+ end
739
637
 
740
638
  # reduce 64 omitted
741
639
 
@@ -1,8 +1,8 @@
1
- #
1
+ #--
2
2
  # DO NOT MODIFY!!!!
3
- # This file is automatically generated by rex 1.0.1
3
+ # This file is automatically generated by rex 1.0.3
4
4
  # from lexical definition file "lib/nokogiri/css/tokenizer.rex".
5
- #
5
+ #++
6
6
 
7
7
  module Nokogiri
8
8
  module CSS
@@ -122,7 +122,7 @@ class GeneratedTokenizer < GeneratedParser
122
122
  when (text = ss.scan(/[\s\t\r\n\f]+/))
123
123
  @rex_tokens.push action { [:S, text] }
124
124
 
125
- when (text = ss.scan(/"([^\n\r\f"]|\\n|\r\n|\r|\f|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9A-Fa-f])*"|'([^\n\r\f']|\\n|\r\n|\r|\f|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9A-Fa-f])*'/))
125
+ when (text = ss.scan(/"([^\n\r\f"]|\n|\r\n|\r|\f|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9A-Fa-f])*"|'([^\n\r\f']|\n|\r\n|\r|\f|[^\0-\177]|\\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?|\\[^\n\r\f0-9A-Fa-f])*'/))
126
126
  @rex_tokens.push action { [:STRING, text] }
127
127
 
128
128
  when (text = ss.scan(/./))
@@ -5,17 +5,17 @@ class GeneratedTokenizer < GeneratedParser
5
5
  macro
6
6
  nl \n|\r\n|\r|\f
7
7
  w [\s\r\n\f]*
8
- nonascii [^\\\\0-\\\\177]
8
+ nonascii [^\0-\177]
9
9
  num -?([0-9]+|[0-9]*\.[0-9]+)
10
- unicode \\\\\\\\\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?
10
+ unicode \\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?
11
11
 
12
- escape {unicode}|\\\\\\\[^\n\r\f0-9A-Fa-f]
12
+ escape {unicode}|\\[^\n\r\f0-9A-Fa-f]
13
13
  nmchar [_A-Za-z0-9-]|{nonascii}|{escape}
14
14
  nmstart [_A-Za-z]|{nonascii}|{escape}
15
15
  ident [-@]?({nmstart})({nmchar})*
16
16
  name ({nmchar})+
17
- string1 "([^\n\r\f"]|\\{nl}|{nonascii}|{escape})*"
18
- string2 '([^\n\r\f']|\\{nl}|{nonascii}|{escape})*'
17
+ string1 "([^\n\r\f"]|{nl}|{nonascii}|{escape})*"
18
+ string2 '([^\n\r\f']|{nl}|{nonascii}|{escape})*'
19
19
  string {string1}|{string2}
20
20
 
21
21
  rule
@@ -29,6 +29,10 @@ module Nokogiri
29
29
  ns.cstruct = node_struct
30
30
 
31
31
  ns.cstruct.ruby_node = ns
32
+
33
+ cache = ns.document.instance_variable_get(:@node_cache)
34
+ cache << ns
35
+
32
36
  ns
33
37
  end
34
38
  end
@@ -376,5 +376,3 @@ module Nokogiri
376
376
  end
377
377
  end
378
378
  end
379
-
380
- class Nokogiri::XML::Element < Nokogiri::XML::Node ; end
@@ -1,6 +1,6 @@
1
1
  module Nokogiri
2
2
  # The version of Nokogiri you are using
3
- VERSION = '1.3.0'
3
+ VERSION = '1.3.1'
4
4
 
5
5
  # More complete version information about libxml
6
6
  VERSION_INFO = {}
@@ -19,8 +19,12 @@ module Nokogiri
19
19
  end
20
20
  end
21
21
 
22
+ def self.uses_libxml? # :nodoc:
23
+ !Nokogiri::VERSION_INFO['libxml'].nil?
24
+ end
25
+
22
26
  def self.ffi? # :nodoc:
23
- Nokogiri::VERSION_INFO['libxml']['binding'] == 'ffi'
27
+ uses_libxml? && Nokogiri::VERSION_INFO['libxml']['binding'] == 'ffi'
24
28
  end
25
29
 
26
30
  def self.is_2_6_16? # :nodoc:
@@ -12,6 +12,7 @@ module Nokogiri
12
12
  attr_accessor :errors
13
13
 
14
14
  def initialize *args
15
+ @decorators = nil
15
16
  end
16
17
 
17
18
  # The name of this document. Always returns "document"
@@ -324,7 +324,7 @@ module Nokogiri
324
324
  def namespaces
325
325
  Hash[*namespace_definitions.map { |nd|
326
326
  key = ['xmlns', nd.prefix].compact.join(':')
327
- if defined?(Encoding) && document.encoding
327
+ if RUBY_VERSION >= '1.9' && document.encoding
328
328
  begin
329
329
  key.force_encoding document.encoding
330
330
  rescue ArgumentError
@@ -743,3 +743,5 @@ Please change to Node#write_xml_to(io, :encoding => #{options})
743
743
  end
744
744
  end
745
745
  end
746
+
747
+ class Nokogiri::XML::Element < Nokogiri::XML::Node ; end
@@ -1,3 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
1
3
  require File.expand_path(File.join(File.dirname(__FILE__), '..', "helper"))
2
4
 
3
5
  module Nokogiri
@@ -8,6 +10,11 @@ module Nokogiri
8
10
  @scanner = Nokogiri::CSS::Tokenizer.new
9
11
  end
10
12
 
13
+ def test_unicode
14
+ @scanner.scan("a日本語")
15
+ assert_tokens([[:IDENT, 'a日本語']], @scanner)
16
+ end
17
+
11
18
  def test_tokenize_bad_single_quote
12
19
  @scanner.scan("'")
13
20
  assert_tokens([["'", "'"]], @scanner)
@@ -71,7 +71,7 @@ class TestReader < Nokogiri::TestCase
71
71
  </x>
72
72
  eoxml
73
73
  reader = Nokogiri::XML::Reader(xml)
74
- if Nokogiri::VERSION_INFO['libxml']['binding'] == 'ffi'
74
+ if Nokogiri.ffi?
75
75
  assert_not_nil reader.source
76
76
  assert reader.source.is_a?(FFI::MemoryPointer)
77
77
  else
@@ -11,6 +11,11 @@ module Nokogiri
11
11
  eoxml
12
12
  end
13
13
 
14
+ def test_namespace_is_in_node_cache
15
+ node = @xml.root.namespace
16
+ assert @xml.instance_variable_get(:@node_cache).include?(node)
17
+ end
18
+
14
19
  def test_namespace_node_prefix
15
20
  namespaces = @xml.root.namespace_definitions
16
21
  assert_equal [nil, 'foo'], namespaces.map { |x| x.prefix }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Patterson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-05-30 00:00:00 -07:00
13
+ date: 2009-06-07 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -24,7 +24,7 @@ dependencies:
24
24
  version: "0"
25
25
  version:
26
26
  - !ruby/object:Gem::Dependency
27
- name: tenderlove-frex
27
+ name: rexical
28
28
  type: :development
29
29
  version_requirement:
30
30
  version_requirements: !ruby/object:Gem::Requirement
@@ -53,7 +53,10 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.12.2
55
55
  version:
56
- description: "Nokogiri (\xE9\x8B\xB8) is an HTML, XML, SAX, and Reader parser."
56
+ description: "Nokogiri (\xE9\x8B\xB8) is an HTML, XML, SAX, and Reader parser. Among Nokogiri's\n\
57
+ many features is the ability to search documents via XPath or CSS3 selectors.\n\n\
58
+ XML is like violence - if it doesn\xE2\x80\x99t solve your problems, you are not using\n\
59
+ enough of it."
57
60
  email:
58
61
  - aaronp@rubyforge.org
59
62
  - mike.dalessio@gmail.com
@@ -344,7 +347,7 @@ rubyforge_project: nokogiri
344
347
  rubygems_version: 1.3.3
345
348
  signing_key:
346
349
  specification_version: 3
347
- summary: "Nokogiri (\xE9\x8B\xB8) is an HTML, XML, SAX, and Reader parser."
350
+ summary: "Nokogiri (\xE9\x8B\xB8) is an HTML, XML, SAX, and Reader parser"
348
351
  test_files:
349
352
  - test/css/test_nthiness.rb
350
353
  - test/css/test_parser.rb