nokogiri 1.0.0 → 1.6.8.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.
- checksums.yaml +7 -0
- data/.autotest +26 -0
- data/.cross_rubies +9 -0
- data/.editorconfig +17 -0
- data/.gemtest +0 -0
- data/.travis.yml +51 -0
- data/CHANGELOG.rdoc +1160 -0
- data/CONTRIBUTING.md +42 -0
- data/C_CODING_STYLE.rdoc +33 -0
- data/Gemfile +22 -0
- data/LICENSE.txt +31 -0
- data/Manifest.txt +284 -40
- data/README.md +166 -0
- data/ROADMAP.md +111 -0
- data/Rakefile +310 -199
- data/STANDARD_RESPONSES.md +47 -0
- data/Y_U_NO_GEMSPEC.md +155 -0
- data/appveyor.yml +22 -0
- data/bin/nokogiri +118 -0
- data/build_all +45 -0
- data/dependencies.yml +29 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +664 -34
- data/ext/nokogiri/html_document.c +120 -33
- data/ext/nokogiri/html_document.h +1 -1
- data/ext/nokogiri/html_element_description.c +279 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +32 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser_context.c +116 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/html_sax_push_parser.c +87 -0
- data/ext/nokogiri/html_sax_push_parser.h +9 -0
- data/ext/nokogiri/nokogiri.c +145 -0
- data/ext/nokogiri/nokogiri.h +131 -0
- data/ext/nokogiri/xml_attr.c +94 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +23 -19
- data/ext/nokogiri/xml_cdata.h +1 -1
- data/ext/nokogiri/xml_comment.c +69 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +501 -54
- data/ext/nokogiri/xml_document.h +14 -1
- data/ext/nokogiri/xml_document_fragment.c +48 -0
- data/ext/nokogiri/xml_document_fragment.h +10 -0
- data/ext/nokogiri/xml_dtd.c +109 -24
- data/ext/nokogiri/xml_dtd.h +3 -1
- data/ext/nokogiri/xml_element_content.c +123 -0
- data/ext/nokogiri/xml_element_content.h +10 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_element_decl.h +9 -0
- data/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/ext/nokogiri/xml_entity_decl.c +110 -0
- data/ext/nokogiri/xml_entity_decl.h +10 -0
- data/ext/nokogiri/xml_entity_reference.c +52 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +60 -0
- data/ext/nokogiri/xml_io.h +11 -0
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +117 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +1285 -315
- data/ext/nokogiri/xml_node.h +4 -6
- data/ext/nokogiri/xml_node_set.c +415 -54
- data/ext/nokogiri/xml_node_set.h +6 -2
- data/ext/nokogiri/xml_processing_instruction.c +56 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +316 -77
- data/ext/nokogiri/xml_reader.h +1 -1
- data/ext/nokogiri/xml_relax_ng.c +161 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +215 -80
- data/ext/nokogiri/xml_sax_parser.h +30 -1
- data/ext/nokogiri/xml_sax_parser_context.c +262 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +115 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +45 -175
- data/ext/nokogiri/xml_syntax_error.h +4 -2
- data/ext/nokogiri/xml_text.c +37 -14
- data/ext/nokogiri/xml_text.h +1 -1
- data/ext/nokogiri/xml_xpath_context.c +230 -13
- data/ext/nokogiri/xml_xpath_context.h +2 -1
- data/ext/nokogiri/xslt_stylesheet.c +196 -34
- data/ext/nokogiri/xslt_stylesheet.h +6 -1
- data/lib/nokogiri/css/node.rb +18 -61
- data/lib/nokogiri/css/parser.rb +725 -17
- data/lib/nokogiri/css/parser.y +126 -63
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +148 -5
- data/lib/nokogiri/css/tokenizer.rex +31 -39
- data/lib/nokogiri/css/xpath_visitor.rb +109 -51
- data/lib/nokogiri/css.rb +24 -3
- data/lib/nokogiri/decorators/slop.rb +42 -0
- data/lib/nokogiri/html/builder.rb +27 -1
- data/lib/nokogiri/html/document.rb +329 -3
- data/lib/nokogiri/html/document_fragment.rb +39 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +35 -4
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/html/sax/push_parser.rb +36 -0
- data/lib/nokogiri/html.rb +18 -76
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +106 -1
- data/lib/nokogiri/xml/attr.rb +14 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +395 -31
- data/lib/nokogiri/xml/cdata.rb +4 -2
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +267 -12
- data/lib/nokogiri/xml/document_fragment.rb +149 -0
- data/lib/nokogiri/xml/dtd.rb +27 -1
- data/lib/nokogiri/xml/element_content.rb +36 -0
- data/lib/nokogiri/xml/element_decl.rb +13 -0
- data/lib/nokogiri/xml/entity_decl.rb +19 -0
- data/lib/nokogiri/xml/namespace.rb +13 -0
- data/lib/nokogiri/xml/node/save_options.rb +61 -0
- data/lib/nokogiri/xml/node.rb +748 -109
- data/lib/nokogiri/xml/node_set.rb +200 -72
- data/lib/nokogiri/xml/parse_options.rb +120 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +102 -4
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax/document.rb +114 -2
- data/lib/nokogiri/xml/sax/parser.rb +97 -7
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/sax.rb +2 -7
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/searchable.rb +221 -0
- data/lib/nokogiri/xml/syntax_error.rb +27 -1
- data/lib/nokogiri/xml/text.rb +4 -1
- data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
- data/lib/nokogiri/xml/xpath.rb +4 -0
- data/lib/nokogiri/xml/xpath_context.rb +3 -1
- data/lib/nokogiri/xml.rb +45 -38
- data/lib/nokogiri/xslt/stylesheet.rb +19 -0
- data/lib/nokogiri/xslt.rb +47 -2
- data/lib/nokogiri.rb +117 -24
- data/lib/xsd/xmlparser/nokogiri.rb +102 -0
- data/patches/sort-patches-by-date +25 -0
- data/ports/archives/libxml2-2.9.4.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.29.tar.gz +0 -0
- data/suppressions/README.txt +1 -0
- data/suppressions/nokogiri_ree-1.8.7.358.supp +61 -0
- data/suppressions/nokogiri_ruby-1.8.7.370.supp +0 -0
- data/suppressions/nokogiri_ruby-1.9.2.320.supp +28 -0
- data/suppressions/nokogiri_ruby-1.9.3.327.supp +28 -0
- data/tasks/test.rb +100 -0
- data/test/css/test_nthiness.rb +73 -6
- data/test/css/test_parser.rb +184 -39
- data/test/css/test_tokenizer.rb +72 -19
- data/test/css/test_xpath_visitor.rb +44 -2
- data/test/decorators/test_slop.rb +20 -0
- data/test/files/2ch.html +108 -0
- data/test/files/GH_1042.html +18 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/atom.xml +344 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/metacharset.html +10 -0
- data/test/files/namespace_pressure_test.xml +1684 -0
- data/test/files/noencoding.html +47 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/saml/saml20assertion_schema.xsd +283 -0
- data/test/files/saml/saml20protocol_schema.xsd +302 -0
- data/test/files/saml/xenc_schema.xsd +146 -0
- data/test/files/saml/xmldsig_schema.xsd +318 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/shift_jis_no_charset.html +9 -0
- data/test/files/slow-xpath.xml +25509 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/test_document_url/bar.xml +2 -0
- data/test/files/test_document_url/document.dtd +4 -0
- data/test/files/test_document_url/document.xml +6 -0
- data/test/files/tlm.html +2 -1
- data/test/files/to_be_xincluded.xml +2 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/files/xinclude.xml +4 -0
- data/test/helper.rb +124 -13
- data/test/html/sax/test_parser.rb +118 -4
- data/test/html/sax/test_parser_context.rb +46 -0
- data/test/html/sax/test_push_parser.rb +87 -0
- data/test/html/test_builder.rb +94 -8
- data/test/html/test_document.rb +626 -11
- data/test/html/test_document_encoding.rb +145 -0
- data/test/html/test_document_fragment.rb +301 -0
- data/test/html/test_element_description.rb +105 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +212 -0
- data/test/html/test_node_encoding.rb +85 -0
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +14 -0
- data/test/namespaces/test_namespaces_aliased_default.rb +24 -0
- data/test/namespaces/test_namespaces_in_builder_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
- data/test/namespaces/test_namespaces_in_created_doc.rb +75 -0
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +80 -0
- data/test/namespaces/test_namespaces_preservation.rb +31 -0
- data/test/test_convert_xpath.rb +2 -47
- data/test/test_css_cache.rb +45 -0
- data/test/test_encoding_handler.rb +48 -0
- data/test/test_memory_leak.rb +156 -0
- data/test/test_nokogiri.rb +103 -1
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +293 -8
- data/test/xml/node/test_save_options.rb +28 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +309 -8
- data/test/xml/sax/test_parser_context.rb +115 -0
- data/test/xml/sax/test_push_parser.rb +157 -0
- data/test/xml/test_attr.rb +67 -0
- data/test/xml/test_attribute_decl.rb +86 -0
- data/test/xml/test_builder.rb +327 -2
- data/test/xml/test_c14n.rb +180 -0
- data/test/xml/test_cdata.rb +32 -2
- data/test/xml/test_comment.rb +40 -0
- data/test/xml/test_document.rb +846 -35
- data/test/xml/test_document_encoding.rb +31 -0
- data/test/xml/test_document_fragment.rb +271 -0
- data/test/xml/test_dtd.rb +153 -9
- data/test/xml/test_dtd_encoding.rb +31 -0
- data/test/xml/test_element_content.rb +56 -0
- data/test/xml/test_element_decl.rb +73 -0
- data/test/xml/test_entity_decl.rb +122 -0
- data/test/xml/test_entity_reference.rb +251 -0
- data/test/xml/test_namespace.rb +96 -0
- data/test/xml/test_node.rb +1126 -105
- data/test/xml/test_node_attributes.rb +115 -0
- data/test/xml/test_node_encoding.rb +69 -0
- data/test/xml/test_node_inheritance.rb +32 -0
- data/test/xml/test_node_reparenting.rb +549 -0
- data/test/xml/test_node_set.rb +668 -9
- data/test/xml/test_parse_options.rb +64 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader.rb +589 -0
- data/test/xml/test_reader_encoding.rb +134 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +142 -0
- data/test/xml/test_syntax_error.rb +30 -0
- data/test/xml/test_text.rb +49 -2
- data/test/xml/test_unparented_node.rb +440 -0
- data/test/xml/test_xinclude.rb +83 -0
- data/test/xml/test_xpath.rb +445 -0
- data/test/xslt/test_custom_functions.rb +133 -0
- data/test/xslt/test_exception_handling.rb +37 -0
- data/test_all +107 -0
- metadata +459 -115
- data/History.txt +0 -6
- data/README.ja.txt +0 -86
- data/README.txt +0 -87
- data/ext/nokogiri/html_sax_parser.c +0 -32
- data/ext/nokogiri/html_sax_parser.h +0 -11
- data/ext/nokogiri/native.c +0 -40
- data/ext/nokogiri/native.h +0 -51
- data/ext/nokogiri/xml_xpath.c +0 -46
- data/ext/nokogiri/xml_xpath.h +0 -11
- data/lib/nokogiri/css/generated_parser.rb +0 -653
- data/lib/nokogiri/css/generated_tokenizer.rb +0 -159
- data/lib/nokogiri/decorators/hpricot/node.rb +0 -58
- data/lib/nokogiri/decorators/hpricot/node_set.rb +0 -14
- data/lib/nokogiri/decorators/hpricot/xpath_visitor.rb +0 -17
- data/lib/nokogiri/decorators/hpricot.rb +0 -3
- data/lib/nokogiri/decorators.rb +0 -1
- data/lib/nokogiri/hpricot.rb +0 -47
- data/lib/nokogiri/xml/after_handler.rb +0 -18
- data/lib/nokogiri/xml/before_handler.rb +0 -32
- data/lib/nokogiri/xml/element.rb +0 -6
- data/lib/nokogiri/xml/entity_declaration.rb +0 -9
- data/nokogiri.gemspec +0 -34
- data/test/hpricot/files/basic.xhtml +0 -17
- data/test/hpricot/files/boingboing.html +0 -2266
- data/test/hpricot/files/cy0.html +0 -3653
- data/test/hpricot/files/immob.html +0 -400
- data/test/hpricot/files/pace_application.html +0 -1320
- data/test/hpricot/files/tenderlove.html +0 -16
- data/test/hpricot/files/uswebgen.html +0 -220
- data/test/hpricot/files/utf8.html +0 -1054
- data/test/hpricot/files/week9.html +0 -1723
- data/test/hpricot/files/why.xml +0 -19
- data/test/hpricot/load_files.rb +0 -7
- data/test/hpricot/test_alter.rb +0 -67
- data/test/hpricot/test_builder.rb +0 -27
- data/test/hpricot/test_parser.rb +0 -423
- data/test/hpricot/test_paths.rb +0 -15
- data/test/hpricot/test_preserved.rb +0 -78
- data/test/hpricot/test_xml.rb +0 -30
- data/test/test_reader.rb +0 -222
data/Rakefile
CHANGED
@@ -1,199 +1,289 @@
|
|
1
1
|
# -*- ruby -*-
|
2
|
-
|
3
2
|
require 'rubygems'
|
4
|
-
require '
|
3
|
+
require 'shellwords'
|
5
4
|
|
6
|
-
|
7
|
-
|
5
|
+
gem 'hoe'
|
6
|
+
require 'hoe'
|
7
|
+
Hoe.plugin :debugging
|
8
|
+
Hoe.plugin :git
|
9
|
+
Hoe.plugin :gemspec
|
10
|
+
Hoe.plugin :bundler
|
8
11
|
|
9
|
-
|
10
|
-
|
12
|
+
GENERATED_PARSER = "lib/nokogiri/css/parser.rb"
|
13
|
+
GENERATED_TOKENIZER = "lib/nokogiri/css/tokenizer.rb"
|
11
14
|
|
12
|
-
|
13
|
-
|
15
|
+
def java?
|
16
|
+
/java/ === RUBY_PLATFORM
|
17
|
+
end
|
14
18
|
|
15
|
-
|
19
|
+
ENV['LANG'] = "en_US.UTF-8" # UBUNTU 10.04, Y U NO DEFAULT TO UTF-8?
|
16
20
|
|
17
|
-
|
21
|
+
CrossRuby = Struct.new(:version, :host) {
|
22
|
+
def ver
|
23
|
+
@ver ||= version[/\A[^-]+/]
|
24
|
+
end
|
18
25
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
'ext/nokogiri/Makefile',
|
23
|
-
'ext/nokogiri/*.{o,so,bundle,a,log,dll}',
|
24
|
-
'ext/nokogiri/conftest.dSYM',
|
25
|
-
GENERATED_PARSER,
|
26
|
-
GENERATED_TOKENIZER,
|
27
|
-
'cross',
|
28
|
-
]
|
29
|
-
p.spec_extras = { :extensions => ["Rakefile"] }
|
30
|
-
end
|
26
|
+
def minor_ver
|
27
|
+
@minor_ver ||= ver[/\A\d\.\d(?=\.)/]
|
28
|
+
end
|
31
29
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
30
|
+
def api_ver_suffix
|
31
|
+
case minor_ver
|
32
|
+
when nil
|
33
|
+
raise "unsupported version: #{ver}"
|
34
|
+
when '1.9'
|
35
|
+
'191'
|
36
|
+
else
|
37
|
+
minor_ver.delete('.') << '0'
|
39
38
|
end
|
40
39
|
end
|
41
40
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
HOE.spec.extensions = []
|
52
|
-
f.write(HOE.spec.to_ruby)
|
41
|
+
def platform
|
42
|
+
@platform ||=
|
43
|
+
case host
|
44
|
+
when /\Ax86_64-/
|
45
|
+
'x64-mingw32'
|
46
|
+
when /\Ai[3-6]86-/
|
47
|
+
'x86-mingw32'
|
48
|
+
else
|
49
|
+
raise "unsupported host: #{host}"
|
53
50
|
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def tool(name)
|
54
|
+
(@binutils_prefix ||=
|
55
|
+
case platform
|
56
|
+
when 'x64-mingw32'
|
57
|
+
'x86_64-w64-mingw32-'
|
58
|
+
when 'x86-mingw32'
|
59
|
+
'i686-w64-mingw32-'
|
60
|
+
end) + name
|
61
|
+
end
|
62
|
+
|
63
|
+
def target
|
64
|
+
case platform
|
65
|
+
when 'x64-mingw32'
|
66
|
+
'pei-x86-64'
|
67
|
+
when 'x86-mingw32'
|
68
|
+
'pei-i386'
|
54
69
|
end
|
55
70
|
end
|
56
71
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
72
|
+
def libruby_dll
|
73
|
+
case platform
|
74
|
+
when 'x64-mingw32'
|
75
|
+
"x64-msvcrt-ruby#{api_ver_suffix}.dll"
|
76
|
+
when 'x86-mingw32'
|
77
|
+
"msvcrt-ruby#{api_ver_suffix}.dll"
|
62
78
|
end
|
63
79
|
end
|
64
80
|
|
65
|
-
|
66
|
-
|
81
|
+
def dlls
|
82
|
+
[
|
83
|
+
'kernel32.dll',
|
84
|
+
'msvcrt.dll',
|
85
|
+
'ws2_32.dll',
|
86
|
+
*(case
|
87
|
+
when ver >= '2.0.0'
|
88
|
+
'user32.dll'
|
89
|
+
end),
|
90
|
+
libruby_dll
|
91
|
+
]
|
92
|
+
end
|
93
|
+
}
|
94
|
+
|
95
|
+
CROSS_RUBIES = File.read('.cross_rubies').lines.flat_map { |line|
|
96
|
+
case line
|
97
|
+
when /\A([^#]+):([^#]+)/
|
98
|
+
CrossRuby.new($1, $2)
|
99
|
+
else
|
100
|
+
[]
|
101
|
+
end
|
102
|
+
}
|
67
103
|
|
68
|
-
|
69
|
-
task :coverage do
|
70
|
-
rm_rf "coverage"
|
71
|
-
sh "rcov -x Library -I lib:test #{Dir[*HOE.test_globs].join(' ')}"
|
72
|
-
end
|
104
|
+
ENV['RUBY_CC_VERSION'] ||= CROSS_RUBIES.map(&:ver).uniq.join(":")
|
73
105
|
|
74
|
-
|
75
|
-
|
76
|
-
|
106
|
+
HOE = Hoe.spec 'nokogiri' do
|
107
|
+
developer 'Aaron Patterson', 'aaronp@rubyforge.org'
|
108
|
+
developer 'Mike Dalessio', 'mike.dalessio@gmail.com'
|
109
|
+
developer 'Yoko Harada', 'yokolet@gmail.com'
|
110
|
+
developer 'Tim Elliott', 'tle@holymonkey.com'
|
111
|
+
developer 'Akinori MUSHA', 'knu@idaemons.org'
|
77
112
|
|
78
|
-
|
79
|
-
|
80
|
-
|
113
|
+
license "MIT"
|
114
|
+
|
115
|
+
self.readme_file = "README.md"
|
116
|
+
self.history_file = ['CHANGELOG', ENV['HLANG'], 'rdoc'].compact.join('.')
|
117
|
+
|
118
|
+
self.extra_rdoc_files = FileList['*.rdoc','ext/nokogiri/*.c']
|
81
119
|
|
82
|
-
|
83
|
-
|
84
|
-
|
120
|
+
|
121
|
+
self.clean_globs += [
|
122
|
+
'nokogiri.gemspec',
|
123
|
+
'lib/nokogiri/nokogiri.{bundle,jar,rb,so}',
|
124
|
+
'lib/nokogiri/[0-9].[0-9]'
|
125
|
+
]
|
126
|
+
self.clean_globs += Dir.glob("ports/*").reject { |d| d =~ %r{/archives$} }
|
127
|
+
|
128
|
+
unless java?
|
129
|
+
self.extra_deps += [
|
130
|
+
["mini_portile2", "~> 2.1.0"], # keep version in sync with extconf.rb
|
131
|
+
]
|
85
132
|
end
|
86
|
-
end
|
87
133
|
|
88
|
-
|
89
|
-
|
90
|
-
|
134
|
+
self.extra_dev_deps += [
|
135
|
+
["hoe-bundler", "~> 1.2.0"],
|
136
|
+
["hoe-debugging", "~> 1.2.1"],
|
137
|
+
["hoe-gemspec", "~> 1.0.0"],
|
138
|
+
["hoe-git", "~> 1.6.0"],
|
139
|
+
["minitest", "~> 5.8.4"],
|
140
|
+
["rake", "~> 10.5.0"],
|
141
|
+
["rake-compiler", "~> 0.9.2"],
|
142
|
+
["rake-compiler-dock", "~> 0.5.1"],
|
143
|
+
["racc", "~> 1.4.14"],
|
144
|
+
["rexical", "~> 1.0.5"]
|
145
|
+
]
|
146
|
+
|
147
|
+
if java?
|
148
|
+
self.spec_extras = { :platform => 'java' }
|
149
|
+
else
|
150
|
+
self.spec_extras = {
|
151
|
+
:extensions => ["ext/nokogiri/extconf.rb"],
|
152
|
+
:required_ruby_version => '>= 1.9.2'
|
153
|
+
}
|
91
154
|
end
|
155
|
+
|
156
|
+
self.testlib = :minitest
|
92
157
|
end
|
93
158
|
|
94
|
-
|
95
|
-
|
96
|
-
namespace :build do
|
97
|
-
namespace :win32 do
|
98
|
-
file 'cross/bin/ruby.exe' => ['cross/ruby-1.8.6-p287'] do
|
99
|
-
Dir.chdir('cross/ruby-1.8.6-p287') do
|
100
|
-
str = ''
|
101
|
-
File.open('Makefile.in', 'rb') do |f|
|
102
|
-
f.each_line do |line|
|
103
|
-
if line =~ /^\s*ALT_SEPARATOR =/
|
104
|
-
str += "\t\t " + 'ALT_SEPARATOR = "\\\\\"; \\'
|
105
|
-
str += "\n"
|
106
|
-
else
|
107
|
-
str += line
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
File.open('Makefile.in', 'wb') { |f| f.write str }
|
112
|
-
buildopts = if File.exists?('/usr/bin/i586-mingw32msvc-gcc')
|
113
|
-
"--host=i586-mingw32msvc --target=i386-mingw32 --build=i686-linux"
|
114
|
-
else
|
115
|
-
"--host=i386-mingw32 --target=i386-mingw32"
|
116
|
-
end
|
117
|
-
sh(<<-eocommand)
|
118
|
-
env ac_cv_func_getpgrp_void=no \
|
119
|
-
ac_cv_func_setpgrp_void=yes \
|
120
|
-
rb_cv_negative_time_t=no \
|
121
|
-
ac_cv_func_memcmp_working=yes \
|
122
|
-
rb_cv_binary_elf=no \
|
123
|
-
./configure \
|
124
|
-
#{buildopts} \
|
125
|
-
--prefix=#{File.expand_path(File.join(Dir.pwd, '..'))}
|
126
|
-
eocommand
|
127
|
-
sh 'make'
|
128
|
-
sh 'make install'
|
129
|
-
end
|
130
|
-
end
|
159
|
+
# ----------------------------------------
|
131
160
|
|
132
|
-
|
133
|
-
|
161
|
+
def add_file_to_gem relative_path
|
162
|
+
target_path = File.join gem_build_path, relative_path
|
163
|
+
target_dir = File.dirname(target_path)
|
164
|
+
mkdir_p target_dir unless File.directory?(target_dir)
|
165
|
+
rm_f target_path
|
166
|
+
safe_ln relative_path, target_path
|
167
|
+
HOE.spec.files += [relative_path]
|
168
|
+
end
|
169
|
+
|
170
|
+
def gem_build_path
|
171
|
+
File.join 'pkg', HOE.spec.full_name
|
172
|
+
end
|
173
|
+
|
174
|
+
if java?
|
175
|
+
# TODO: clean this section up.
|
176
|
+
require "rake/javaextensiontask"
|
177
|
+
Rake::JavaExtensionTask.new("nokogiri", HOE.spec) do |ext|
|
178
|
+
jruby_home = RbConfig::CONFIG['prefix']
|
179
|
+
ext.ext_dir = 'ext/java'
|
180
|
+
ext.lib_dir = 'lib/nokogiri'
|
181
|
+
ext.source_version = '1.6'
|
182
|
+
ext.target_version = '1.6'
|
183
|
+
jars = ["#{jruby_home}/lib/jruby.jar"] + FileList['lib/*.jar']
|
184
|
+
ext.classpath = jars.map { |x| File.expand_path x }.join ':'
|
185
|
+
ext.debug = true if ENV['JAVA_DEBUG']
|
134
186
|
end
|
135
187
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
188
|
+
task gem_build_path => [:compile] do
|
189
|
+
add_file_to_gem 'lib/nokogiri/nokogiri.jar'
|
190
|
+
end
|
191
|
+
else
|
192
|
+
begin
|
193
|
+
require 'rake/extensioncompiler'
|
194
|
+
# Ensure mingw compiler is installed
|
195
|
+
Rake::ExtensionCompiler.mingw_host
|
196
|
+
mingw_available = true
|
197
|
+
rescue
|
198
|
+
mingw_available = false
|
199
|
+
end
|
200
|
+
require "rake/extensiontask"
|
201
|
+
|
202
|
+
HOE.spec.files.reject! { |f| f =~ %r{\.(java|jar)$} }
|
203
|
+
|
204
|
+
dependencies = YAML.load_file("dependencies.yml")
|
205
|
+
|
206
|
+
task gem_build_path do
|
207
|
+
%w[libxml2 libxslt].each do |lib|
|
208
|
+
version = dependencies[lib]["version"]
|
209
|
+
archive = File.join("ports", "archives", "#{lib}-#{version}.tar.gz")
|
210
|
+
add_file_to_gem archive
|
211
|
+
patchesdir = File.join("patches", lib)
|
212
|
+
patches = `#{['git', 'ls-files', patchesdir].shelljoin}`.split("\n").grep(/\.patch\z/)
|
213
|
+
patches.each { |patch|
|
214
|
+
add_file_to_gem patch
|
215
|
+
}
|
216
|
+
(untracked = Dir[File.join(patchesdir, '*.patch')] - patches).empty? or
|
217
|
+
at_exit {
|
218
|
+
untracked.each { |patch|
|
219
|
+
puts "** WARNING: untracked patch file not added to gem: #{patch}"
|
220
|
+
}
|
221
|
+
}
|
149
222
|
end
|
150
223
|
end
|
151
224
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
Dir.chdir('cross') do
|
172
|
-
sh "unzip ../stash/#{lib}.zip"
|
173
|
-
sh "touch #{lib}"
|
225
|
+
Rake::ExtensionTask.new("nokogiri", HOE.spec) do |ext|
|
226
|
+
ext.lib_dir = File.join(*['lib', 'nokogiri', ENV['FAT_DIR']].compact)
|
227
|
+
ext.config_options << ENV['EXTOPTS']
|
228
|
+
if mingw_available
|
229
|
+
ext.cross_compile = true
|
230
|
+
ext.cross_platform = CROSS_RUBIES.map(&:platform).uniq
|
231
|
+
ext.cross_config_options << "--enable-cross-build"
|
232
|
+
ext.cross_compiling do |spec|
|
233
|
+
libs = dependencies.map { |name, dep| "#{name}-#{dep["version"]}" }.join(', ')
|
234
|
+
|
235
|
+
spec.required_ruby_version = [
|
236
|
+
'>= 1.9.2',
|
237
|
+
"< #{CROSS_RUBIES.max_by(&:ver).minor_ver.succ}"
|
238
|
+
]
|
239
|
+
|
240
|
+
spec.post_install_message = <<-EOS
|
241
|
+
Nokogiri is built with the packaged libraries: #{libs}.
|
242
|
+
EOS
|
243
|
+
spec.files.reject! { |path| File.fnmatch?('ports/*', path) }
|
174
244
|
end
|
175
245
|
end
|
176
246
|
end
|
247
|
+
end
|
177
248
|
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
249
|
+
# ----------------------------------------
|
250
|
+
|
251
|
+
desc "Generate css/parser.rb and css/tokenizer.rex"
|
252
|
+
task 'generate' => [GENERATED_PARSER, GENERATED_TOKENIZER]
|
253
|
+
task 'gem:spec' => 'generate' if Rake::Task.task_defined?("gem:spec")
|
254
|
+
|
255
|
+
# This is a big hack to make sure that the racc and rexical
|
256
|
+
# dependencies in the Gemfile are constrainted to ruby platforms
|
257
|
+
# (i.e. MRI and Rubinius). There's no way to do that through hoe,
|
258
|
+
# and any solution will require changing hoe and hoe-bundler.
|
259
|
+
old_gemfile_task = Rake::Task['bundler:gemfile'] rescue nil
|
260
|
+
task 'bundler:gemfile' do
|
261
|
+
old_gemfile_task.invoke if old_gemfile_task
|
262
|
+
|
263
|
+
lines = File.open('Gemfile', 'r') { |f| f.readlines }.map do |line|
|
264
|
+
line =~ /racc|rexical/ ? "#{line.strip}, :platform => :ruby" : line
|
192
265
|
end
|
266
|
+
File.open('Gemfile', 'w') { |f| lines.each { |line| f.puts line } }
|
267
|
+
end
|
193
268
|
|
194
|
-
|
269
|
+
file GENERATED_PARSER => "lib/nokogiri/css/parser.y" do |t|
|
270
|
+
racc = RbConfig::CONFIG['target_os'] =~ /mswin32/ ? '' : `which racc`.strip
|
271
|
+
racc = "#{::RbConfig::CONFIG['bindir']}/racc" if racc.empty?
|
272
|
+
racc = %x{command -v racc}.strip if racc.empty?
|
273
|
+
sh "#{racc} -l -o #{t.name} #{t.prerequisites.first}"
|
195
274
|
end
|
196
275
|
|
276
|
+
file GENERATED_TOKENIZER => "lib/nokogiri/css/tokenizer.rex" do |t|
|
277
|
+
sh "rex --independent -o #{t.name} #{t.prerequisites.first}"
|
278
|
+
end
|
279
|
+
|
280
|
+
[:compile, :check_manifest].each do |task_name|
|
281
|
+
Rake::Task[task_name].prerequisites << GENERATED_PARSER
|
282
|
+
Rake::Task[task_name].prerequisites << GENERATED_TOKENIZER
|
283
|
+
end
|
284
|
+
|
285
|
+
# ----------------------------------------
|
286
|
+
|
197
287
|
desc "set environment variables to build and/or test with debug options"
|
198
288
|
task :debug do
|
199
289
|
ENV['NOKOGIRI_DEBUG'] = "true"
|
@@ -201,64 +291,85 @@ task :debug do
|
|
201
291
|
ENV['CFLAGS'] += " -DDEBUG"
|
202
292
|
end
|
203
293
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
end
|
210
|
-
cmdline = "ruby -w -I.:lib:ext:test -rtest/unit -e '%w[#{files.join(' ')}].each {|f| require f}'"
|
294
|
+
require File.join File.dirname(__FILE__), 'tasks/test'
|
295
|
+
|
296
|
+
task :java_debug do
|
297
|
+
ENV['JRUBY_OPTS'] = "#{ENV['JRUBY_OPTS']} --debug --dev"
|
298
|
+
ENV['JAVA_OPTS'] = '-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y' if ENV['JAVA_DEBUG']
|
211
299
|
end
|
212
300
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
desc "run test suite under valgrind with basic ruby options"
|
220
|
-
task :valgrind => :build do
|
221
|
-
cmdline = "valgrind #{VALGRIND_BASIC_OPTS} #{test_suite_cmdline}"
|
222
|
-
puts cmdline
|
223
|
-
system cmdline
|
301
|
+
if java?
|
302
|
+
task :test_19 => :test
|
303
|
+
task :test_20 do
|
304
|
+
ENV['JRUBY_OPTS'] = "--2.0"
|
305
|
+
Rake::Task["test"].invoke
|
224
306
|
end
|
307
|
+
end
|
308
|
+
|
309
|
+
Rake::Task[:test].prerequisites << :compile
|
310
|
+
Rake::Task[:test].prerequisites << :java_debug
|
311
|
+
Rake::Task[:test].prerequisites << :check_extra_deps unless java?
|
225
312
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
cmdline = "valgrind #{VALGRIND_BASIC_OPTS} --freelist-vol=100000000 --malloc-fill=6D --free-fill=66 #{test_suite_cmdline}"
|
230
|
-
puts cmdline
|
231
|
-
system cmdline
|
313
|
+
if Hoe.plugins.include?(:debugging)
|
314
|
+
['valgrind', 'valgrind:mem', 'valgrind:mem0'].each do |task_name|
|
315
|
+
Rake::Task["test:#{task_name}"].prerequisites << :compile
|
232
316
|
end
|
317
|
+
end
|
318
|
+
|
319
|
+
task "test:libxml-ruby" do
|
320
|
+
ENV['TEST_NOKOGIRI_WITH_LIBXML_RUBY'] = "1"
|
321
|
+
warn "#{__FILE__}:#{__LINE__}: --- running tests with libxml-ruby loaded ---"
|
322
|
+
Rake::Task[:test].execute
|
323
|
+
ENV['TEST_NOKOGIRI_WITH_LIBXML_RUBY'] = nil
|
324
|
+
end
|
325
|
+
|
326
|
+
Rake::Task["test:libxml-ruby"].prerequisites << :compile
|
233
327
|
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
328
|
+
task "test:valgrind:libxml-ruby" do
|
329
|
+
ENV['TEST_NOKOGIRI_WITH_LIBXML_RUBY'] = "1"
|
330
|
+
warn "#{__FILE__}:#{__LINE__}: --- running tests with libxml-ruby loaded ---"
|
331
|
+
Rake::Task["test:valgrind"].execute
|
332
|
+
ENV['TEST_NOKOGIRI_WITH_LIBXML_RUBY'] = nil
|
333
|
+
end
|
334
|
+
|
335
|
+
Rake::Task["test:valgrind:libxml-ruby"].prerequisites << :compile
|
336
|
+
|
337
|
+
# ----------------------------------------
|
338
|
+
|
339
|
+
def verify_dll(dll, cross_ruby)
|
340
|
+
dll_imports = cross_ruby.dlls
|
341
|
+
dump = `#{['env', 'LANG=C', cross_ruby.tool('objdump'), '-p', dll].shelljoin}`
|
342
|
+
raise "unexpected file format for generated dll #{dll}" unless /file format #{Regexp.quote(cross_ruby.target)}\s/ === dump
|
343
|
+
raise "export function Init_nokogiri not in dll #{dll}" unless /Table.*\sInit_nokogiri\s/mi === dump
|
344
|
+
|
345
|
+
# Verify that the expected DLL dependencies match the actual dependencies
|
346
|
+
# and that no further dependencies exist.
|
347
|
+
dll_imports_is = dump.scan(/DLL Name: (.*)$/).map(&:first).map(&:downcase).uniq
|
348
|
+
if dll_imports_is.sort != dll_imports.sort
|
349
|
+
raise "unexpected dll imports #{dll_imports_is.inspect} in #{dll}"
|
240
350
|
end
|
351
|
+
puts "#{dll}: Looks good!"
|
352
|
+
end
|
241
353
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
system cmdline
|
354
|
+
task :cross do
|
355
|
+
rake_compiler_config_path = File.expand_path("~/.rake-compiler/config.yml")
|
356
|
+
unless File.exists? rake_compiler_config_path
|
357
|
+
raise "rake-compiler has not installed any cross rubies. Try using rake-compiler-dev-box for building binary windows gems.'"
|
247
358
|
end
|
248
359
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
360
|
+
CROSS_RUBIES.each do |cross_ruby|
|
361
|
+
task "tmp/#{cross_ruby.platform}/nokogiri/#{cross_ruby.ver}/nokogiri.so" do |t|
|
362
|
+
# To reduce the gem file size strip mingw32 dlls before packaging
|
363
|
+
sh [cross_ruby.tool('strip'), '-S', t.name].shelljoin
|
364
|
+
verify_dll t.name, cross_ruby
|
365
|
+
end
|
253
366
|
end
|
254
367
|
end
|
255
368
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
Rake::Task[:check_manifest].prerequisites << GENERATED_PARSER
|
261
|
-
Rake::Task[:check_manifest].prerequisites << GENERATED_TOKENIZER
|
369
|
+
desc "build a windows gem without all the ceremony."
|
370
|
+
task "gem:windows" do
|
371
|
+
require "rake_compiler_dock"
|
372
|
+
RakeCompilerDock.sh "bundle && rake cross native gem MAKE='nice make -j`nproc`' RUBY_CC_VERSION=#{ENV['RUBY_CC_VERSION']}"
|
262
373
|
end
|
263
374
|
|
264
375
|
# vim: syntax=Ruby
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# Standard Responses to Requests
|
2
|
+
|
3
|
+
These responses are needed often enough that I figured, let's just
|
4
|
+
check them in for future reference and use.
|
5
|
+
|
6
|
+
|
7
|
+
# Not enough information to help
|
8
|
+
|
9
|
+
Hello!
|
10
|
+
|
11
|
+
Thanks for asking this question! However, without more information,
|
12
|
+
Team Nokogiri cannot reproduce your issue, and so we cannot offer much
|
13
|
+
help.
|
14
|
+
|
15
|
+
Please provide us with:
|
16
|
+
|
17
|
+
* A self-contained script (one that we can run without modification,
|
18
|
+
and preferably without making external network connections).
|
19
|
+
|
20
|
+
* Please note that you need to include the XML/HTML that you are
|
21
|
+
operating on.
|
22
|
+
|
23
|
+
* The output of `nokogiri -v`, which will provide details about your
|
24
|
+
platform and versions of ruby, libxml2 and nokogiri.
|
25
|
+
|
26
|
+
For more information about requesting help or reporting bugs, please
|
27
|
+
take a look at http://bit.ly/nokohelp
|
28
|
+
|
29
|
+
Thank you so much!
|
30
|
+
|
31
|
+
|
32
|
+
# Not a bug
|
33
|
+
|
34
|
+
Hello!
|
35
|
+
|
36
|
+
Thanks for asking this question! Your request for assistance using
|
37
|
+
Nokogiri will not go unanswered!
|
38
|
+
|
39
|
+
However, Nokogiri's Github Issues is reserved for reporting bugs or
|
40
|
+
submitting patches. If you ask your question on the mailing list, Team
|
41
|
+
Nokogiri promises someone will provide you with an answer in a timely
|
42
|
+
manner.
|
43
|
+
|
44
|
+
If you'd like to read up on Team Nokogiri's rationale for this policy,
|
45
|
+
please go to http://bit.ly/nokohelp.
|
46
|
+
|
47
|
+
Thank you so much for understanding! And thank you for using Nokogiri.
|