nokogiri 1.6.1-java → 1.6.2-java
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 +4 -4
- data/.editorconfig +17 -0
- data/.travis.yml +6 -6
- data/CHANGELOG.ja.rdoc +61 -8
- data/CHANGELOG.rdoc +58 -3
- data/Gemfile +3 -3
- data/Manifest.txt +57 -1
- data/README.ja.rdoc +22 -17
- data/README.rdoc +23 -18
- data/ROADMAP.md +1 -2
- data/Rakefile +162 -58
- data/build_all +56 -31
- data/dependencies.yml +3 -3
- data/ext/java/nokogiri/NokogiriService.java +9 -5
- data/ext/java/nokogiri/XmlDocument.java +95 -54
- data/ext/java/nokogiri/XmlNode.java +93 -42
- data/ext/java/nokogiri/XmlReader.java +1 -1
- data/ext/java/nokogiri/XmlSaxParserContext.java +33 -0
- data/ext/java/nokogiri/XmlSchema.java +4 -2
- data/ext/java/nokogiri/XmlXpathContext.java +118 -76
- data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +20 -0
- data/ext/java/nokogiri/internals/NokogiriHandler.java +3 -10
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +40 -23
- data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +59 -54
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +1 -1
- data/ext/java/nokogiri/internals/ParserContext.java +1 -4
- data/ext/java/nokogiri/internals/SaveContextVisitor.java +6 -2
- data/ext/java/nokogiri/internals/c14n/AttrCompare.java +119 -0
- data/ext/java/nokogiri/internals/c14n/C14nHelper.java +159 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +37 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +93 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +252 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +639 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +38 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +38 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +368 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +295 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +40 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +44 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +44 -0
- data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +43 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +630 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +173 -0
- data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +76 -0
- data/ext/java/nokogiri/internals/c14n/Constants.java +42 -0
- data/ext/java/nokogiri/internals/c14n/ElementProxy.java +293 -0
- data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +93 -0
- data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +79 -0
- data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +165 -0
- data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +76 -0
- data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +402 -0
- data/ext/java/nokogiri/internals/c14n/NodeFilter.java +51 -0
- data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +179 -0
- data/ext/java/nokogiri/internals/c14n/XMLUtils.java +507 -0
- data/ext/nokogiri/extconf.rb +429 -128
- data/ext/nokogiri/html_document.c +2 -2
- data/ext/nokogiri/nokogiri.c +6 -1
- data/ext/nokogiri/xml_document.c +5 -4
- data/ext/nokogiri/xml_node.c +76 -7
- data/ext/nokogiri/xml_reader.c +1 -1
- data/ext/nokogiri/xml_sax_parser_context.c +40 -0
- data/ext/nokogiri/xml_syntax_error.c +10 -5
- data/ext/nokogiri/xml_syntax_error.h +1 -1
- data/ext/nokogiri/xml_xpath_context.c +2 -14
- data/ext/nokogiri/xslt_stylesheet.c +1 -1
- data/lib/nokogiri.rb +31 -22
- data/lib/nokogiri/css/node.rb +0 -50
- data/lib/nokogiri/css/parser.rb +213 -218
- data/lib/nokogiri/css/parser.y +21 -30
- data/lib/nokogiri/css/xpath_visitor.rb +62 -14
- data/lib/nokogiri/html/document.rb +97 -18
- data/lib/nokogiri/html/sax/parser.rb +2 -2
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/version.rb +1 -1
- data/lib/nokogiri/xml/builder.rb +1 -1
- data/lib/nokogiri/xml/document.rb +2 -2
- data/lib/nokogiri/xml/dtd.rb +10 -0
- data/lib/nokogiri/xml/node.rb +26 -1
- data/lib/nokogiri/xml/sax/parser.rb +1 -1
- data/ports/patches/libxml2/0001-Fix-parser-local-buffers-size-problems.patch +265 -0
- data/ports/patches/libxml2/0002-Fix-entities-local-buffers-size-problems.patch +102 -0
- data/ports/patches/libxml2/0003-Fix-an-error-in-previous-commit.patch +26 -0
- data/ports/patches/libxml2/0004-Fix-potential-out-of-bound-access.patch +26 -0
- data/ports/patches/libxml2/0005-Detect-excessive-entities-expansion-upon-replacement.patch +158 -0
- data/ports/patches/libxml2/0006-Do-not-fetch-external-parsed-entities.patch +78 -0
- data/ports/patches/libxml2/0007-Enforce-XML_PARSER_EOF-state-handling-through-the-pa.patch +480 -0
- data/ports/patches/libxml2/0008-Improve-handling-of-xmlStopParser.patch +315 -0
- data/ports/patches/libxml2/0009-Fix-a-couple-of-return-without-value.patch +37 -0
- data/ports/patches/libxslt/0001-Adding-doc-update-related-to-1.1.28.patch +222 -0
- data/ports/patches/libxslt/0002-Fix-a-couple-of-places-where-f-printf-parameters-wer.patch +53 -0
- data/ports/patches/libxslt/0003-Initialize-pseudo-random-number-generator-with-curre.patch +60 -0
- data/ports/patches/libxslt/0004-EXSLT-function-str-replace-is-broken-as-is.patch +42 -0
- data/ports/patches/libxslt/0006-Fix-str-padding-to-work-with-UTF-8-strings.patch +164 -0
- data/ports/patches/libxslt/0007-Separate-function-for-predicate-matching-in-patterns.patch +587 -0
- data/ports/patches/libxslt/0008-Fix-direct-pattern-matching.patch +80 -0
- data/ports/patches/libxslt/0009-Fix-certain-patterns-with-predicates.patch +185 -0
- data/ports/patches/libxslt/0010-Fix-handling-of-UTF-8-strings-in-EXSLT-crypto-module.patch +126 -0
- data/ports/patches/libxslt/0013-Memory-leak-in-xsltCompileIdKeyPattern-error-path.patch +25 -0
- data/ports/patches/libxslt/0014-Fix-for-bug-436589.patch +43 -0
- data/ports/patches/libxslt/0015-Fix-mkdir-for-mingw.patch +41 -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/test/css/test_nthiness.rb +65 -2
- data/test/css/test_parser.rb +27 -10
- data/test/css/test_tokenizer.rb +1 -1
- data/test/css/test_xpath_visitor.rb +6 -1
- data/test/files/atom.xml +344 -0
- data/test/files/shift_jis_no_charset.html +9 -0
- data/test/helper.rb +10 -0
- data/test/html/test_document.rb +74 -7
- data/test/html/test_document_encoding.rb +10 -0
- data/test/html/test_document_fragment.rb +9 -3
- data/test/namespaces/test_namespaces_aliased_default.rb +24 -0
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +31 -0
- data/test/namespaces/test_namespaces_preservation.rb +31 -0
- data/test/test_nokogiri.rb +6 -0
- data/test/test_reader.rb +7 -4
- data/test/test_xslt_transforms.rb +25 -0
- data/test/xml/sax/test_parser.rb +16 -0
- data/test/xml/sax/test_parser_context.rb +9 -0
- data/test/xml/test_builder.rb +9 -0
- data/test/xml/test_c14n.rb +12 -2
- data/test/xml/test_document.rb +66 -0
- data/test/xml/test_document_fragment.rb +5 -0
- data/test/xml/test_dtd.rb +84 -0
- data/test/xml/test_entity_reference.rb +3 -3
- data/test/xml/test_node.rb +21 -3
- data/test/xml/test_node_attributes.rb +17 -0
- data/test/xml/test_schema.rb +26 -0
- data/test/xml/test_text.rb +15 -0
- data/test/xml/test_xpath.rb +87 -0
- data/test_all +3 -3
- metadata +119 -68
- data/tasks/cross_compile.rb +0 -134
@@ -0,0 +1,41 @@
|
|
1
|
+
From a7ff3f0043f02d4ade966b6ac05b8be39166daa7 Mon Sep 17 00:00:00 2001
|
2
|
+
From: Lars Kanis <lars@greiz-reinsdorf.de>
|
3
|
+
Date: Sun, 6 Oct 2013 22:04:46 +0200
|
4
|
+
Subject: [PATCH] Use mkdir macro also in case if mingw32.
|
5
|
+
|
6
|
+
This fixes bug 676511.
|
7
|
+
---
|
8
|
+
libxslt/libxslt.h | 6 ++++++
|
9
|
+
libxslt/win32config.h | 1 -
|
10
|
+
2 files changed, 6 insertions(+), 1 deletion(-)
|
11
|
+
|
12
|
+
diff --git a/libxslt/libxslt.h b/libxslt/libxslt.h
|
13
|
+
index 2f6f20d..e6d4c83 100644
|
14
|
+
--- a/libxslt/libxslt.h
|
15
|
+
+++ b/libxslt/libxslt.h
|
16
|
+
@@ -27,4 +27,10 @@
|
17
|
+
#endif
|
18
|
+
#endif
|
19
|
+
|
20
|
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
|
21
|
+
+#include <io.h>
|
22
|
+
+#include <direct.h>
|
23
|
+
+#define mkdir(p,m) _mkdir(p)
|
24
|
+
+#endif
|
25
|
+
+
|
26
|
+
#endif /* ! __XSLT_LIBXSLT_H__ */
|
27
|
+
diff --git a/libxslt/win32config.h b/libxslt/win32config.h
|
28
|
+
index 9f60e55..e1ceae1 100644
|
29
|
+
--- a/libxslt/win32config.h
|
30
|
+
+++ b/libxslt/win32config.h
|
31
|
+
@@ -78,7 +78,6 @@ static int isnan (double d) {
|
32
|
+
|
33
|
+
#include <direct.h>
|
34
|
+
#if defined(_MSC_VER) || defined(__MINGW32__)
|
35
|
+
-#define mkdir(p,m) _mkdir(p)
|
36
|
+
#define snprintf _snprintf
|
37
|
+
#if _MSC_VER < 1500
|
38
|
+
#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
|
39
|
+
--
|
40
|
+
1.8.3.2
|
41
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
This directory contains valgrind suppression files generated by the hoe-debugging gem.
|
@@ -0,0 +1,61 @@
|
|
1
|
+
{
|
2
|
+
<insert_a_suppression_name_here>
|
3
|
+
Memcheck:Addr8
|
4
|
+
fun:garbage_collect
|
5
|
+
fun:rb_newobj
|
6
|
+
fun:rb_node_newnode
|
7
|
+
fun:ruby_yyparse
|
8
|
+
fun:yycompile
|
9
|
+
fun:load_file
|
10
|
+
fun:rb_load
|
11
|
+
fun:rb_require_safe
|
12
|
+
fun:rb_call0
|
13
|
+
fun:rb_call
|
14
|
+
fun:eval_fcall
|
15
|
+
fun:rb_eval
|
16
|
+
fun:rb_load
|
17
|
+
fun:rb_require_safe
|
18
|
+
fun:rb_call0
|
19
|
+
fun:rb_call
|
20
|
+
fun:eval_fcall
|
21
|
+
fun:rb_eval
|
22
|
+
fun:rb_load
|
23
|
+
fun:rb_require_safe
|
24
|
+
fun:rb_protect
|
25
|
+
fun:require_libraries
|
26
|
+
fun:proc_options
|
27
|
+
fun:ruby_process_options
|
28
|
+
}
|
29
|
+
{
|
30
|
+
<insert_a_suppression_name_here>
|
31
|
+
Memcheck:Addr8
|
32
|
+
fun:garbage_collect_0
|
33
|
+
fun:rb_newobj
|
34
|
+
fun:rb_node_newnode
|
35
|
+
fun:ruby_yyparse
|
36
|
+
fun:yycompile
|
37
|
+
fun:load_file
|
38
|
+
fun:rb_load
|
39
|
+
fun:rb_require_safe
|
40
|
+
fun:rb_call0
|
41
|
+
fun:rb_call
|
42
|
+
fun:eval_fcall
|
43
|
+
fun:rb_eval
|
44
|
+
fun:rb_load
|
45
|
+
fun:rb_require_safe
|
46
|
+
fun:rb_call0
|
47
|
+
fun:rb_call
|
48
|
+
fun:eval_fcall
|
49
|
+
fun:rb_eval
|
50
|
+
fun:rb_load
|
51
|
+
fun:rb_require_safe
|
52
|
+
fun:rb_protect
|
53
|
+
fun:require_libraries
|
54
|
+
fun:proc_options
|
55
|
+
fun:ruby_process_options
|
56
|
+
}
|
57
|
+
{
|
58
|
+
<insert_a_suppression_name_here>
|
59
|
+
Memcheck:Addr8
|
60
|
+
fun:rb_gc_wipe_stack
|
61
|
+
}
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
<insert_a_suppression_name_here>
|
3
|
+
Memcheck:Addr4
|
4
|
+
fun:glob_helper
|
5
|
+
fun:ruby_glob0
|
6
|
+
fun:rb_push_glob
|
7
|
+
fun:vm_call_method
|
8
|
+
fun:vm_exec_core
|
9
|
+
fun:vm_exec
|
10
|
+
fun:rb_yield
|
11
|
+
fun:rb_ary_each
|
12
|
+
fun:vm_call_method
|
13
|
+
fun:vm_exec_core
|
14
|
+
fun:vm_exec
|
15
|
+
fun:vm_call0
|
16
|
+
fun:rb_iterate
|
17
|
+
fun:rb_block_call
|
18
|
+
fun:enum_find_all
|
19
|
+
fun:vm_call_method
|
20
|
+
fun:vm_exec_core
|
21
|
+
fun:vm_exec
|
22
|
+
fun:vm_call0
|
23
|
+
fun:rb_class_new_instance
|
24
|
+
fun:vm_call_method
|
25
|
+
fun:vm_exec_core
|
26
|
+
fun:vm_exec
|
27
|
+
fun:vm_call0
|
28
|
+
}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
<insert_a_suppression_name_here>
|
3
|
+
Memcheck:Addr4
|
4
|
+
fun:glob_helper
|
5
|
+
fun:ruby_glob0
|
6
|
+
fun:rb_push_glob
|
7
|
+
fun:vm_call_method
|
8
|
+
fun:vm_exec_core
|
9
|
+
fun:vm_exec
|
10
|
+
fun:rb_yield
|
11
|
+
fun:rb_ary_each
|
12
|
+
fun:vm_call_method
|
13
|
+
fun:vm_exec_core
|
14
|
+
fun:vm_exec
|
15
|
+
fun:vm_call0
|
16
|
+
fun:rb_iterate
|
17
|
+
fun:rb_block_call
|
18
|
+
fun:enum_find_all
|
19
|
+
fun:vm_call_method
|
20
|
+
fun:vm_exec_core
|
21
|
+
fun:vm_exec
|
22
|
+
fun:vm_call0
|
23
|
+
fun:rb_class_new_instance
|
24
|
+
fun:vm_call_method
|
25
|
+
fun:vm_exec_core
|
26
|
+
fun:vm_exec
|
27
|
+
fun:vm_call0
|
28
|
+
}
|
data/test/css/test_nthiness.rb
CHANGED
@@ -26,10 +26,20 @@ module Nokogiri
|
|
26
26
|
<div>
|
27
27
|
<b>bold1 </b>
|
28
28
|
<i>italic1 </i>
|
29
|
-
<b>bold2 </b>
|
29
|
+
<b class="a">bold2 </b>
|
30
|
+
<em class="a">emphasis1 </em>
|
30
31
|
<i>italic2 </i>
|
31
32
|
<p>para1 </p>
|
32
|
-
<b>bold3 </b>
|
33
|
+
<b class="a">bold3 </b>
|
34
|
+
</div>
|
35
|
+
<div>
|
36
|
+
<i class="b">italic3 </i>
|
37
|
+
<em>emphasis2 </em>
|
38
|
+
<i class="b">italic4 </i>
|
39
|
+
<em>emphasis3 </em>
|
40
|
+
<i class="c">italic5 </i>
|
41
|
+
<span><i class="b">italic6 </i></span>
|
42
|
+
<i>italic7 </i>
|
33
43
|
</div>
|
34
44
|
<div>
|
35
45
|
<p>para2 </p>
|
@@ -38,6 +48,20 @@ module Nokogiri
|
|
38
48
|
<div>
|
39
49
|
<p>para4 </p>
|
40
50
|
</div>
|
51
|
+
|
52
|
+
<div>
|
53
|
+
<h2></h2>
|
54
|
+
<h1 class='c'>header1 </h1>
|
55
|
+
<h2></h2>
|
56
|
+
</div>
|
57
|
+
<div>
|
58
|
+
<h1 class='c'>header2 </h1>
|
59
|
+
<h1 class='c'>header3 </h1>
|
60
|
+
</div>
|
61
|
+
<div>
|
62
|
+
<h1 class='c'>header4</h1>
|
63
|
+
</div>
|
64
|
+
|
41
65
|
<p class='empty'></p>
|
42
66
|
<p class='not-empty'><b></b></p>
|
43
67
|
</html>
|
@@ -74,6 +98,10 @@ EOF
|
|
74
98
|
assert_result_rows [1,2,3], @parser.search("table/tr:nth(-n+3)")
|
75
99
|
end
|
76
100
|
|
101
|
+
def test_4nm1
|
102
|
+
assert_result_rows [3,7,11], @parser.search("table/tr:nth(4n-1)")
|
103
|
+
end
|
104
|
+
|
77
105
|
def test_np3
|
78
106
|
assert_result_rows [3,4,5,6,7,8,9,10,11,12,13,14], @parser.search("table/tr:nth(n+3)")
|
79
107
|
end
|
@@ -91,29 +119,64 @@ EOF
|
|
91
119
|
def test_first_child
|
92
120
|
assert_result_rows [1], @parser.search("div/b:first-child"), "bold"
|
93
121
|
assert_result_rows [1], @parser.search("table/tr:first-child")
|
122
|
+
assert_result_rows [2,4], @parser.search("div/h1.c:first-child"), "header"
|
94
123
|
end
|
95
124
|
|
96
125
|
def test_last_child
|
97
126
|
assert_result_rows [3], @parser.search("div/b:last-child"), "bold"
|
98
127
|
assert_result_rows [14], @parser.search("table/tr:last-child")
|
128
|
+
assert_result_rows [3,4], @parser.search("div/h1.c:last-child"), "header"
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_nth_child
|
132
|
+
assert_result_rows [2], @parser.search("div/b:nth-child(3)"), "bold"
|
133
|
+
assert_result_rows [5], @parser.search("table/tr:nth-child(5)")
|
134
|
+
assert_result_rows [1,3], @parser.search("div/h1.c:nth-child(2)"), "header"
|
135
|
+
assert_result_rows [3,4], @parser.search("div/i.b:nth-child(2n+1)"), "italic"
|
99
136
|
end
|
100
137
|
|
101
138
|
def test_first_of_type
|
102
139
|
assert_result_rows [1], @parser.search("table/tr:first-of-type")
|
103
140
|
assert_result_rows [1], @parser.search("div/b:first-of-type"), "bold"
|
141
|
+
assert_result_rows [2], @parser.search("div/b.a:first-of-type"), "bold"
|
142
|
+
assert_result_rows [3], @parser.search("div/i.b:first-of-type"), "italic"
|
104
143
|
end
|
105
144
|
|
106
145
|
def test_last_of_type
|
107
146
|
assert_result_rows [14], @parser.search("table/tr:last-of-type")
|
108
147
|
assert_result_rows [3], @parser.search("div/b:last-of-type"), "bold"
|
148
|
+
assert_result_rows [2,7], @parser.search("div/i:last-of-type"), "italic"
|
149
|
+
assert_result_rows [2,6,7], @parser.search("div i:last-of-type"), "italic"
|
150
|
+
assert_result_rows [4], @parser.search("div/i.b:last-of-type"), "italic"
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_nth_of_type
|
154
|
+
assert_result_rows [1], @parser.search("div/b:nth-of-type(1)"), "bold"
|
155
|
+
assert_result_rows [2], @parser.search("div/b:nth-of-type(2)"), "bold"
|
156
|
+
assert_result_rows [2], @parser.search("div/.a:nth-of-type(1)"), "bold"
|
157
|
+
assert_result_rows [2,4,7], @parser.search("div i:nth-of-type(2n)"), "italic"
|
158
|
+
assert_result_rows [1,3,5,6], @parser.search("div i:nth-of-type(2n+1)"), "italic"
|
159
|
+
assert_result_rows [1], @parser.search("div .a:nth-of-type(2n)"), "emphasis"
|
160
|
+
assert_result_rows [2,3], @parser.search("div .a:nth-of-type(2n+1)"), "bold"
|
161
|
+
end
|
162
|
+
|
163
|
+
def test_nth_last_of_type
|
164
|
+
assert_result_rows [14], @parser.search("table/tr:nth-last-of-type(1)")
|
165
|
+
assert_result_rows [12], @parser.search("table/tr:nth-last-of-type(3)")
|
166
|
+
assert_result_rows [2,6,7], @parser.search("div i:nth-last-of-type(1)"), "italic"
|
167
|
+
assert_result_rows [1,5], @parser.search("div i:nth-last-of-type(2)"), "italic"
|
168
|
+
assert_result_rows [4], @parser.search("div/i.b:nth-last-of-type(1)"), "italic"
|
169
|
+
assert_result_rows [3], @parser.search("div/i.b:nth-last-of-type(2)"), "italic"
|
109
170
|
end
|
110
171
|
|
111
172
|
def test_only_of_type
|
112
173
|
assert_result_rows [1,4], @parser.search("div/p:only-of-type"), "para"
|
174
|
+
assert_result_rows [5], @parser.search("div/i.c:only-of-type"), "italic"
|
113
175
|
end
|
114
176
|
|
115
177
|
def test_only_child
|
116
178
|
assert_result_rows [4], @parser.search("div/p:only-child"), "para"
|
179
|
+
assert_result_rows [4], @parser.search("div/h1.c:only-child"), "header"
|
117
180
|
end
|
118
181
|
|
119
182
|
def test_empty
|
data/test/css/test_parser.rb
CHANGED
@@ -82,9 +82,9 @@ module Nokogiri
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def test_function_with_arguments
|
85
|
-
assert_xpath "
|
85
|
+
assert_xpath "//a[count(preceding-sibling::*) = 1]",
|
86
86
|
@parser.parse("a[2]")
|
87
|
-
assert_xpath "
|
87
|
+
assert_xpath "//a[count(preceding-sibling::*) = 1]",
|
88
88
|
@parser.parse("a:nth-child(2)")
|
89
89
|
end
|
90
90
|
|
@@ -158,24 +158,31 @@ module Nokogiri
|
|
158
158
|
def test_standard_nth_selectors
|
159
159
|
assert_xpath '//a[position() = 1]', @parser.parse('a:first-of-type()')
|
160
160
|
assert_xpath '//a[position() = 1]', @parser.parse('a:first-of-type') # no parens
|
161
|
-
assert_xpath
|
161
|
+
assert_xpath "//a[contains(concat(' ', normalize-space(@class), ' '), ' b ')][position() = 1]",
|
162
|
+
@parser.parse('a.b:first-of-type') # no parens
|
163
|
+
assert_xpath '//a[position() = 99]', @parser.parse('a:nth-of-type(99)')
|
164
|
+
assert_xpath "//a[contains(concat(' ', normalize-space(@class), ' '), ' b ')][position() = 99]",
|
165
|
+
@parser.parse('a.b:nth-of-type(99)')
|
162
166
|
assert_xpath '//a[position() = last()]', @parser.parse('a:last-of-type()')
|
163
167
|
assert_xpath '//a[position() = last()]', @parser.parse('a:last-of-type') # no parens
|
168
|
+
assert_xpath "//a[contains(concat(' ', normalize-space(@class), ' '), ' b ')][position() = last()]",
|
169
|
+
@parser.parse('a.b:last-of-type') # no parens
|
164
170
|
assert_xpath '//a[position() = last()]', @parser.parse('a:nth-last-of-type(1)')
|
165
171
|
assert_xpath '//a[position() = last() - 98]', @parser.parse('a:nth-last-of-type(99)')
|
172
|
+
assert_xpath "//a[contains(concat(' ', normalize-space(@class), ' '), ' b ')][position() = last() - 98]",
|
173
|
+
@parser.parse('a.b:nth-last-of-type(99)')
|
166
174
|
end
|
167
175
|
|
168
176
|
def test_nth_child_selectors
|
169
|
-
assert_xpath '
|
170
|
-
assert_xpath '
|
171
|
-
assert_xpath '
|
172
|
-
assert_xpath '
|
173
|
-
assert_xpath '
|
177
|
+
assert_xpath '//a[count(preceding-sibling::*) = 0]', @parser.parse('a:first-child')
|
178
|
+
assert_xpath '//a[count(preceding-sibling::*) = 98]', @parser.parse('a:nth-child(99)')
|
179
|
+
assert_xpath '//a[count(following-sibling::*) = 0]', @parser.parse('a:last-child')
|
180
|
+
assert_xpath '//a[count(following-sibling::*) = 0]', @parser.parse('a:nth-last-child(1)')
|
181
|
+
assert_xpath '//a[count(following-sibling::*) = 98]', @parser.parse('a:nth-last-child(99)')
|
174
182
|
end
|
175
183
|
|
176
184
|
def test_miscellaneous_selectors
|
177
|
-
assert_xpath '
|
178
|
-
@parser.parse('a:only-child')
|
185
|
+
assert_xpath '//a[count(preceding-sibling::*) = 0 and count(following-sibling::*) = 0]', @parser.parse('a:only-child')
|
179
186
|
assert_xpath '//a[last() = 1]', @parser.parse('a:only-of-type')
|
180
187
|
assert_xpath '//a[not(node())]', @parser.parse('a:empty')
|
181
188
|
end
|
@@ -284,6 +291,11 @@ module Nokogiri
|
|
284
291
|
@parser.parse('foo .awesome')
|
285
292
|
end
|
286
293
|
|
294
|
+
def test_bare_not
|
295
|
+
assert_xpath "//*[not(contains(concat(' ', normalize-space(@class), ' '), ' a '))]",
|
296
|
+
@parser.parse(':not(.a)')
|
297
|
+
end
|
298
|
+
|
287
299
|
def test_not_so_simple_not
|
288
300
|
assert_xpath "//*[@id = 'p' and not(contains(concat(' ', normalize-space(@class), ' '), ' a '))]",
|
289
301
|
@parser.parse('#p:not(.a)')
|
@@ -293,6 +305,11 @@ module Nokogiri
|
|
293
305
|
@parser.parse("p[a='foo']:not(.b)")
|
294
306
|
end
|
295
307
|
|
308
|
+
def test_multiple_not
|
309
|
+
assert_xpath "//p[not(contains(concat(' ', normalize-space(@class), ' '), ' a ')) and not(contains(concat(' ', normalize-space(@class), ' '), ' b ')) and not(contains(concat(' ', normalize-space(@class), ' '), ' c '))]",
|
310
|
+
@parser.parse("p:not(.a):not(.b):not(.c)")
|
311
|
+
end
|
312
|
+
|
296
313
|
def test_ident
|
297
314
|
assert_xpath '//x', @parser.parse('x')
|
298
315
|
end
|
data/test/css/test_tokenizer.rb
CHANGED
@@ -13,10 +13,15 @@ module Nokogiri
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def test_not_last_child
|
16
|
-
assert_xpath('//ol/*[not(
|
16
|
+
assert_xpath('//ol/*[not(count(following-sibling::*) = 0)]',
|
17
17
|
@parser.parse('ol > *:not(:last-child)'))
|
18
18
|
end
|
19
19
|
|
20
|
+
def test_not_only_child
|
21
|
+
assert_xpath('//ol/*[not(count(preceding-sibling::*) = 0 and count(following-sibling::*) = 0)]',
|
22
|
+
@parser.parse('ol > *:not(:only-child)'))
|
23
|
+
end
|
24
|
+
|
20
25
|
def test_function_calls_allow_at_params
|
21
26
|
assert_xpath("//a[foo(., @href)]", @parser.parse('a:foo(@href)'))
|
22
27
|
assert_xpath("//a[foo(., @a, b)]", @parser.parse('a:foo(@a, b)'))
|
data/test/files/atom.xml
ADDED
@@ -0,0 +1,344 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xml:lang="en-US">
|
3
|
+
<id>tag:github.com,2008:/sparklemotion/nokogiri/commits/master</id>
|
4
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commits/master"/>
|
5
|
+
<link type="application/atom+xml" rel="self" href="https://github.com/sparklemotion/nokogiri/commits/master.atom"/>
|
6
|
+
<title>Recent Commits to nokogiri:master</title>
|
7
|
+
<updated>2013-07-02T08:17:16-07:00</updated>
|
8
|
+
<entry>
|
9
|
+
<id>tag:github.com,2008:Grit::Commit/233489ddfe4698b24dfcdc1daf3ca15bc880e4b1</id>
|
10
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/233489ddfe4698b24dfcdc1daf3ca15bc880e4b1"/>
|
11
|
+
<title>
|
12
|
+
Updated changelog with merged pull requests #887 and #931
|
13
|
+
</title>
|
14
|
+
<updated>2013-07-02T08:17:16-07:00</updated>
|
15
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
16
|
+
<author>
|
17
|
+
<name>injekt</name>
|
18
|
+
<uri>https://github.com/injekt</uri>
|
19
|
+
</author>
|
20
|
+
<content type="html">
|
21
|
+
<pre style='white-space:pre-wrap;width:81ex'>Updated changelog with merged pull requests #887 and #931</pre>
|
22
|
+
</content>
|
23
|
+
</entry>
|
24
|
+
<entry>
|
25
|
+
<id>tag:github.com,2008:Grit::Commit/15eff8be4539a3461cfc1e3c8a257e7eed134e01</id>
|
26
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/15eff8be4539a3461cfc1e3c8a257e7eed134e01"/>
|
27
|
+
<title>
|
28
|
+
Merge pull request #887 from Mange/double-not
|
29
|
+
</title>
|
30
|
+
<updated>2013-07-02T08:13:36-07:00</updated>
|
31
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
32
|
+
<author>
|
33
|
+
<name>injekt</name>
|
34
|
+
<uri>https://github.com/injekt</uri>
|
35
|
+
</author>
|
36
|
+
<content type="html">
|
37
|
+
<pre style='white-space:pre-wrap;width:81ex'>Merge pull request #887 from Mange/double-not
|
38
|
+
|
39
|
+
Add support for bare and multiple :not() functions in selectors</pre>
|
40
|
+
</content>
|
41
|
+
</entry>
|
42
|
+
<entry>
|
43
|
+
<id>tag:github.com,2008:Grit::Commit/7a54b1fd1ba1dbcd50d3566bcc62d554eb0fd30e</id>
|
44
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/7a54b1fd1ba1dbcd50d3566bcc62d554eb0fd30e"/>
|
45
|
+
<title>
|
46
|
+
Merge pull request #931 from sorah/dont_call_pkgconfig_when_using_bundled_libraries
|
47
|
+
</title>
|
48
|
+
<updated>2013-07-02T08:11:37-07:00</updated>
|
49
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/74f896b312b786ee75a18073941e2457?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
50
|
+
<author>
|
51
|
+
<name>knu</name>
|
52
|
+
<uri>https://github.com/knu</uri>
|
53
|
+
</author>
|
54
|
+
<content type="html">
|
55
|
+
<pre style='white-space:pre-wrap;width:81ex'>Merge pull request #931 from sorah/dont_call_pkgconfig_when_using_bundled_libraries
|
56
|
+
|
57
|
+
extconf.rb: Don't call pkg_config when using bundled libraries</pre>
|
58
|
+
</content>
|
59
|
+
</entry>
|
60
|
+
<entry>
|
61
|
+
<id>tag:github.com,2008:Grit::Commit/e5b93617ba810a34a4fc70dac76a83f9bebd2ea1</id>
|
62
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/e5b93617ba810a34a4fc70dac76a83f9bebd2ea1"/>
|
63
|
+
<title>
|
64
|
+
extconf.rb: Don't call pkg_config when using bundled libraries
|
65
|
+
</title>
|
66
|
+
<updated>2013-07-02T06:30:00-07:00</updated>
|
67
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/c4f076f658dd3464f1d8785ad53a0d99?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
68
|
+
<author>
|
69
|
+
<name>sorah</name>
|
70
|
+
<uri>https://github.com/sorah</uri>
|
71
|
+
</author>
|
72
|
+
<content type="html">
|
73
|
+
<pre style='white-space:pre-wrap;width:81ex'>extconf.rb: Don't call pkg_config when using bundled libraries</pre>
|
74
|
+
</content>
|
75
|
+
</entry>
|
76
|
+
<entry>
|
77
|
+
<id>tag:github.com,2008:Grit::Commit/64cd3c8f506394b558bda9376844a51db971bd60</id>
|
78
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/64cd3c8f506394b558bda9376844a51db971bd60"/>
|
79
|
+
<title>
|
80
|
+
Add support for bare and multiple :not() functions in selectors
|
81
|
+
</title>
|
82
|
+
<updated>2013-06-28T10:19:36-07:00</updated>
|
83
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/1b2792536d87aa21bc739c14980fa103?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
84
|
+
<author>
|
85
|
+
<name>Mange</name>
|
86
|
+
<uri>https://github.com/Mange</uri>
|
87
|
+
</author>
|
88
|
+
<content type="html">
|
89
|
+
<pre style='white-space:pre-wrap;width:81ex'>Add support for bare and multiple :not() functions in selectors
|
90
|
+
|
91
|
+
This enables parsing of ".flash:not(.error):not(.warning)" and
|
92
|
+
":not(p)".
|
93
|
+
|
94
|
+
This entailed a huge change to the parser, but I think the parser should
|
95
|
+
be a bit more robust now by not declaring :not a special case.</pre>
|
96
|
+
</content>
|
97
|
+
</entry>
|
98
|
+
<entry>
|
99
|
+
<id>tag:github.com,2008:Grit::Commit/37828ec784faf29d713225fa78585854912356cd</id>
|
100
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/37828ec784faf29d713225fa78585854912356cd"/>
|
101
|
+
<title>
|
102
|
+
Report error and stop parsing instead of silently ignoring it.
|
103
|
+
</title>
|
104
|
+
<updated>2013-06-27T18:46:12-07:00</updated>
|
105
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/2736d9750eb13425e9bf70f112753c49?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
106
|
+
<author>
|
107
|
+
<name>jvshahid</name>
|
108
|
+
<uri>https://github.com/jvshahid</uri>
|
109
|
+
</author>
|
110
|
+
<content type="html">
|
111
|
+
<pre style='white-space:pre-wrap;width:81ex'>Report error and stop parsing instead of silently ignoring it.</pre>
|
112
|
+
</content>
|
113
|
+
</entry>
|
114
|
+
<entry>
|
115
|
+
<id>tag:github.com,2008:Grit::Commit/42da60e8ca58a5acc9e8c94ae5ad490589f146c6</id>
|
116
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/42da60e8ca58a5acc9e8c94ae5ad490589f146c6"/>
|
117
|
+
<title>
|
118
|
+
Merge pull request #930 from ctborg/master
|
119
|
+
</title>
|
120
|
+
<updated>2013-06-27T04:23:33-07:00</updated>
|
121
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
122
|
+
<author>
|
123
|
+
<name>injekt</name>
|
124
|
+
<uri>https://github.com/injekt</uri>
|
125
|
+
</author>
|
126
|
+
<content type="html">
|
127
|
+
<pre style='white-space:pre-wrap;width:81ex'>Merge pull request #930 from ctborg/master
|
128
|
+
|
129
|
+
Adds support for Solaris, OpenSolaris, or illumos.</pre>
|
130
|
+
</content>
|
131
|
+
</entry>
|
132
|
+
<entry>
|
133
|
+
<id>tag:github.com,2008:Grit::Commit/7382a6e6a66d3f80da955ebbcd82250f99321900</id>
|
134
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/7382a6e6a66d3f80da955ebbcd82250f99321900"/>
|
135
|
+
<title>
|
136
|
+
Updated CHANGELOG with latest merged pulls
|
137
|
+
</title>
|
138
|
+
<updated>2013-06-27T04:04:17-07:00</updated>
|
139
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
140
|
+
<author>
|
141
|
+
<name>injekt</name>
|
142
|
+
<uri>https://github.com/injekt</uri>
|
143
|
+
</author>
|
144
|
+
<content type="html">
|
145
|
+
<pre style='white-space:pre-wrap;width:81ex'>Updated CHANGELOG with latest merged pulls</pre>
|
146
|
+
</content>
|
147
|
+
</entry>
|
148
|
+
<entry>
|
149
|
+
<id>tag:github.com,2008:Grit::Commit/3382ebc90e17f2503f4acbbdf53a931d38f3322a</id>
|
150
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/3382ebc90e17f2503f4acbbdf53a931d38f3322a"/>
|
151
|
+
<title>
|
152
|
+
Remove REE also.
|
153
|
+
</title>
|
154
|
+
<updated>2013-06-19T20:57:48-07:00</updated>
|
155
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/74f896b312b786ee75a18073941e2457?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
156
|
+
<author>
|
157
|
+
<name>knu</name>
|
158
|
+
<uri>https://github.com/knu</uri>
|
159
|
+
</author>
|
160
|
+
<content type="html">
|
161
|
+
<pre style='white-space:pre-wrap;width:81ex'>Remove REE also.</pre>
|
162
|
+
</content>
|
163
|
+
</entry>
|
164
|
+
<entry>
|
165
|
+
<id>tag:github.com,2008:Grit::Commit/0c83f4027e295435680cda89a44b5e039e0e6cbb</id>
|
166
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/0c83f4027e295435680cda89a44b5e039e0e6cbb"/>
|
167
|
+
<title>
|
168
|
+
Added support for Solaris, OpenSolaris, or illumos
|
169
|
+
</title>
|
170
|
+
<updated>2013-06-19T07:12:50-07:00</updated>
|
171
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/aff9165c0ea741d027799d5694d0ceb8?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
172
|
+
<author>
|
173
|
+
<name></name>
|
174
|
+
<email>cborg@oanda.com</email>
|
175
|
+
</author>
|
176
|
+
<content type="html">
|
177
|
+
<pre style='white-space:pre-wrap;width:81ex'>Added support for Solaris, OpenSolaris, or illumos</pre>
|
178
|
+
</content>
|
179
|
+
</entry>
|
180
|
+
<entry>
|
181
|
+
<id>tag:github.com,2008:Grit::Commit/fb000c51e3ba4e8730a535d38d617d34111c21ef</id>
|
182
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/fb000c51e3ba4e8730a535d38d617d34111c21ef"/>
|
183
|
+
<title>
|
184
|
+
Ensure meta_encoding checks meta charset tag (closes #919)
|
185
|
+
</title>
|
186
|
+
<updated>2013-06-14T06:06:26-07:00</updated>
|
187
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
188
|
+
<author>
|
189
|
+
<name>injekt</name>
|
190
|
+
<uri>https://github.com/injekt</uri>
|
191
|
+
</author>
|
192
|
+
<content type="html">
|
193
|
+
<pre style='white-space:pre-wrap;width:81ex'>Ensure meta_encoding checks meta charset tag (closes #919)</pre>
|
194
|
+
</content>
|
195
|
+
</entry>
|
196
|
+
<entry>
|
197
|
+
<id>tag:github.com,2008:Grit::Commit/14b7dc21bbeddec1990726760e6f6cc11e71542e</id>
|
198
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/14b7dc21bbeddec1990726760e6f6cc11e71542e"/>
|
199
|
+
<title>
|
200
|
+
Updated ROADMAP
|
201
|
+
</title>
|
202
|
+
<updated>2013-06-14T06:00:57-07:00</updated>
|
203
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
204
|
+
<author>
|
205
|
+
<name>injekt</name>
|
206
|
+
<uri>https://github.com/injekt</uri>
|
207
|
+
</author>
|
208
|
+
<content type="html">
|
209
|
+
<pre style='white-space:pre-wrap;width:81ex'>Updated ROADMAP</pre>
|
210
|
+
</content>
|
211
|
+
</entry>
|
212
|
+
<entry>
|
213
|
+
<id>tag:github.com,2008:Grit::Commit/d1b0afd02f8a2b783380bdfde3acfabf021a0c5a</id>
|
214
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/d1b0afd02f8a2b783380bdfde3acfabf021a0c5a"/>
|
215
|
+
<title>
|
216
|
+
Merge pull request #858 from ykzts/feature/not-only-child
|
217
|
+
</title>
|
218
|
+
<updated>2013-06-14T05:53:28-07:00</updated>
|
219
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
220
|
+
<author>
|
221
|
+
<name>injekt</name>
|
222
|
+
<uri>https://github.com/injekt</uri>
|
223
|
+
</author>
|
224
|
+
<content type="html">
|
225
|
+
<pre style='white-space:pre-wrap;width:81ex'>Merge pull request #858 from ykzts/feature/not-only-child
|
226
|
+
|
227
|
+
Add feature that the ':only-child' pseudo class should work even though it's in ':not' pseudo class.</pre>
|
228
|
+
</content>
|
229
|
+
</entry>
|
230
|
+
<entry>
|
231
|
+
<id>tag:github.com,2008:Grit::Commit/d24eb8508c69f2cf336f1ff1b6887fcc3b317fbc</id>
|
232
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/d24eb8508c69f2cf336f1ff1b6887fcc3b317fbc"/>
|
233
|
+
<title>
|
234
|
+
Merge pull request #886 from Mange/negative-nth
|
235
|
+
</title>
|
236
|
+
<updated>2013-06-14T05:50:13-07:00</updated>
|
237
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/9077af710bdadc972a7898e457bf6ec1?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
238
|
+
<author>
|
239
|
+
<name>injekt</name>
|
240
|
+
<uri>https://github.com/injekt</uri>
|
241
|
+
</author>
|
242
|
+
<content type="html">
|
243
|
+
<pre style='white-space:pre-wrap;width:81ex'>Merge pull request #886 from Mange/negative-nth
|
244
|
+
|
245
|
+
Add support for an-b in nth selectors</pre>
|
246
|
+
</content>
|
247
|
+
</entry>
|
248
|
+
<entry>
|
249
|
+
<id>tag:github.com,2008:Grit::Commit/11eaf3d3f1b84adf5225b6686119dbc6714b4009</id>
|
250
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/11eaf3d3f1b84adf5225b6686119dbc6714b4009"/>
|
251
|
+
<title>
|
252
|
+
Note 1.8 deprecation in README
|
253
|
+
</title>
|
254
|
+
<updated>2013-06-11T06:48:53-07:00</updated>
|
255
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/bd6e7860b5a891bff077aeaeb5434e60?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
256
|
+
<author>
|
257
|
+
<name>flavorjones</name>
|
258
|
+
<uri>https://github.com/flavorjones</uri>
|
259
|
+
</author>
|
260
|
+
<content type="html">
|
261
|
+
<pre style='white-space:pre-wrap;width:81ex'>Note 1.8 deprecation in README</pre>
|
262
|
+
</content>
|
263
|
+
</entry>
|
264
|
+
<entry>
|
265
|
+
<id>tag:github.com,2008:Grit::Commit/82a936a0ceba0508d29cc9f6da84c5a98ae7bede</id>
|
266
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/82a936a0ceba0508d29cc9f6da84c5a98ae7bede"/>
|
267
|
+
<title>
|
268
|
+
Fix a typo and DRY with dir_config() calls.
|
269
|
+
</title>
|
270
|
+
<updated>2013-06-10T21:01:03-07:00</updated>
|
271
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/74f896b312b786ee75a18073941e2457?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
272
|
+
<author>
|
273
|
+
<name>knu</name>
|
274
|
+
<uri>https://github.com/knu</uri>
|
275
|
+
</author>
|
276
|
+
<content type="html">
|
277
|
+
<pre style='white-space:pre-wrap;width:81ex'>Fix a typo and DRY with dir_config() calls.</pre>
|
278
|
+
</content>
|
279
|
+
</entry>
|
280
|
+
<entry>
|
281
|
+
<id>tag:github.com,2008:Grit::Commit/c7ef9b339054f8502e7f526b1b8054e3412cf7ba</id>
|
282
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/c7ef9b339054f8502e7f526b1b8054e3412cf7ba"/>
|
283
|
+
<title>
|
284
|
+
Iconv was for building libxml2 and not for nokogiri itself.
|
285
|
+
</title>
|
286
|
+
<updated>2013-06-10T17:55:20-07:00</updated>
|
287
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/74f896b312b786ee75a18073941e2457?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
288
|
+
<author>
|
289
|
+
<name>knu</name>
|
290
|
+
<uri>https://github.com/knu</uri>
|
291
|
+
</author>
|
292
|
+
<content type="html">
|
293
|
+
<pre style='white-space:pre-wrap;width:81ex'>Iconv was for building libxml2 and not for nokogiri itself.</pre>
|
294
|
+
</content>
|
295
|
+
</entry>
|
296
|
+
<entry>
|
297
|
+
<id>tag:github.com,2008:Grit::Commit/4c1c225b9409571156430aeb5bcf89c4f9dd4812</id>
|
298
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/4c1c225b9409571156430aeb5bcf89c4f9dd4812"/>
|
299
|
+
<title>
|
300
|
+
Make sure the MRI gem is built correctly.
|
301
|
+
</title>
|
302
|
+
<updated>2013-06-10T07:40:39-07:00</updated>
|
303
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/bd6e7860b5a891bff077aeaeb5434e60?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
304
|
+
<author>
|
305
|
+
<name>flavorjones</name>
|
306
|
+
<uri>https://github.com/flavorjones</uri>
|
307
|
+
</author>
|
308
|
+
<content type="html">
|
309
|
+
<pre style='white-space:pre-wrap;width:81ex'>Make sure the MRI gem is built correctly.</pre>
|
310
|
+
</content>
|
311
|
+
</entry>
|
312
|
+
<entry>
|
313
|
+
<id>tag:github.com,2008:Grit::Commit/b6100afd7a0ce17097fb3ca58ae8fe5e63522f6d</id>
|
314
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/b6100afd7a0ce17097fb3ca58ae8fe5e63522f6d"/>
|
315
|
+
<title>
|
316
|
+
Fiddling with the windows cross-compile gem logic.
|
317
|
+
</title>
|
318
|
+
<updated>2013-06-10T07:33:59-07:00</updated>
|
319
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/bd6e7860b5a891bff077aeaeb5434e60?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
320
|
+
<author>
|
321
|
+
<name>flavorjones</name>
|
322
|
+
<uri>https://github.com/flavorjones</uri>
|
323
|
+
</author>
|
324
|
+
<content type="html">
|
325
|
+
<pre style='white-space:pre-wrap;width:81ex'>Fiddling with the windows cross-compile gem logic.</pre>
|
326
|
+
</content>
|
327
|
+
</entry>
|
328
|
+
<entry>
|
329
|
+
<id>tag:github.com,2008:Grit::Commit/b1483de363524c882b5e682a3d3a6e6ab5d7511b</id>
|
330
|
+
<link type="text/html" rel="alternate" href="https://github.com/sparklemotion/nokogiri/commit/b1483de363524c882b5e682a3d3a6e6ab5d7511b"/>
|
331
|
+
<title>
|
332
|
+
build_all now uses ruby 1.9.3 to build everything.
|
333
|
+
</title>
|
334
|
+
<updated>2013-06-10T07:33:56-07:00</updated>
|
335
|
+
<media:thumbnail height="30" width="30" url="https://secure.gravatar.com/avatar/bd6e7860b5a891bff077aeaeb5434e60?s=30&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png"/>
|
336
|
+
<author>
|
337
|
+
<name>flavorjones</name>
|
338
|
+
<uri>https://github.com/flavorjones</uri>
|
339
|
+
</author>
|
340
|
+
<content type="html">
|
341
|
+
<pre style='white-space:pre-wrap;width:81ex'>build_all now uses ruby 1.9.3 to build everything.</pre>
|
342
|
+
</content>
|
343
|
+
</entry>
|
344
|
+
</feed>
|