nokogiri 1.3.0-x86-mswin32 → 1.3.1-x86-mswin32
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.
- data/CHANGELOG.ja.rdoc +28 -22
- data/CHANGELOG.rdoc +7 -0
- data/README.ja.rdoc +5 -1
- data/README.rdoc +5 -1
- data/Rakefile +8 -8
- data/ext/nokogiri/extconf.rb +27 -4
- data/ext/nokogiri/nokogiri.h +1 -0
- data/ext/nokogiri/xml_namespace.c +5 -0
- data/ext/nokogiri/xml_relax_ng.c +14 -14
- data/ext/nokogiri/xml_schema.c +14 -14
- data/lib/nokogiri/1.8/nokogiri.so +0 -0
- data/lib/nokogiri/1.9/nokogiri.so +0 -0
- data/lib/nokogiri/css/generated_parser.rb +153 -255
- data/lib/nokogiri/css/generated_tokenizer.rb +4 -4
- data/lib/nokogiri/css/tokenizer.rex +5 -5
- data/lib/nokogiri/ffi/xml/namespace.rb +4 -0
- data/lib/nokogiri/ffi/xml/node.rb +0 -2
- data/lib/nokogiri/version.rb +6 -2
- data/lib/nokogiri/xml/node.rb +3 -1
- data/test/css/test_tokenizer.rb +7 -0
- data/test/test_reader.rb +1 -1
- data/test/xml/test_namespace.rb +5 -0
- metadata +8 -5
data/CHANGELOG.ja.rdoc
CHANGED
@@ -1,33 +1,39 @@
|
|
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
|
-
*
|
7
|
-
|
8
|
-
* Nokogiri::XML::Node#<=> はドキュメントの位置によりノードを比較するように
|
12
|
+
* Builderがブロックの引数の数に応じてスコープが定まるようになった
|
13
|
+
* Builderがアンダースコアで終わるメソッドをtagzと同様にサポートするようになった
|
14
|
+
* Nokogiri::XML::Node#<=> がドキュメントの位置によりノードを比較するように
|
9
15
|
なった
|
10
|
-
* Nokogiri::XML::Node#matches
|
11
|
-
|
12
|
-
* Nokogiri::XML::Node#ancestors
|
13
|
-
* Nokogiri::XML::Node#ancestors
|
16
|
+
* Nokogiri::XML::Node#matches?が与えられたセレクタ内でノードがあればtrue
|
17
|
+
を返すようになった
|
18
|
+
* Nokogiri::XML::Node#ancestors がNokogiri::XML::NodeSetオブジェクトを返すようになった
|
19
|
+
* Nokogiri::XML::Node#ancestorsがオプションのセレクタに対応する親をマッチする
|
14
20
|
ようになった
|
15
|
-
* Nokogiri::HTML::Document#meta_encoding
|
21
|
+
* Nokogiri::HTML::Document#meta_encoding がメタデータのエンコードを返すように
|
16
22
|
なった
|
17
|
-
* Nokogiri::HTML::Document#meta_encoding=
|
18
|
-
|
19
|
-
* Nokogiri::XML::Document#encoding=
|
20
|
-
|
21
|
-
* Nokogiri::XML::Schema
|
22
|
-
|
23
|
-
* Nokogiri::XML::RelaxNG
|
24
|
-
|
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
|
+
記述されているかを検証できるようになった
|
25
31
|
* Nokogiri::HTML::ElementDescription はHTML要素の説明フェッチ動作するよう
|
26
32
|
になった
|
27
33
|
* Nokogiri::XML::Node#descriptionは ノードの説明をフェッチ動作するよう
|
28
34
|
になった
|
29
35
|
* Nokogiri::XML::Node#accept は Visitor パターンを実行するようになった
|
30
|
-
* bin/nokogiri
|
36
|
+
* 簡単にドキュメントを解析するコマンド bin/nokogiri を追加
|
31
37
|
(Yataka HARAさんに感謝感激)
|
32
38
|
* Nokogiri::XML::NodeSetが更にArrayとEnumerableの演算を
|
33
39
|
サポートするようになった:
|
@@ -43,7 +49,7 @@
|
|
43
49
|
|
44
50
|
* nilがCDATAsonstructorに渡される際の問題を修正
|
45
51
|
* Fragment メソッドが正規表現を抜け出させるようになった
|
46
|
-
(
|
52
|
+
(Joelさんに感謝感激) (LH #73)
|
47
53
|
* Builder スコープのLH #61, LH #74, LH #70に関しての様々な問題を修正
|
48
54
|
* 名前空間を付け加える時、名前空間が LH#78より除去されてしまう問題を修正
|
49
55
|
* 連結しないノードが発生し、再育成してしまう問題を修正(GH#22)
|
@@ -69,13 +75,13 @@
|
|
69
75
|
|
70
76
|
* Nokogiri は soap4r と一緒に使う事が可能。(XSD::XMLParser::Nokogiri 参照)
|
71
77
|
* Nokogiri::XML::Node#inner_html= はノードの中のHTMLをセット出来る
|
72
|
-
* Nokogiri
|
78
|
+
* NokogiriのBuilderのインタフェースの改良
|
73
79
|
* Nokogiri::XML::Node#swap は、現在のノードに新しいhtmlを交換する事が出来る
|
74
80
|
|
75
81
|
|
76
82
|
* バグの修正
|
77
83
|
|
78
|
-
*
|
84
|
+
* BuilderAPIのタグのネスティングを修正 (LH #41)
|
79
85
|
* Nokogiri::HTML.fragment はテキストだけのノードを適切に扱う事が出来る(LH #43)
|
80
86
|
* Nokogiri::XML::Node#before はテキストノードのはじめに挿入する事が出来る (LH #44)
|
81
87
|
* Nokogiri::XML::Node#after はテキストノードの文末に挿入する事が出来る
|
@@ -200,7 +206,7 @@
|
|
200
206
|
|
201
207
|
* 弱参照からドキュメント参照へのメモリー管理の変換
|
202
208
|
* メモリリークに接続
|
203
|
-
*
|
209
|
+
* Builderブロックが取り囲んでいるコンテキストから
|
204
210
|
メソッドの呼び出しをする事が出来る
|
205
211
|
|
206
212
|
=== 1.0.3
|
data/CHANGELOG.rdoc
CHANGED
data/README.ja.rdoc
CHANGED
@@ -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
|
|
data/README.rdoc
CHANGED
@@ -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 << "
|
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"] }
|
@@ -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 "
|
130
|
+
sh "rex --independent -o #{t.name} #{t.prerequisites.first}"
|
131
131
|
rescue
|
132
|
-
abort "need
|
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
|
194
|
-
task :deps => %w(
|
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 :
|
201
|
-
sh "sudo gem install
|
200
|
+
task :rexical do
|
201
|
+
sh "sudo gem install rexical"
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
data/ext/nokogiri/extconf.rb
CHANGED
@@ -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
|
-
|
26
|
-
|
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
|
-
|
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
|
-
|
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"
|
data/ext/nokogiri/nokogiri.h
CHANGED
@@ -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;
|
data/ext/nokogiri/xml_relax_ng.c
CHANGED
@@ -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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
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
|
|
data/ext/nokogiri/xml_schema.c
CHANGED
@@ -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
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
|
Binary file
|
Binary file
|
@@ -271,78 +271,59 @@ Racc_debug_parser = false
|
|
271
271
|
|
272
272
|
# reduce 0 omitted
|
273
273
|
|
274
|
-
|
275
|
-
|
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
|
-
|
280
|
-
.,.,
|
278
|
+
end
|
281
279
|
|
282
|
-
|
283
|
-
|
284
|
-
result = val.flatten
|
280
|
+
def _reduce_2(val, _values, result)
|
281
|
+
result = val.flatten
|
285
282
|
result
|
286
|
-
|
287
|
-
.,.,
|
283
|
+
end
|
288
284
|
|
289
|
-
|
290
|
-
|
291
|
-
result = :DIRECT_ADJACENT_SELECTOR
|
285
|
+
def _reduce_3(val, _values, result)
|
286
|
+
result = :DIRECT_ADJACENT_SELECTOR
|
292
287
|
result
|
293
|
-
|
294
|
-
.,.,
|
288
|
+
end
|
295
289
|
|
296
|
-
|
297
|
-
|
298
|
-
result = :CHILD_SELECTOR
|
290
|
+
def _reduce_4(val, _values, result)
|
291
|
+
result = :CHILD_SELECTOR
|
299
292
|
result
|
300
|
-
|
301
|
-
.,.,
|
293
|
+
end
|
302
294
|
|
303
|
-
|
304
|
-
|
305
|
-
result = :PRECEDING_SELECTOR
|
295
|
+
def _reduce_5(val, _values, result)
|
296
|
+
result = :PRECEDING_SELECTOR
|
306
297
|
result
|
307
|
-
|
308
|
-
.,.,
|
298
|
+
end
|
309
299
|
|
310
|
-
|
311
|
-
|
312
|
-
result = :DESCENDANT_SELECTOR
|
300
|
+
def _reduce_6(val, _values, result)
|
301
|
+
result = :DESCENDANT_SELECTOR
|
313
302
|
result
|
314
|
-
|
315
|
-
.,.,
|
303
|
+
end
|
316
304
|
|
317
|
-
|
318
|
-
|
319
|
-
result = :DESCENDANT_SELECTOR
|
305
|
+
def _reduce_7(val, _values, result)
|
306
|
+
result = :DESCENDANT_SELECTOR
|
320
307
|
result
|
321
|
-
|
322
|
-
.,.,
|
308
|
+
end
|
323
309
|
|
324
|
-
|
325
|
-
|
326
|
-
result = :CHILD_SELECTOR
|
310
|
+
def _reduce_8(val, _values, result)
|
311
|
+
result = :CHILD_SELECTOR
|
327
312
|
result
|
328
|
-
|
329
|
-
.,.,
|
313
|
+
end
|
330
314
|
|
331
|
-
|
332
|
-
|
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
|
-
|
341
|
-
.,.,
|
323
|
+
end
|
342
324
|
|
343
|
-
|
344
|
-
|
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
|
-
|
354
|
-
.,.,
|
334
|
+
end
|
355
335
|
|
356
|
-
|
357
|
-
|
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
|
-
|
362
|
-
.,.,
|
340
|
+
end
|
363
341
|
|
364
342
|
# reduce 12 omitted
|
365
343
|
|
366
|
-
|
367
|
-
|
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
|
-
|
372
|
-
.,.,
|
348
|
+
end
|
373
349
|
|
374
|
-
|
375
|
-
|
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
|
-
|
385
|
-
.,.,
|
359
|
+
end
|
386
360
|
|
387
|
-
|
388
|
-
|
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
|
-
|
395
|
-
.,.,
|
367
|
+
end
|
396
368
|
|
397
|
-
|
398
|
-
|
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
|
-
|
403
|
-
.,.,
|
373
|
+
end
|
404
374
|
|
405
375
|
# reduce 17 omitted
|
406
376
|
|
407
|
-
|
408
|
-
|
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
|
-
|
412
|
-
.,.,
|
380
|
+
end
|
413
381
|
|
414
|
-
|
415
|
-
|
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
|
-
|
422
|
-
.,.,
|
388
|
+
end
|
423
389
|
|
424
|
-
|
425
|
-
|
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
|
-
|
431
|
-
.,.,
|
395
|
+
end
|
432
396
|
|
433
|
-
|
434
|
-
|
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
|
-
|
438
|
-
.,.,
|
400
|
+
end
|
439
401
|
|
440
|
-
|
441
|
-
|
442
|
-
result = val[0]
|
402
|
+
def _reduce_22(val, _values, result)
|
403
|
+
result = val[0]
|
443
404
|
result
|
444
|
-
|
445
|
-
.,.,
|
405
|
+
end
|
446
406
|
|
447
407
|
# reduce 23 omitted
|
448
408
|
|
449
|
-
|
450
|
-
|
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
|
-
|
457
|
-
.,.,
|
415
|
+
end
|
458
416
|
|
459
|
-
|
460
|
-
|
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
|
-
|
467
|
-
.,.,
|
423
|
+
end
|
468
424
|
|
469
|
-
|
470
|
-
|
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
|
-
|
478
|
-
.,.,
|
432
|
+
end
|
479
433
|
|
480
|
-
|
481
|
-
|
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
|
-
|
486
|
-
.,.,
|
438
|
+
end
|
487
439
|
|
488
|
-
|
489
|
-
|
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
|
-
|
494
|
-
.,.,
|
444
|
+
end
|
495
445
|
|
496
|
-
|
497
|
-
|
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
|
-
|
502
|
-
.,.,
|
450
|
+
end
|
503
451
|
|
504
|
-
|
505
|
-
|
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
|
-
|
510
|
-
.,.,
|
456
|
+
end
|
511
457
|
|
512
|
-
|
513
|
-
|
514
|
-
result = [val.first, val.last]
|
458
|
+
def _reduce_31(val, _values, result)
|
459
|
+
result = [val.first, val.last]
|
515
460
|
result
|
516
|
-
|
517
|
-
.,.,
|
461
|
+
end
|
518
462
|
|
519
|
-
|
520
|
-
|
521
|
-
result = [val.first, val.last]
|
463
|
+
def _reduce_32(val, _values, result)
|
464
|
+
result = [val.first, val.last]
|
522
465
|
result
|
523
|
-
|
524
|
-
.,.,
|
466
|
+
end
|
525
467
|
|
526
|
-
|
527
|
-
|
528
|
-
result = [val.first, val.last]
|
468
|
+
def _reduce_33(val, _values, result)
|
469
|
+
result = [val.first, val.last]
|
529
470
|
result
|
530
|
-
|
531
|
-
.,.,
|
471
|
+
end
|
532
472
|
|
533
473
|
# reduce 34 omitted
|
534
474
|
|
535
475
|
# reduce 35 omitted
|
536
476
|
|
537
|
-
|
538
|
-
|
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
|
-
|
555
|
-
.,.,
|
493
|
+
end
|
556
494
|
|
557
|
-
|
558
|
-
|
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
|
-
|
567
|
-
.,.,
|
503
|
+
end
|
568
504
|
|
569
|
-
|
570
|
-
|
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
|
-
|
585
|
-
.,.,
|
519
|
+
end
|
586
520
|
|
587
|
-
|
588
|
-
|
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
|
-
|
599
|
-
.,.,
|
531
|
+
end
|
600
532
|
|
601
|
-
|
602
|
-
|
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
|
-
|
607
|
-
.,.,
|
537
|
+
end
|
608
538
|
|
609
|
-
|
610
|
-
|
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
|
-
|
614
|
-
.,.,
|
542
|
+
end
|
615
543
|
|
616
544
|
# reduce 42 omitted
|
617
545
|
|
618
546
|
# reduce 43 omitted
|
619
547
|
|
620
|
-
|
621
|
-
|
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
|
-
|
626
|
-
.,.,
|
552
|
+
end
|
627
553
|
|
628
|
-
|
629
|
-
|
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
|
-
|
634
|
-
.,.,
|
558
|
+
end
|
635
559
|
|
636
|
-
|
637
|
-
|
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
|
-
|
642
|
-
.,.,
|
564
|
+
end
|
643
565
|
|
644
|
-
|
645
|
-
|
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
|
-
|
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
|
-
|
661
|
-
|
662
|
-
result = Node.new(:ID, val)
|
580
|
+
def _reduce_52(val, _values, result)
|
581
|
+
result = Node.new(:ID, val)
|
663
582
|
result
|
664
|
-
|
665
|
-
.,.,
|
583
|
+
end
|
666
584
|
|
667
|
-
|
668
|
-
|
669
|
-
result = [val.first, val[1]]
|
585
|
+
def _reduce_53(val, _values, result)
|
586
|
+
result = [val.first, val[1]]
|
670
587
|
result
|
671
|
-
|
672
|
-
.,.,
|
588
|
+
end
|
673
589
|
|
674
|
-
|
675
|
-
|
676
|
-
result = [val.first, val[1]]
|
590
|
+
def _reduce_54(val, _values, result)
|
591
|
+
result = [val.first, val[1]]
|
677
592
|
result
|
678
|
-
|
679
|
-
.,.,
|
593
|
+
end
|
680
594
|
|
681
595
|
# reduce 55 omitted
|
682
596
|
|
683
|
-
|
684
|
-
|
685
|
-
result = :equal
|
597
|
+
def _reduce_56(val, _values, result)
|
598
|
+
result = :equal
|
686
599
|
result
|
687
|
-
|
688
|
-
.,.,
|
600
|
+
end
|
689
601
|
|
690
|
-
|
691
|
-
|
692
|
-
result = :prefix_match
|
602
|
+
def _reduce_57(val, _values, result)
|
603
|
+
result = :prefix_match
|
693
604
|
result
|
694
|
-
|
695
|
-
.,.,
|
605
|
+
end
|
696
606
|
|
697
|
-
|
698
|
-
|
699
|
-
result = :suffix_match
|
607
|
+
def _reduce_58(val, _values, result)
|
608
|
+
result = :suffix_match
|
700
609
|
result
|
701
|
-
|
702
|
-
.,.,
|
610
|
+
end
|
703
611
|
|
704
|
-
|
705
|
-
|
706
|
-
result = :substring_match
|
612
|
+
def _reduce_59(val, _values, result)
|
613
|
+
result = :substring_match
|
707
614
|
result
|
708
|
-
|
709
|
-
.,.,
|
615
|
+
end
|
710
616
|
|
711
|
-
|
712
|
-
|
713
|
-
result = :not_equal
|
617
|
+
def _reduce_60(val, _values, result)
|
618
|
+
result = :not_equal
|
714
619
|
result
|
715
|
-
|
716
|
-
.,.,
|
620
|
+
end
|
717
621
|
|
718
|
-
|
719
|
-
|
720
|
-
result = :includes
|
622
|
+
def _reduce_61(val, _values, result)
|
623
|
+
result = :includes
|
721
624
|
result
|
722
|
-
|
723
|
-
.,.,
|
625
|
+
end
|
724
626
|
|
725
|
-
|
726
|
-
|
727
|
-
result = :dash_match
|
627
|
+
def _reduce_62(val, _values, result)
|
628
|
+
result = :dash_match
|
728
629
|
result
|
729
|
-
|
730
|
-
.,.,
|
630
|
+
end
|
731
631
|
|
732
|
-
|
733
|
-
|
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
|
-
|
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.
|
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"]
|
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 [
|
8
|
+
nonascii [^\0-\177]
|
9
9
|
num -?([0-9]+|[0-9]*\.[0-9]+)
|
10
|
-
unicode
|
10
|
+
unicode \\[0-9A-Fa-f]{1,6}(\r\n|[\s\n\r\t\f])?
|
11
11
|
|
12
|
-
escape {unicode}
|
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"]
|
18
|
-
string2 '([^\n\r\f']
|
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
|
data/lib/nokogiri/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Nokogiri
|
2
2
|
# The version of Nokogiri you are using
|
3
|
-
VERSION = '1.3.
|
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:
|
data/lib/nokogiri/xml/node.rb
CHANGED
@@ -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
|
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
|
data/test/css/test_tokenizer.rb
CHANGED
@@ -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)
|
data/test/test_reader.rb
CHANGED
@@ -71,7 +71,7 @@ class TestReader < Nokogiri::TestCase
|
|
71
71
|
</x>
|
72
72
|
eoxml
|
73
73
|
reader = Nokogiri::XML::Reader(xml)
|
74
|
-
if Nokogiri
|
74
|
+
if Nokogiri.ffi?
|
75
75
|
assert_not_nil reader.source
|
76
76
|
assert reader.source.is_a?(FFI::MemoryPointer)
|
77
77
|
else
|
data/test/xml/test_namespace.rb
CHANGED
@@ -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.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: x86-mswin32
|
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-06-
|
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:
|
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
|
@@ -352,7 +355,7 @@ rubyforge_project: nokogiri
|
|
352
355
|
rubygems_version: 1.3.3
|
353
356
|
signing_key:
|
354
357
|
specification_version: 3
|
355
|
-
summary: "Nokogiri (\xE9\x8B\xB8) is an HTML, XML, SAX, and Reader parser
|
358
|
+
summary: "Nokogiri (\xE9\x8B\xB8) is an HTML, XML, SAX, and Reader parser"
|
356
359
|
test_files:
|
357
360
|
- test/css/test_nthiness.rb
|
358
361
|
- test/css/test_parser.rb
|