nokogiri-maglev- 1.5.3 → 1.5.4.20120815005250
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.ja.rdoc +27 -1
- data/CHANGELOG.rdoc +27 -1
- data/C_CODING_STYLE.rdoc +9 -3
- data/Rakefile +3 -1
- data/bin/nokogiri +3 -1
- data/ext/nokogiri/extconf.rb +14 -4
- data/ext/nokogiri/nokogiri.c +20 -0
- data/ext/nokogiri/nokogiri.h +2 -5
- data/ext/nokogiri/xml_attr.c +1 -1
- data/ext/nokogiri/xml_cdata.c +1 -1
- data/ext/nokogiri/xml_comment.c +1 -1
- data/ext/nokogiri/xml_document.c +2 -2
- data/ext/nokogiri/xml_document_fragment.c +1 -1
- data/ext/nokogiri/xml_entity_reference.c +1 -1
- data/ext/nokogiri/xml_node.c +15 -12
- data/ext/nokogiri/xml_processing_instruction.c +1 -1
- data/ext/nokogiri/xml_text.c +1 -1
- data/ext/nokogiri/xml_xpath_context.c +1 -1
- data/lib/nokogiri/version.rb +1 -1
- data/lib/nokogiri/xml/document.rb +26 -8
- data/lib/nokogiri/xml/node.rb +1 -1
- data/lib/nokogiri/xml/node_set.rb +1 -1
- data/lib/nokogiri/xml/parse_options.rb +7 -2
- data/test/xml/test_document_fragment.rb +5 -0
- data/test/xml/test_node.rb +10 -0
- data/test/xml/test_node_set.rb +5 -0
- data/test/xml/test_parse_options.rb +12 -0
- metadata +51 -38
data/CHANGELOG.ja.rdoc
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
== 1.5.
|
1
|
+
== 1.5.4 / unreleased
|
2
|
+
|
3
|
+
* Features
|
4
|
+
|
5
|
+
* The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!)
|
6
|
+
* Build support on hardened Debian systems that use `-Werror=format-security`. #680.
|
7
|
+
* Better build support for systems with pkg-config. #584
|
8
|
+
* Better build support for systems with multiple iconv installations.
|
9
|
+
|
10
|
+
* Bugfixes
|
11
|
+
|
12
|
+
* Segmentation fault when creating a comment node for a DocumentFragment. #677, #678.
|
13
|
+
* Treat '.' as xpath in at() and search(). #690
|
14
|
+
|
15
|
+
* [MRI, Security] Default parse options for XML documents were
|
16
|
+
changed to not make network connections during document parsing,
|
17
|
+
to avoid XXE vulnerability. #693
|
18
|
+
|
19
|
+
To re-enable this behavior, the configuration method `nononet` may
|
20
|
+
be called, like this:
|
21
|
+
|
22
|
+
Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
|
23
|
+
|
24
|
+
Insert your own joke about double-negatives here.
|
25
|
+
|
26
|
+
|
27
|
+
== 1.5.3 / 2012-06-01
|
2
28
|
|
3
29
|
* Features
|
4
30
|
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
== 1.5.
|
1
|
+
== 1.5.4 / unreleased
|
2
|
+
|
3
|
+
* Features
|
4
|
+
|
5
|
+
* The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!)
|
6
|
+
* Build support on hardened Debian systems that use `-Werror=format-security`. #680.
|
7
|
+
* Better build support for systems with pkg-config. #584
|
8
|
+
* Better build support for systems with multiple iconv installations.
|
9
|
+
|
10
|
+
* Bugfixes
|
11
|
+
|
12
|
+
* Segmentation fault when creating a comment node for a DocumentFragment. #677, #678.
|
13
|
+
* Treat '.' as xpath in at() and search(). #690
|
14
|
+
|
15
|
+
* [MRI, Security] Default parse options for XML documents were
|
16
|
+
changed to not make network connections during document parsing,
|
17
|
+
to avoid XXE vulnerability. #693
|
18
|
+
|
19
|
+
To re-enable this behavior, the configuration method `nononet` may
|
20
|
+
be called, like this:
|
21
|
+
|
22
|
+
Nokogiri::XML::Document.parse(xml) { |config| config.nononet }
|
23
|
+
|
24
|
+
Insert your own joke about double-negatives here.
|
25
|
+
|
26
|
+
|
27
|
+
== 1.5.3 / 2012-06-01
|
2
28
|
|
3
29
|
* Features
|
4
30
|
|
data/C_CODING_STYLE.rdoc
CHANGED
@@ -4,11 +4,17 @@ Please don't propose commits that only change whitespace. However, if your
|
|
4
4
|
commit touches a function or section that is not using MRI Ruby conventions,
|
5
5
|
feel free to update whitespace in the surrounding code.
|
6
6
|
|
7
|
+
|
7
8
|
= WHITESPACE:
|
8
9
|
|
9
|
-
indent level: 2
|
10
|
-
indent type: Always spaces
|
11
|
-
|
10
|
+
* indent level: 2
|
11
|
+
* indent type: Always spaces
|
12
|
+
* line Breaks: LF
|
13
|
+
|
14
|
+
This style can be automatically applied by running:
|
15
|
+
|
16
|
+
astyle --indent=spaces=2 --style=1tbs --keep-one-line-blocks $(ack -f --type=cpp --type=cc ext/nokogiri)
|
17
|
+
|
12
18
|
|
13
19
|
= FUNCTION DECLARATION:
|
14
20
|
|
data/Rakefile
CHANGED
@@ -23,10 +23,11 @@ end
|
|
23
23
|
|
24
24
|
require 'tasks/nokogiri.org'
|
25
25
|
|
26
|
-
HOE = Hoe.spec 'maglev-
|
26
|
+
HOE = Hoe.spec 'nokogiri-maglev-' do
|
27
27
|
developer 'Aaron Patterson', 'aaronp@rubyforge.org'
|
28
28
|
developer 'Mike Dalessio', 'mike.dalessio@gmail.com'
|
29
29
|
developer 'Yoko Harada', 'yokolet@gmail.com'
|
30
|
+
developer 'Tim Elliott', 'tle@holymonkey.com'
|
30
31
|
|
31
32
|
self.readme_file = ['README', ENV['HLANG'], 'rdoc'].compact.join('.')
|
32
33
|
self.history_file = ['CHANGELOG', ENV['HLANG'], 'rdoc'].compact.join('.')
|
@@ -49,6 +50,7 @@ HOE = Hoe.spec 'maglev-nokogiri' do
|
|
49
50
|
["mini_portile", ">= 0.2.2"],
|
50
51
|
["minitest", "~> 2.2.2"],
|
51
52
|
["racc", ">= 1.4.6"],
|
53
|
+
["rake", ">= 0.9"],
|
52
54
|
["rake-compiler", "= 0.8.0"],
|
53
55
|
["rexical", ">= 1.0.5"],
|
54
56
|
]
|
data/bin/nokogiri
CHANGED
data/ext/nokogiri/extconf.rb
CHANGED
@@ -7,8 +7,8 @@ require 'mkmf'
|
|
7
7
|
RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
|
8
8
|
|
9
9
|
ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
|
10
|
-
LIBDIR =
|
11
|
-
INCLUDEDIR =
|
10
|
+
LIBDIR = RbConfig::CONFIG['libdir']
|
11
|
+
INCLUDEDIR = RbConfig::CONFIG['includedir']
|
12
12
|
|
13
13
|
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'macruby'
|
14
14
|
$LIBRUBYARG_STATIC.gsub!(/-static/, '')
|
@@ -99,12 +99,22 @@ def asplode(lib)
|
|
99
99
|
abort "-----\n#{lib} is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.\n-----"
|
100
100
|
end
|
101
101
|
|
102
|
-
pkg_config('libxslt')
|
102
|
+
pkg_config('libxslt')
|
103
|
+
pkg_config('libxml-2.0')
|
104
|
+
pkg_config('libiconv')
|
105
|
+
|
106
|
+
def have_iconv?
|
107
|
+
%w{ iconv_open libiconv_open }.any? do |method|
|
108
|
+
have_func(method, 'iconv.h') or
|
109
|
+
have_library('iconv', method, 'iconv.h') or
|
110
|
+
find_library('iconv', method, 'iconv.h')
|
111
|
+
end
|
112
|
+
end
|
103
113
|
|
104
114
|
asplode "libxml2" unless find_header('libxml/parser.h')
|
105
115
|
asplode "libxslt" unless find_header('libxslt/xslt.h')
|
106
116
|
asplode "libexslt" unless find_header('libexslt/exslt.h')
|
107
|
-
# asplode "libiconv" unless
|
117
|
+
# asplode "libiconv" unless have_iconv?
|
108
118
|
asplode "libxml2" unless find_library("#{lib_prefix}xml2", 'xmlParseDoc')
|
109
119
|
asplode "libxslt" unless find_library("#{lib_prefix}xslt", 'xsltParseStylesheetDoc')
|
110
120
|
asplode "libexslt" unless find_library("#{lib_prefix}exslt", 'exsltFuncRegister')
|
data/ext/nokogiri/nokogiri.c
CHANGED
@@ -43,6 +43,26 @@ void vasprintf_free (void *p)
|
|
43
43
|
#endif
|
44
44
|
#endif
|
45
45
|
|
46
|
+
void nokogiri_root_node(xmlNodePtr node)
|
47
|
+
{
|
48
|
+
xmlDocPtr doc;
|
49
|
+
nokogiriTuplePtr tuple;
|
50
|
+
|
51
|
+
doc = node->doc;
|
52
|
+
if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
|
53
|
+
tuple = (nokogiriTuplePtr)doc->_private;
|
54
|
+
st_insert(tuple->unlinkedNodes, (st_data_t)node, (st_data_t)node);
|
55
|
+
}
|
56
|
+
|
57
|
+
void nokogiri_root_nsdef(xmlNsPtr ns, xmlDocPtr doc)
|
58
|
+
{
|
59
|
+
nokogiriTuplePtr tuple;
|
60
|
+
|
61
|
+
if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
|
62
|
+
tuple = (nokogiriTuplePtr)doc->_private;
|
63
|
+
st_insert(tuple->unlinkedNodes, (st_data_t)ns, (st_data_t)ns);
|
64
|
+
}
|
65
|
+
|
46
66
|
void Init_nokogiri()
|
47
67
|
{
|
48
68
|
#if !defined(__MACRUBY__) && !defined(MAGLEV)
|
data/ext/nokogiri/nokogiri.h
CHANGED
@@ -120,11 +120,8 @@ extern VALUE mNokogiriHtml ;
|
|
120
120
|
extern VALUE mNokogiriHtmlSax ;
|
121
121
|
extern VALUE mNokogiriXslt ;
|
122
122
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
#define NOKOGIRI_ROOT_NSDEF(_nsDef, _doc) \
|
127
|
-
st_insert(((nokogiriTuplePtr)(_doc)->_private)->unlinkedNodes, (st_data_t)(_nsDef), (st_data_t)(_nsDef))
|
123
|
+
void nokogiri_root_node(xmlNodePtr);
|
124
|
+
void nokogiri_root_nsdef(xmlNsPtr, xmlDocPtr);
|
128
125
|
|
129
126
|
#ifdef DEBUG
|
130
127
|
|
data/ext/nokogiri/xml_attr.c
CHANGED
data/ext/nokogiri/xml_cdata.c
CHANGED
@@ -25,7 +25,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
25
25
|
NIL_P(content) ? 0 : (int)RSTRING_LEN(content)
|
26
26
|
);
|
27
27
|
|
28
|
-
|
28
|
+
nokogiri_root_node(node);
|
29
29
|
|
30
30
|
rb_node = Nokogiri_wrap_xml_node(klass, node);
|
31
31
|
rb_obj_call_init(rb_node, argc, argv);
|
data/ext/nokogiri/xml_comment.c
CHANGED
data/ext/nokogiri/xml_document.c
CHANGED
@@ -102,7 +102,7 @@ static VALUE set_root(VALUE self, VALUE root)
|
|
102
102
|
|
103
103
|
if(old_root) {
|
104
104
|
xmlUnlinkNode(old_root);
|
105
|
-
|
105
|
+
nokogiri_root_node(old_root);
|
106
106
|
}
|
107
107
|
|
108
108
|
return root;
|
@@ -121,7 +121,7 @@ static VALUE set_root(VALUE self, VALUE root)
|
|
121
121
|
}
|
122
122
|
|
123
123
|
xmlDocSetRootElement(doc, new_root);
|
124
|
-
if(old_root)
|
124
|
+
if(old_root) nokogiri_root_node(old_root);
|
125
125
|
return root;
|
126
126
|
}
|
127
127
|
|
data/ext/nokogiri/xml_node.c
CHANGED
@@ -51,7 +51,7 @@ static void relink_namespace(xmlNodePtr reparented)
|
|
51
51
|
} else {
|
52
52
|
reparented->nsDef = curr->next;
|
53
53
|
}
|
54
|
-
|
54
|
+
nokogiri_root_nsdef(curr, reparented->doc);
|
55
55
|
} else {
|
56
56
|
prev = curr;
|
57
57
|
}
|
@@ -132,7 +132,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep
|
|
132
132
|
* uninteresting libxml2 implementation detail). as a result, we cannot
|
133
133
|
* reparent the actual reparentee, so we reparent a duplicate.
|
134
134
|
*/
|
135
|
-
|
135
|
+
nokogiri_root_node(reparentee);
|
136
136
|
if (!(reparentee = xmlDocCopyNode(reparentee, pivot->doc, 1))) {
|
137
137
|
rb_raise(rb_eRuntimeError, "Could not reparent node (xmlDocCopyNode)");
|
138
138
|
}
|
@@ -162,7 +162,7 @@ static VALUE reparent_node_with(VALUE pivot_obj, VALUE reparentee_obj, pivot_rep
|
|
162
162
|
new_next_text = xmlDocCopyNode(next_text, pivot->doc, 1) ;
|
163
163
|
|
164
164
|
xmlUnlinkNode(next_text);
|
165
|
-
|
165
|
+
nokogiri_root_node(next_text);
|
166
166
|
|
167
167
|
xmlAddNextSibling(pivot, new_next_text);
|
168
168
|
}
|
@@ -375,7 +375,7 @@ static VALUE duplicate_node(int argc, VALUE *argv, VALUE self)
|
|
375
375
|
dup = xmlDocCopyNode(node, node->doc, (int)NUM2INT(level));
|
376
376
|
if(dup == NULL) return Qnil;
|
377
377
|
|
378
|
-
|
378
|
+
nokogiri_root_node(dup);
|
379
379
|
|
380
380
|
return Nokogiri_wrap_xml_node(rb_obj_class(self), dup);
|
381
381
|
}
|
@@ -391,7 +391,7 @@ static VALUE unlink_node(VALUE self)
|
|
391
391
|
xmlNodePtr node;
|
392
392
|
Data_Get_Struct(self, xmlNode, node);
|
393
393
|
xmlUnlinkNode(node);
|
394
|
-
|
394
|
+
nokogiri_root_node(node);
|
395
395
|
return self;
|
396
396
|
}
|
397
397
|
|
@@ -489,7 +489,7 @@ static VALUE replace(VALUE self, VALUE new_node)
|
|
489
489
|
|
490
490
|
xmlNodePtr pivot;
|
491
491
|
Data_Get_Struct(self, xmlNode, pivot);
|
492
|
-
|
492
|
+
nokogiri_root_node(pivot);
|
493
493
|
|
494
494
|
return reparent;
|
495
495
|
}
|
@@ -681,7 +681,7 @@ static VALUE set(VALUE self, VALUE property, VALUE value)
|
|
681
681
|
if (prop && prop->children) {
|
682
682
|
for (cur = prop->children; cur; cur = cur->next) {
|
683
683
|
if (cur->_private) {
|
684
|
-
|
684
|
+
nokogiri_root_node(cur);
|
685
685
|
xmlUnlinkNode(cur);
|
686
686
|
}
|
687
687
|
}
|
@@ -901,7 +901,7 @@ static VALUE set_content(VALUE self, VALUE content)
|
|
901
901
|
while (NULL != child) {
|
902
902
|
next = child->next ;
|
903
903
|
xmlUnlinkNode(child) ;
|
904
|
-
|
904
|
+
nokogiri_root_node(child);
|
905
905
|
child = next ;
|
906
906
|
}
|
907
907
|
|
@@ -1133,7 +1133,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
1133
1133
|
|
1134
1134
|
node = xmlNewNode(NULL, (xmlChar *)StringValuePtr(name));
|
1135
1135
|
node->doc = doc->doc;
|
1136
|
-
|
1136
|
+
nokogiri_root_node(node);
|
1137
1137
|
|
1138
1138
|
rb_node = Nokogiri_wrap_xml_node(
|
1139
1139
|
klass == cNokogiriXmlNode ? Qnil : klass,
|
@@ -1322,6 +1322,7 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
|
|
1322
1322
|
VALUE node_cache = Qnil ;
|
1323
1323
|
VALUE rb_node = Qnil ;
|
1324
1324
|
nokogiriTuplePtr node_has_a_document;
|
1325
|
+
xmlDocPtr doc;
|
1325
1326
|
void (*mark_method)(xmlNodePtr) = NULL ;
|
1326
1327
|
|
1327
1328
|
assert(node);
|
@@ -1332,7 +1333,9 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
|
|
1332
1333
|
/* It's OK if the node doesn't have a fully-realized document (as in XML::Reader). */
|
1333
1334
|
/* see https://github.com/tenderlove/nokogiri/issues/95 */
|
1334
1335
|
/* and https://github.com/tenderlove/nokogiri/issues/439 */
|
1335
|
-
|
1336
|
+
doc = node->doc;
|
1337
|
+
if (doc->type == XML_DOCUMENT_FRAG_NODE) doc = doc->doc;
|
1338
|
+
node_has_a_document = DOC_RUBY_OBJECT_TEST(doc);
|
1336
1339
|
|
1337
1340
|
if(node->_private && node_has_a_document)
|
1338
1341
|
return (VALUE)node->_private;
|
@@ -1397,8 +1400,8 @@ VALUE Nokogiri_wrap_xml_node(VALUE klass, xmlNodePtr node)
|
|
1397
1400
|
node->_private = (void *)rb_node;
|
1398
1401
|
|
1399
1402
|
if (node_has_a_document) {
|
1400
|
-
document = DOC_RUBY_OBJECT(
|
1401
|
-
node_cache = DOC_NODE_CACHE(
|
1403
|
+
document = DOC_RUBY_OBJECT(doc);
|
1404
|
+
node_cache = DOC_NODE_CACHE(doc);
|
1402
1405
|
rb_ary_push(node_cache, rb_node);
|
1403
1406
|
rb_funcall(document, decorate, 1, rb_node);
|
1404
1407
|
}
|
data/ext/nokogiri/xml_text.c
CHANGED
@@ -22,7 +22,7 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
|
|
22
22
|
node = xmlNewText((xmlChar *)StringValuePtr(string));
|
23
23
|
node->doc = doc->doc;
|
24
24
|
|
25
|
-
|
25
|
+
nokogiri_root_node(node);
|
26
26
|
|
27
27
|
rb_node = Nokogiri_wrap_xml_node(klass, node) ;
|
28
28
|
rb_obj_call_init(rb_node, argc, argv);
|
data/lib/nokogiri/version.rb
CHANGED
@@ -3,10 +3,11 @@ module Nokogiri
|
|
3
3
|
##
|
4
4
|
# Nokogiri::XML::Document is the main entry point for dealing with
|
5
5
|
# XML documents. The Document is created by parsing an XML document.
|
6
|
-
# See Nokogiri.
|
6
|
+
# See Nokogiri::XML::Document.parse() for more information on parsing.
|
7
7
|
#
|
8
8
|
# For searching a Document, see Nokogiri::XML::Node#css and
|
9
9
|
# Nokogiri::XML::Node#xpath
|
10
|
+
#
|
10
11
|
class Document < Nokogiri::XML::Node
|
11
12
|
# I'm ignoring unicode characters here.
|
12
13
|
# See http://www.w3.org/TR/REC-xml-names/#ns-decl for more details.
|
@@ -15,13 +16,30 @@ module Nokogiri
|
|
15
16
|
NCNAME_RE = /^xmlns(:[#{NCNAME_START_CHAR}][#{NCNAME_CHAR}]*)?$/
|
16
17
|
|
17
18
|
##
|
18
|
-
# Parse an XML file.
|
19
|
-
#
|
20
|
-
# +
|
21
|
-
#
|
22
|
-
#
|
23
|
-
#
|
24
|
-
#
|
19
|
+
# Parse an XML file.
|
20
|
+
#
|
21
|
+
# +string_or_io+ may be a String, or any object that responds to
|
22
|
+
# _read_ and _close_ such as an IO, or StringIO.
|
23
|
+
#
|
24
|
+
# +url+ (optional) is the URI where this document is located.
|
25
|
+
#
|
26
|
+
# +encoding+ (optional) is the encoding that should be used when processing
|
27
|
+
# the document.
|
28
|
+
#
|
29
|
+
# +options+ (optional) is a configuration object that sets options during
|
30
|
+
# parsing, such as Nokogiri::XML::ParseOptions::RECOVER. See the
|
31
|
+
# Nokogiri::XML::ParseOptions for more information.
|
32
|
+
#
|
33
|
+
# +block+ (optional) is passed a configuration object on which
|
34
|
+
# parse options may be set.
|
35
|
+
#
|
36
|
+
# When parsing untrusted documents, it's recommended that the
|
37
|
+
# +nonet+ option be used, as shown in this example code:
|
38
|
+
#
|
39
|
+
# Nokogiri::XML::Document.parse(xml_string) { |config| config.nonet }
|
40
|
+
#
|
41
|
+
# Nokogiri.XML() is a convenience method which will call this method.
|
42
|
+
#
|
25
43
|
def self.parse string_or_io, url = nil, encoding = nil, options = ParseOptions::DEFAULT_XML, &block
|
26
44
|
options = Nokogiri::XML::ParseOptions.new(options) if Fixnum === options
|
27
45
|
# Give the options to the user
|
data/lib/nokogiri/xml/node.rb
CHANGED
@@ -27,7 +27,7 @@ module Nokogiri
|
|
27
27
|
SAX1 = 1 << 9
|
28
28
|
# Implement XInclude substitution
|
29
29
|
XINCLUDE = 1 << 10
|
30
|
-
# Forbid network access
|
30
|
+
# Forbid network access. Recommended for dealing with untrusted documents.
|
31
31
|
NONET = 1 << 11
|
32
32
|
# Do not reuse the context dictionary
|
33
33
|
NODICT = 1 << 12
|
@@ -47,7 +47,7 @@ module Nokogiri
|
|
47
47
|
HUGE = 1 << 19
|
48
48
|
|
49
49
|
# the default options used for parsing XML documents
|
50
|
-
DEFAULT_XML = RECOVER
|
50
|
+
DEFAULT_XML = RECOVER | NONET
|
51
51
|
# the default options used for parsing HTML documents
|
52
52
|
DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET
|
53
53
|
|
@@ -64,6 +64,11 @@ module Nokogiri
|
|
64
64
|
self
|
65
65
|
end
|
66
66
|
|
67
|
+
def no#{constant.downcase}
|
68
|
+
@options &= ~#{constant}
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
67
72
|
def #{constant.downcase}?
|
68
73
|
#{constant} & @options == #{constant}
|
69
74
|
end
|
@@ -176,6 +176,11 @@ module Nokogiri
|
|
176
176
|
assert fragment.children.respond_to?(:awesome!), fragment.children.class
|
177
177
|
end
|
178
178
|
|
179
|
+
def test_add_node_to_doc_fragment_segfault
|
180
|
+
frag = Nokogiri::XML::DocumentFragment.new(@xml, '<p>hello world</p>')
|
181
|
+
Nokogiri::XML::Comment.new(frag,'moo')
|
182
|
+
end
|
183
|
+
|
179
184
|
if Nokogiri.uses_libxml?
|
180
185
|
def test_for_libxml_in_context_fragment_parsing_bug_workaround
|
181
186
|
10.times do
|
data/test/xml/test_node.rb
CHANGED
@@ -454,6 +454,11 @@ module Nokogiri
|
|
454
454
|
assert_equal node, @xml.xpath('//address').first
|
455
455
|
end
|
456
456
|
|
457
|
+
def test_at_self
|
458
|
+
node = @xml.at('address')
|
459
|
+
assert_equal node, node.at('.')
|
460
|
+
end
|
461
|
+
|
457
462
|
def test_at_xpath
|
458
463
|
node = @xml.at_xpath('//address')
|
459
464
|
nodes = @xml.xpath('//address')
|
@@ -740,6 +745,11 @@ module Nokogiri
|
|
740
745
|
assert_equal node.parent, parent_node
|
741
746
|
end
|
742
747
|
|
748
|
+
def test_search_self
|
749
|
+
node = @xml.at('//employee')
|
750
|
+
assert_equal node.search('.').to_a, [node]
|
751
|
+
end
|
752
|
+
|
743
753
|
def test_search_by_symbol
|
744
754
|
assert set = @xml.search(:employee)
|
745
755
|
assert 5, set.length
|
data/test/xml/test_node_set.rb
CHANGED
@@ -146,6 +146,11 @@ module Nokogiri
|
|
146
146
|
assert_equal @xml.xpath('//employee'), custom_employees
|
147
147
|
end
|
148
148
|
|
149
|
+
def test_search_self
|
150
|
+
set = @xml.xpath('//staff')
|
151
|
+
assert_equal set.to_a, set.search('.').to_a
|
152
|
+
end
|
153
|
+
|
149
154
|
def test_search_with_custom_object
|
150
155
|
set = @xml.xpath('//staff')
|
151
156
|
custom_employees = set.search('//*[awesome(.)]', Class.new {
|
@@ -35,6 +35,18 @@ module Nokogiri
|
|
35
35
|
assert_equal 1 << 1, options.options
|
36
36
|
end
|
37
37
|
|
38
|
+
def test_unsetting
|
39
|
+
options = Nokogiri::XML::ParseOptions.new Nokogiri::XML::ParseOptions::DEFAULT_HTML
|
40
|
+
assert options.nonet?
|
41
|
+
assert options.recover?
|
42
|
+
options.nononet.norecover
|
43
|
+
assert ! options.nonet?
|
44
|
+
assert ! options.recover?
|
45
|
+
options.nonet.recover
|
46
|
+
assert options.nonet?
|
47
|
+
assert options.recover?
|
48
|
+
end
|
49
|
+
|
38
50
|
def test_chaining
|
39
51
|
options = Nokogiri::XML::ParseOptions.new.recover.noent
|
40
52
|
assert options.recover?
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nokogiri-maglev-
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.4.20120815005250
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Aaron Patterson
|
9
9
|
- Mike Dalessio
|
10
10
|
- Yoko Harada
|
11
|
+
- Tim Elliott
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
@@ -15,7 +16,7 @@ date: 2012-08-14 00:00:00.000000000 Z
|
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
17
18
|
name: hoe-bundler
|
18
|
-
requirement: &
|
19
|
+
requirement: &70249603047560 !ruby/object:Gem::Requirement
|
19
20
|
none: false
|
20
21
|
requirements:
|
21
22
|
- - ! '>='
|
@@ -23,10 +24,10 @@ dependencies:
|
|
23
24
|
version: '1.1'
|
24
25
|
type: :development
|
25
26
|
prerelease: false
|
26
|
-
version_requirements: *
|
27
|
+
version_requirements: *70249603047560
|
27
28
|
- !ruby/object:Gem::Dependency
|
28
29
|
name: hoe-debugging
|
29
|
-
requirement: &
|
30
|
+
requirement: &70249603045740 !ruby/object:Gem::Requirement
|
30
31
|
none: false
|
31
32
|
requirements:
|
32
33
|
- - ! '>='
|
@@ -34,10 +35,10 @@ dependencies:
|
|
34
35
|
version: 1.0.3
|
35
36
|
type: :development
|
36
37
|
prerelease: false
|
37
|
-
version_requirements: *
|
38
|
+
version_requirements: *70249603045740
|
38
39
|
- !ruby/object:Gem::Dependency
|
39
40
|
name: hoe-gemspec
|
40
|
-
requirement: &
|
41
|
+
requirement: &70249603044800 !ruby/object:Gem::Requirement
|
41
42
|
none: false
|
42
43
|
requirements:
|
43
44
|
- - ! '>='
|
@@ -45,10 +46,10 @@ dependencies:
|
|
45
46
|
version: '1.0'
|
46
47
|
type: :development
|
47
48
|
prerelease: false
|
48
|
-
version_requirements: *
|
49
|
+
version_requirements: *70249603044800
|
49
50
|
- !ruby/object:Gem::Dependency
|
50
51
|
name: hoe-git
|
51
|
-
requirement: &
|
52
|
+
requirement: &70249603043820 !ruby/object:Gem::Requirement
|
52
53
|
none: false
|
53
54
|
requirements:
|
54
55
|
- - ! '>='
|
@@ -56,10 +57,10 @@ dependencies:
|
|
56
57
|
version: '1.4'
|
57
58
|
type: :development
|
58
59
|
prerelease: false
|
59
|
-
version_requirements: *
|
60
|
+
version_requirements: *70249603043820
|
60
61
|
- !ruby/object:Gem::Dependency
|
61
62
|
name: mini_portile
|
62
|
-
requirement: &
|
63
|
+
requirement: &70249603042500 !ruby/object:Gem::Requirement
|
63
64
|
none: false
|
64
65
|
requirements:
|
65
66
|
- - ! '>='
|
@@ -67,10 +68,10 @@ dependencies:
|
|
67
68
|
version: 0.2.2
|
68
69
|
type: :development
|
69
70
|
prerelease: false
|
70
|
-
version_requirements: *
|
71
|
+
version_requirements: *70249603042500
|
71
72
|
- !ruby/object:Gem::Dependency
|
72
73
|
name: minitest
|
73
|
-
requirement: &
|
74
|
+
requirement: &70249603041740 !ruby/object:Gem::Requirement
|
74
75
|
none: false
|
75
76
|
requirements:
|
76
77
|
- - ~>
|
@@ -78,10 +79,10 @@ dependencies:
|
|
78
79
|
version: 2.2.2
|
79
80
|
type: :development
|
80
81
|
prerelease: false
|
81
|
-
version_requirements: *
|
82
|
+
version_requirements: *70249603041740
|
82
83
|
- !ruby/object:Gem::Dependency
|
83
84
|
name: racc
|
84
|
-
requirement: &
|
85
|
+
requirement: &70249603040980 !ruby/object:Gem::Requirement
|
85
86
|
none: false
|
86
87
|
requirements:
|
87
88
|
- - ! '>='
|
@@ -89,10 +90,21 @@ dependencies:
|
|
89
90
|
version: 1.4.6
|
90
91
|
type: :development
|
91
92
|
prerelease: false
|
92
|
-
version_requirements: *
|
93
|
+
version_requirements: *70249603040980
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rake
|
96
|
+
requirement: &70249603040300 !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0.9'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: *70249603040300
|
93
105
|
- !ruby/object:Gem::Dependency
|
94
106
|
name: rake-compiler
|
95
|
-
requirement: &
|
107
|
+
requirement: &70249603101660 !ruby/object:Gem::Requirement
|
96
108
|
none: false
|
97
109
|
requirements:
|
98
110
|
- - =
|
@@ -100,10 +112,10 @@ dependencies:
|
|
100
112
|
version: 0.8.0
|
101
113
|
type: :development
|
102
114
|
prerelease: false
|
103
|
-
version_requirements: *
|
115
|
+
version_requirements: *70249603101660
|
104
116
|
- !ruby/object:Gem::Dependency
|
105
117
|
name: rexical
|
106
|
-
requirement: &
|
118
|
+
requirement: &70249603100880 !ruby/object:Gem::Requirement
|
107
119
|
none: false
|
108
120
|
requirements:
|
109
121
|
- - ! '>='
|
@@ -111,10 +123,10 @@ dependencies:
|
|
111
123
|
version: 1.0.5
|
112
124
|
type: :development
|
113
125
|
prerelease: false
|
114
|
-
version_requirements: *
|
126
|
+
version_requirements: *70249603100880
|
115
127
|
- !ruby/object:Gem::Dependency
|
116
128
|
name: rdoc
|
117
|
-
requirement: &
|
129
|
+
requirement: &70249603100140 !ruby/object:Gem::Requirement
|
118
130
|
none: false
|
119
131
|
requirements:
|
120
132
|
- - ~>
|
@@ -122,10 +134,10 @@ dependencies:
|
|
122
134
|
version: '3.10'
|
123
135
|
type: :development
|
124
136
|
prerelease: false
|
125
|
-
version_requirements: *
|
137
|
+
version_requirements: *70249603100140
|
126
138
|
- !ruby/object:Gem::Dependency
|
127
139
|
name: hoe
|
128
|
-
requirement: &
|
140
|
+
requirement: &70249603099380 !ruby/object:Gem::Requirement
|
129
141
|
none: false
|
130
142
|
requirements:
|
131
143
|
- - ~>
|
@@ -133,7 +145,7 @@ dependencies:
|
|
133
145
|
version: '2.16'
|
134
146
|
type: :development
|
135
147
|
prerelease: false
|
136
|
-
version_requirements: *
|
148
|
+
version_requirements: *70249603099380
|
137
149
|
description: ! 'Nokogiri (鋸) is an HTML, XML, SAX, and Reader parser. Among Nokogiri''s
|
138
150
|
|
139
151
|
many features is the ability to search documents via XPath or CSS3 selectors.
|
@@ -146,6 +158,7 @@ email:
|
|
146
158
|
- aaronp@rubyforge.org
|
147
159
|
- mike.dalessio@gmail.com
|
148
160
|
- yokolet@gmail.com
|
161
|
+
- tle@holymonkey.com
|
149
162
|
executables:
|
150
163
|
- nokogiri
|
151
164
|
extensions:
|
@@ -159,19 +172,13 @@ extra_rdoc_files:
|
|
159
172
|
- README.rdoc
|
160
173
|
- ext/nokogiri/html_element_description.c
|
161
174
|
- ext/nokogiri/html_entity_lookup.c
|
162
|
-
- ext/nokogiri/xml_attr.c
|
163
175
|
- ext/nokogiri/xml_attribute_decl.c
|
164
|
-
- ext/nokogiri/xml_cdata.c
|
165
|
-
- ext/nokogiri/xml_comment.c
|
166
|
-
- ext/nokogiri/xml_document_fragment.c
|
167
176
|
- ext/nokogiri/xml_dtd.c
|
168
177
|
- ext/nokogiri/xml_element_content.c
|
169
178
|
- ext/nokogiri/xml_element_decl.c
|
170
179
|
- ext/nokogiri/xml_encoding_handler.c
|
171
180
|
- ext/nokogiri/xml_entity_decl.c
|
172
|
-
- ext/nokogiri/xml_entity_reference.c
|
173
181
|
- ext/nokogiri/xml_libxml2_hacks.c
|
174
|
-
- ext/nokogiri/xml_processing_instruction.c
|
175
182
|
- ext/nokogiri/xml_sax_parser.c
|
176
183
|
- ext/nokogiri/st.c
|
177
184
|
- ext/nokogiri/xml_reader.c
|
@@ -181,17 +188,23 @@ extra_rdoc_files:
|
|
181
188
|
- ext/nokogiri/xml_syntax_error.c
|
182
189
|
- ext/nokogiri/html_document.c
|
183
190
|
- ext/nokogiri/html_sax_push_parser.c
|
184
|
-
- ext/nokogiri/nokogiri.c
|
185
191
|
- ext/nokogiri/xml_io.c
|
186
192
|
- ext/nokogiri/xml_namespace.c
|
187
|
-
- ext/nokogiri/xml_text.c
|
188
193
|
- ext/nokogiri/xslt_stylesheet.c
|
189
|
-
- ext/nokogiri/xml_xpath_context.c
|
190
194
|
- ext/nokogiri/xml_sax_parser_context.c
|
191
195
|
- ext/nokogiri/xml_node_set.c
|
196
|
+
- ext/nokogiri/html_sax_parser_context.c
|
197
|
+
- ext/nokogiri/xml_attr.c
|
198
|
+
- ext/nokogiri/xml_cdata.c
|
199
|
+
- ext/nokogiri/xml_comment.c
|
200
|
+
- ext/nokogiri/xml_document_fragment.c
|
201
|
+
- ext/nokogiri/xml_entity_reference.c
|
202
|
+
- ext/nokogiri/xml_processing_instruction.c
|
203
|
+
- ext/nokogiri/xml_text.c
|
204
|
+
- ext/nokogiri/xml_xpath_context.c
|
192
205
|
- ext/nokogiri/xml_node.c
|
193
206
|
- ext/nokogiri/xml_document.c
|
194
|
-
- ext/nokogiri/
|
207
|
+
- ext/nokogiri/nokogiri.c
|
195
208
|
files:
|
196
209
|
- .autotest
|
197
210
|
- .gemtest
|
@@ -451,7 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
451
464
|
- !ruby/object:Gem::Version
|
452
465
|
version: '0'
|
453
466
|
requirements: []
|
454
|
-
rubyforge_project: maglev-
|
467
|
+
rubyforge_project: nokogiri-maglev-
|
455
468
|
rubygems_version: 1.8.11
|
456
469
|
signing_key:
|
457
470
|
specification_version: 3
|
@@ -490,7 +503,6 @@ test_files:
|
|
490
503
|
- test/xml/test_entity_decl.rb
|
491
504
|
- test/xml/test_entity_reference.rb
|
492
505
|
- test/xml/test_node_encoding.rb
|
493
|
-
- test/xml/test_parse_options.rb
|
494
506
|
- test/xml/test_processing_instruction.rb
|
495
507
|
- test/xml/test_relax_ng.rb
|
496
508
|
- test/xml/test_schema.rb
|
@@ -500,19 +512,20 @@ test_files:
|
|
500
512
|
- test/xml/test_c14n.rb
|
501
513
|
- test/xml/test_cdata.rb
|
502
514
|
- test/xml/test_document_encoding.rb
|
503
|
-
- test/xml/test_document_fragment.rb
|
504
515
|
- test/xml/test_namespace.rb
|
505
516
|
- test/xml/test_node_attributes.rb
|
506
517
|
- test/xml/test_node_inheritance.rb
|
507
518
|
- test/xml/test_node_reparenting.rb
|
508
|
-
- test/xml/test_node_set.rb
|
509
519
|
- test/xml/test_reader_encoding.rb
|
510
520
|
- test/xml/test_text.rb
|
511
521
|
- test/xml/test_unparented_node.rb
|
512
522
|
- test/xml/test_xinclude.rb
|
513
523
|
- test/xml/test_xpath.rb
|
514
|
-
- test/xml/test_node.rb
|
515
524
|
- test/xml/test_document.rb
|
525
|
+
- test/xml/test_document_fragment.rb
|
526
|
+
- test/xml/test_node_set.rb
|
527
|
+
- test/xml/test_parse_options.rb
|
528
|
+
- test/xml/test_node.rb
|
516
529
|
- test/xslt/test_exception_handling.rb
|
517
530
|
- test/xslt/test_custom_functions.rb
|
518
531
|
- test/test_nokogiri.rb
|