nokogiri 1.10.4 → 1.11.2

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.

Files changed (157) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1015 -947
  4. data/LICENSE.md +1 -1
  5. data/README.md +173 -94
  6. data/dependencies.yml +28 -26
  7. data/ext/nokogiri/depend +37 -358
  8. data/ext/nokogiri/extconf.rb +611 -391
  9. data/ext/nokogiri/html_document.c +78 -82
  10. data/ext/nokogiri/html_element_description.c +84 -71
  11. data/ext/nokogiri/html_entity_lookup.c +21 -16
  12. data/ext/nokogiri/html_sax_parser_context.c +69 -66
  13. data/ext/nokogiri/html_sax_push_parser.c +42 -34
  14. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  15. data/ext/nokogiri/nokogiri.c +192 -87
  16. data/ext/nokogiri/nokogiri.h +181 -89
  17. data/ext/nokogiri/test_global_handlers.c +40 -0
  18. data/ext/nokogiri/xml_attr.c +15 -15
  19. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  20. data/ext/nokogiri/xml_cdata.c +13 -18
  21. data/ext/nokogiri/xml_comment.c +19 -26
  22. data/ext/nokogiri/xml_document.c +230 -159
  23. data/ext/nokogiri/xml_document_fragment.c +13 -15
  24. data/ext/nokogiri/xml_dtd.c +54 -48
  25. data/ext/nokogiri/xml_element_content.c +30 -27
  26. data/ext/nokogiri/xml_element_decl.c +22 -22
  27. data/ext/nokogiri/xml_encoding_handler.c +17 -11
  28. data/ext/nokogiri/xml_entity_decl.c +32 -30
  29. data/ext/nokogiri/xml_entity_reference.c +16 -18
  30. data/ext/nokogiri/xml_namespace.c +56 -49
  31. data/ext/nokogiri/xml_node.c +354 -282
  32. data/ext/nokogiri/xml_node_set.c +168 -156
  33. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  34. data/ext/nokogiri/xml_reader.c +195 -172
  35. data/ext/nokogiri/xml_relax_ng.c +52 -28
  36. data/ext/nokogiri/xml_sax_parser.c +118 -118
  37. data/ext/nokogiri/xml_sax_parser_context.c +103 -86
  38. data/ext/nokogiri/xml_sax_push_parser.c +36 -27
  39. data/ext/nokogiri/xml_schema.c +111 -34
  40. data/ext/nokogiri/xml_syntax_error.c +42 -21
  41. data/ext/nokogiri/xml_text.c +13 -17
  42. data/ext/nokogiri/xml_xpath_context.c +206 -123
  43. data/ext/nokogiri/xslt_stylesheet.c +158 -165
  44. data/lib/nokogiri.rb +6 -27
  45. data/lib/nokogiri/css.rb +1 -0
  46. data/lib/nokogiri/css/node.rb +1 -0
  47. data/lib/nokogiri/css/parser.rb +63 -62
  48. data/lib/nokogiri/css/parser.y +2 -2
  49. data/lib/nokogiri/css/parser_extras.rb +39 -36
  50. data/lib/nokogiri/css/syntax_error.rb +1 -0
  51. data/lib/nokogiri/css/tokenizer.rb +1 -0
  52. data/lib/nokogiri/css/xpath_visitor.rb +73 -43
  53. data/lib/nokogiri/decorators/slop.rb +1 -0
  54. data/lib/nokogiri/extension.rb +26 -0
  55. data/lib/nokogiri/html.rb +1 -0
  56. data/lib/nokogiri/html/builder.rb +1 -0
  57. data/lib/nokogiri/html/document.rb +13 -26
  58. data/lib/nokogiri/html/document_fragment.rb +16 -15
  59. data/lib/nokogiri/html/element_description.rb +1 -0
  60. data/lib/nokogiri/html/element_description_defaults.rb +1 -0
  61. data/lib/nokogiri/html/entity_lookup.rb +1 -0
  62. data/lib/nokogiri/html/sax/parser.rb +1 -0
  63. data/lib/nokogiri/html/sax/parser_context.rb +1 -0
  64. data/lib/nokogiri/html/sax/push_parser.rb +1 -0
  65. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  66. data/lib/nokogiri/syntax_error.rb +1 -0
  67. data/lib/nokogiri/version.rb +3 -109
  68. data/lib/nokogiri/version/constant.rb +5 -0
  69. data/lib/nokogiri/version/info.rb +205 -0
  70. data/lib/nokogiri/xml.rb +1 -0
  71. data/lib/nokogiri/xml/attr.rb +1 -0
  72. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  73. data/lib/nokogiri/xml/builder.rb +3 -2
  74. data/lib/nokogiri/xml/cdata.rb +1 -0
  75. data/lib/nokogiri/xml/character_data.rb +1 -0
  76. data/lib/nokogiri/xml/document.rb +49 -24
  77. data/lib/nokogiri/xml/document_fragment.rb +5 -6
  78. data/lib/nokogiri/xml/dtd.rb +1 -0
  79. data/lib/nokogiri/xml/element_content.rb +1 -0
  80. data/lib/nokogiri/xml/element_decl.rb +1 -0
  81. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  82. data/lib/nokogiri/xml/entity_reference.rb +1 -0
  83. data/lib/nokogiri/xml/namespace.rb +1 -0
  84. data/lib/nokogiri/xml/node.rb +624 -290
  85. data/lib/nokogiri/xml/node/save_options.rb +1 -0
  86. data/lib/nokogiri/xml/node_set.rb +1 -0
  87. data/lib/nokogiri/xml/notation.rb +1 -0
  88. data/lib/nokogiri/xml/parse_options.rb +10 -3
  89. data/lib/nokogiri/xml/pp.rb +1 -0
  90. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  91. data/lib/nokogiri/xml/pp/node.rb +1 -0
  92. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  93. data/lib/nokogiri/xml/reader.rb +9 -12
  94. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  95. data/lib/nokogiri/xml/sax.rb +1 -0
  96. data/lib/nokogiri/xml/sax/document.rb +1 -0
  97. data/lib/nokogiri/xml/sax/parser.rb +1 -0
  98. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  99. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  100. data/lib/nokogiri/xml/schema.rb +13 -4
  101. data/lib/nokogiri/xml/searchable.rb +25 -16
  102. data/lib/nokogiri/xml/syntax_error.rb +1 -0
  103. data/lib/nokogiri/xml/text.rb +1 -0
  104. data/lib/nokogiri/xml/xpath.rb +2 -3
  105. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  106. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  107. data/lib/nokogiri/xslt.rb +1 -0
  108. data/lib/nokogiri/xslt/stylesheet.rb +1 -0
  109. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  110. data/patches/libxml2/0004-libxml2.la-is-in-top_builddir.patch +25 -0
  111. data/patches/libxml2/0005-Fix-infinite-loop-in-xmlStringLenDecodeEntities.patch +32 -0
  112. data/patches/libxml2/0006-htmlParseComment-treat-as-if-it-closed-the-comment.patch +73 -0
  113. data/patches/libxml2/0007-use-new-htmlParseLookupCommentEnd-to-find-comment-en.patch +103 -0
  114. data/patches/libxml2/0008-use-glibc-strlen.patch +53 -0
  115. data/patches/libxml2/0009-avoid-isnan-isinf.patch +81 -0
  116. data/patches/libxml2/0010-parser.c-shrink-the-input-buffer-when-appropriate.patch +70 -0
  117. data/ports/archives/libxml2-2.9.10.tar.gz +0 -0
  118. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  119. metadata +97 -154
  120. data/ext/nokogiri/html_document.h +0 -10
  121. data/ext/nokogiri/html_element_description.h +0 -10
  122. data/ext/nokogiri/html_entity_lookup.h +0 -8
  123. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  124. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  125. data/ext/nokogiri/xml_attr.h +0 -9
  126. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  127. data/ext/nokogiri/xml_cdata.h +0 -9
  128. data/ext/nokogiri/xml_comment.h +0 -9
  129. data/ext/nokogiri/xml_document.h +0 -23
  130. data/ext/nokogiri/xml_document_fragment.h +0 -10
  131. data/ext/nokogiri/xml_dtd.h +0 -10
  132. data/ext/nokogiri/xml_element_content.h +0 -10
  133. data/ext/nokogiri/xml_element_decl.h +0 -9
  134. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  135. data/ext/nokogiri/xml_entity_decl.h +0 -10
  136. data/ext/nokogiri/xml_entity_reference.h +0 -9
  137. data/ext/nokogiri/xml_io.c +0 -61
  138. data/ext/nokogiri/xml_io.h +0 -11
  139. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  140. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  141. data/ext/nokogiri/xml_namespace.h +0 -14
  142. data/ext/nokogiri/xml_node.h +0 -13
  143. data/ext/nokogiri/xml_node_set.h +0 -12
  144. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  145. data/ext/nokogiri/xml_reader.h +0 -10
  146. data/ext/nokogiri/xml_relax_ng.h +0 -9
  147. data/ext/nokogiri/xml_sax_parser.h +0 -39
  148. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  149. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  150. data/ext/nokogiri/xml_schema.h +0 -9
  151. data/ext/nokogiri/xml_syntax_error.h +0 -13
  152. data/ext/nokogiri/xml_text.h +0 -9
  153. data/ext/nokogiri/xml_xpath_context.h +0 -10
  154. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  155. data/patches/libxslt/0001-Fix-security-framework-bypass.patch +0 -120
  156. data/ports/archives/libxml2-2.9.9.tar.gz +0 -0
  157. data/ports/archives/libxslt-1.1.33.tar.gz +0 -0
@@ -1,4 +1,6 @@
1
- #include <xml_processing_instruction.h>
1
+ #include <nokogiri.h>
2
+
3
+ VALUE cNokogiriXmlProcessingInstruction;
2
4
 
3
5
  /*
4
6
  * call-seq:
@@ -7,7 +9,8 @@
7
9
  * Create a new ProcessingInstruction element on the +document+ with +name+
8
10
  * and +content+
9
11
  */
10
- static VALUE new(int argc, VALUE *argv, VALUE klass)
12
+ static VALUE
13
+ new (int argc, VALUE *argv, VALUE klass)
11
14
  {
12
15
  xmlDocPtr xml_doc;
13
16
  xmlNodePtr node;
@@ -22,35 +25,30 @@ static VALUE new(int argc, VALUE *argv, VALUE klass)
22
25
  Data_Get_Struct(document, xmlDoc, xml_doc);
23
26
 
24
27
  node = xmlNewDocPI(
25
- xml_doc,
26
- (const xmlChar *)StringValueCStr(name),
27
- (const xmlChar *)StringValueCStr(content)
28
- );
28
+ xml_doc,
29
+ (const xmlChar *)StringValueCStr(name),
30
+ (const xmlChar *)StringValueCStr(content)
31
+ );
29
32
 
30
- nokogiri_root_node(node);
33
+ noko_xml_document_pin_node(node);
31
34
 
32
- rb_node = Nokogiri_wrap_xml_node(klass, node);
35
+ rb_node = noko_xml_node_wrap(klass, node);
33
36
  rb_obj_call_init(rb_node, argc, argv);
34
37
 
35
- if(rb_block_given_p()) rb_yield(rb_node);
38
+ if (rb_block_given_p()) { rb_yield(rb_node); }
36
39
 
37
40
  return rb_node;
38
41
  }
39
42
 
40
- VALUE cNokogiriXmlProcessingInstruction;
41
- void init_xml_processing_instruction()
43
+ void
44
+ noko_init_xml_processing_instruction()
42
45
  {
43
- VALUE nokogiri = rb_define_module("Nokogiri");
44
- VALUE xml = rb_define_module_under(nokogiri, "XML");
45
- VALUE node = rb_define_class_under(xml, "Node", rb_cObject);
46
-
46
+ assert(cNokogiriXmlNode);
47
47
  /*
48
48
  * ProcessingInstruction represents a ProcessingInstruction node in an xml
49
49
  * document.
50
50
  */
51
- VALUE klass = rb_define_class_under(xml, "ProcessingInstruction", node);
52
-
53
- cNokogiriXmlProcessingInstruction = klass;
51
+ cNokogiriXmlProcessingInstruction = rb_define_class_under(mNokogiriXml, "ProcessingInstruction", cNokogiriXmlNode);
54
52
 
55
- rb_define_singleton_method(klass, "new", new, -1);
53
+ rb_define_singleton_method(cNokogiriXmlProcessingInstruction, "new", new, -1);
56
54
  }
@@ -1,13 +1,17 @@
1
- #include <xml_reader.h>
1
+ #include <nokogiri.h>
2
2
 
3
- static void dealloc(xmlTextReaderPtr reader)
3
+ VALUE cNokogiriXmlReader;
4
+
5
+ static void
6
+ dealloc(xmlTextReaderPtr reader)
4
7
  {
5
8
  NOKOGIRI_DEBUG_START(reader);
6
9
  xmlFreeTextReader(reader);
7
10
  NOKOGIRI_DEBUG_END(reader);
8
11
  }
9
12
 
10
- static int has_attributes(xmlTextReaderPtr reader)
13
+ static int
14
+ has_attributes(xmlTextReaderPtr reader)
11
15
  {
12
16
  /*
13
17
  * this implementation of xmlTextReaderHasAttributes explicitly includes
@@ -16,47 +20,39 @@ static int has_attributes(xmlTextReaderPtr reader)
16
20
  */
17
21
  xmlNodePtr node ;
18
22
  node = xmlTextReaderCurrentNode(reader);
19
- if (node == NULL)
20
- return(0);
23
+ if (node == NULL) {
24
+ return (0);
25
+ }
21
26
 
22
27
  if ((node->type == XML_ELEMENT_NODE) &&
23
- ((node->properties != NULL) || (node->nsDef != NULL)))
24
- return(1);
25
- return(0);
28
+ ((node->properties != NULL) || (node->nsDef != NULL))) {
29
+ return (1);
30
+ }
31
+ return (0);
26
32
  }
27
33
 
28
- static void Nokogiri_xml_node_namespaces(xmlNodePtr node, VALUE attr_hash)
34
+ static void
35
+ Nokogiri_xml_node_namespaces(xmlNodePtr node, VALUE attr_hash)
29
36
  {
30
37
  xmlNsPtr ns;
31
- static char buffer[XMLNS_BUFFER_LEN] ;
32
- char *key ;
33
- size_t keylen ;
38
+ VALUE key;
34
39
 
35
- if (node->type != XML_ELEMENT_NODE) return ;
40
+ if (node->type != XML_ELEMENT_NODE) { return ; }
36
41
 
37
42
  ns = node->nsDef;
38
43
  while (ns != NULL) {
39
44
 
40
- keylen = XMLNS_PREFIX_LEN + (ns->prefix ? (strlen((const char*)ns->prefix) + 1) : 0) ;
41
- if (keylen > XMLNS_BUFFER_LEN) {
42
- key = (char*)malloc(keylen) ;
43
- } else {
44
- key = buffer ;
45
- }
46
-
45
+ key = rb_enc_str_new_cstr(XMLNS_PREFIX, rb_utf8_encoding());
47
46
  if (ns->prefix) {
48
- sprintf(key, "%s:%s", XMLNS_PREFIX, ns->prefix);
49
- } else {
50
- sprintf(key, "%s", XMLNS_PREFIX);
47
+ rb_str_cat_cstr(key, ":");
48
+ rb_str_cat_cstr(key, (const char *)ns->prefix);
51
49
  }
52
50
 
51
+ key = rb_str_conv_enc(key, rb_utf8_encoding(), rb_default_internal_encoding());
53
52
  rb_hash_aset(attr_hash,
54
- NOKOGIRI_STR_NEW2(key),
55
- (ns->href ? NOKOGIRI_STR_NEW2(ns->href) : Qnil)
56
- );
57
- if (key != buffer) {
58
- free(key);
59
- }
53
+ key,
54
+ (ns->href ? NOKOGIRI_STR_NEW2(ns->href) : Qnil)
55
+ );
60
56
  ns = ns->next ;
61
57
  }
62
58
  }
@@ -68,15 +64,16 @@ static void Nokogiri_xml_node_namespaces(xmlNodePtr node, VALUE attr_hash)
68
64
  *
69
65
  * Was an attribute generated from the default value in the DTD or schema?
70
66
  */
71
- static VALUE default_eh(VALUE self)
67
+ static VALUE
68
+ default_eh(VALUE self)
72
69
  {
73
70
  xmlTextReaderPtr reader;
74
71
  int eh;
75
72
 
76
73
  Data_Get_Struct(self, xmlTextReader, reader);
77
74
  eh = xmlTextReaderIsDefault(reader);
78
- if(eh == 0) return Qfalse;
79
- if(eh == 1) return Qtrue;
75
+ if (eh == 0) { return Qfalse; }
76
+ if (eh == 1) { return Qtrue; }
80
77
 
81
78
  return Qnil;
82
79
  }
@@ -87,15 +84,16 @@ static VALUE default_eh(VALUE self)
87
84
  *
88
85
  * Does this node have a text value?
89
86
  */
90
- static VALUE value_eh(VALUE self)
87
+ static VALUE
88
+ value_eh(VALUE self)
91
89
  {
92
90
  xmlTextReaderPtr reader;
93
91
  int eh;
94
92
 
95
93
  Data_Get_Struct(self, xmlTextReader, reader);
96
94
  eh = xmlTextReaderHasValue(reader);
97
- if(eh == 0) return Qfalse;
98
- if(eh == 1) return Qtrue;
95
+ if (eh == 0) { return Qfalse; }
96
+ if (eh == 1) { return Qtrue; }
99
97
 
100
98
  return Qnil;
101
99
  }
@@ -106,15 +104,16 @@ static VALUE value_eh(VALUE self)
106
104
  *
107
105
  * Does this node have attributes?
108
106
  */
109
- static VALUE attributes_eh(VALUE self)
107
+ static VALUE
108
+ attributes_eh(VALUE self)
110
109
  {
111
110
  xmlTextReaderPtr reader;
112
111
  int eh;
113
112
 
114
113
  Data_Get_Struct(self, xmlTextReader, reader);
115
114
  eh = has_attributes(reader);
116
- if(eh == 0) return Qfalse;
117
- if(eh == 1) return Qtrue;
115
+ if (eh == 0) { return Qfalse; }
116
+ if (eh == 1) { return Qtrue; }
118
117
 
119
118
  return Qnil;
120
119
  }
@@ -125,7 +124,8 @@ static VALUE attributes_eh(VALUE self)
125
124
  *
126
125
  * Get a hash of namespaces for this Node
127
126
  */
128
- static VALUE namespaces(VALUE self)
127
+ static VALUE
128
+ namespaces(VALUE self)
129
129
  {
130
130
  xmlTextReaderPtr reader;
131
131
  xmlNodePtr ptr;
@@ -135,11 +135,12 @@ static VALUE namespaces(VALUE self)
135
135
 
136
136
  attr = rb_hash_new() ;
137
137
 
138
- if (! has_attributes(reader))
138
+ if (! has_attributes(reader)) {
139
139
  return attr ;
140
+ }
140
141
 
141
142
  ptr = xmlTextReaderExpand(reader);
142
- if(ptr == NULL) return Qnil;
143
+ if (ptr == NULL) { return Qnil; }
143
144
 
144
145
  Nokogiri_xml_node_namespaces(ptr, attr);
145
146
 
@@ -147,30 +148,37 @@ static VALUE namespaces(VALUE self)
147
148
  }
148
149
 
149
150
  /*
150
- * call-seq:
151
- * attribute_nodes
152
- *
153
- * Get a list of attributes for this Node
151
+ * @overload attribute_nodes()
152
+ * Get the attributes of the current node as an Array of Attr
153
+ * @return [Array<Nokogiri::XML::Attr>]
154
154
  */
155
- static VALUE attribute_nodes(VALUE self)
155
+ static VALUE
156
+ rb_xml_reader_attribute_nodes(VALUE rb_reader)
156
157
  {
157
- xmlTextReaderPtr reader;
158
- xmlNodePtr ptr;
159
- VALUE attr ;
158
+ xmlTextReaderPtr c_reader;
159
+ xmlNodePtr c_node;
160
+ VALUE attr_nodes;
161
+ int j;
160
162
 
161
- Data_Get_Struct(self, xmlTextReader, reader);
163
+ Data_Get_Struct(rb_reader, xmlTextReader, c_reader);
162
164
 
163
- attr = rb_ary_new() ;
165
+ if (! has_attributes(c_reader)) {
166
+ return rb_ary_new() ;
167
+ }
164
168
 
165
- if (! has_attributes(reader))
166
- return attr ;
169
+ c_node = xmlTextReaderExpand(c_reader);
170
+ if (c_node == NULL) {
171
+ return Qnil;
172
+ }
167
173
 
168
- ptr = xmlTextReaderExpand(reader);
169
- if(ptr == NULL) return Qnil;
174
+ attr_nodes = noko_xml_node_attrs(c_node);
170
175
 
171
- Nokogiri_xml_node_properties(ptr, attr);
176
+ /* ensure that the Reader won't be GCed as long as a node is referenced */
177
+ for (j = 0 ; j < RARRAY_LEN(attr_nodes) ; j++) {
178
+ rb_iv_set(rb_ary_entry(attr_nodes, j), "@reader", rb_reader);
179
+ }
172
180
 
173
- return attr ;
181
+ return attr_nodes;
174
182
  }
175
183
 
176
184
  /*
@@ -179,7 +187,8 @@ static VALUE attribute_nodes(VALUE self)
179
187
  *
180
188
  * Get the value of attribute at +index+
181
189
  */
182
- static VALUE attribute_at(VALUE self, VALUE index)
190
+ static VALUE
191
+ attribute_at(VALUE self, VALUE index)
183
192
  {
184
193
  xmlTextReaderPtr reader;
185
194
  xmlChar *value;
@@ -187,14 +196,14 @@ static VALUE attribute_at(VALUE self, VALUE index)
187
196
 
188
197
  Data_Get_Struct(self, xmlTextReader, reader);
189
198
 
190
- if(NIL_P(index)) return Qnil;
199
+ if (NIL_P(index)) { return Qnil; }
191
200
  index = rb_Integer(index);
192
201
 
193
202
  value = xmlTextReaderGetAttributeNo(
194
- reader,
195
- (int)NUM2INT(index)
196
- );
197
- if(value == NULL) return Qnil;
203
+ reader,
204
+ (int)NUM2INT(index)
205
+ );
206
+ if (value == NULL) { return Qnil; }
198
207
 
199
208
  rb_value = NOKOGIRI_STR_NEW2(value);
200
209
  xmlFree(value);
@@ -207,7 +216,8 @@ static VALUE attribute_at(VALUE self, VALUE index)
207
216
  *
208
217
  * Get the value of attribute named +name+
209
218
  */
210
- static VALUE reader_attribute(VALUE self, VALUE name)
219
+ static VALUE
220
+ reader_attribute(VALUE self, VALUE name)
211
221
  {
212
222
  xmlTextReaderPtr reader;
213
223
  xmlChar *value ;
@@ -215,11 +225,11 @@ static VALUE reader_attribute(VALUE self, VALUE name)
215
225
 
216
226
  Data_Get_Struct(self, xmlTextReader, reader);
217
227
 
218
- if(NIL_P(name)) return Qnil;
228
+ if (NIL_P(name)) { return Qnil; }
219
229
  name = StringValue(name) ;
220
230
 
221
- value = xmlTextReaderGetAttribute(reader, (xmlChar*)StringValueCStr(name));
222
- if(value == NULL) return Qnil;
231
+ value = xmlTextReaderGetAttribute(reader, (xmlChar *)StringValueCStr(name));
232
+ if (value == NULL) { return Qnil; }
223
233
 
224
234
  rb_value = NOKOGIRI_STR_NEW2(value);
225
235
  xmlFree(value);
@@ -232,14 +242,15 @@ static VALUE reader_attribute(VALUE self, VALUE name)
232
242
  *
233
243
  * Get the number of attributes for the current node
234
244
  */
235
- static VALUE attribute_count(VALUE self)
245
+ static VALUE
246
+ attribute_count(VALUE self)
236
247
  {
237
248
  xmlTextReaderPtr reader;
238
249
  int count;
239
250
 
240
251
  Data_Get_Struct(self, xmlTextReader, reader);
241
252
  count = xmlTextReaderAttributeCount(reader);
242
- if(count == -1) return Qnil;
253
+ if (count == -1) { return Qnil; }
243
254
 
244
255
  return INT2NUM((long)count);
245
256
  }
@@ -250,14 +261,15 @@ static VALUE attribute_count(VALUE self)
250
261
  *
251
262
  * Get the depth of the node
252
263
  */
253
- static VALUE depth(VALUE self)
264
+ static VALUE
265
+ depth(VALUE self)
254
266
  {
255
267
  xmlTextReaderPtr reader;
256
268
  int depth;
257
269
 
258
270
  Data_Get_Struct(self, xmlTextReader, reader);
259
271
  depth = xmlTextReaderDepth(reader);
260
- if(depth == -1) return Qnil;
272
+ if (depth == -1) { return Qnil; }
261
273
 
262
274
  return INT2NUM((long)depth);
263
275
  }
@@ -268,14 +280,15 @@ static VALUE depth(VALUE self)
268
280
  *
269
281
  * Get the XML version of the document being read
270
282
  */
271
- static VALUE xml_version(VALUE self)
283
+ static VALUE
284
+ xml_version(VALUE self)
272
285
  {
273
286
  xmlTextReaderPtr reader;
274
287
  const char *version;
275
288
 
276
289
  Data_Get_Struct(self, xmlTextReader, reader);
277
290
  version = (const char *)xmlTextReaderConstXmlVersion(reader);
278
- if(version == NULL) return Qnil;
291
+ if (version == NULL) { return Qnil; }
279
292
 
280
293
  return NOKOGIRI_STR_NEW2(version);
281
294
  }
@@ -286,14 +299,15 @@ static VALUE xml_version(VALUE self)
286
299
  *
287
300
  * Get the xml:lang scope within which the node resides.
288
301
  */
289
- static VALUE lang(VALUE self)
302
+ static VALUE
303
+ lang(VALUE self)
290
304
  {
291
305
  xmlTextReaderPtr reader;
292
306
  const char *lang;
293
307
 
294
308
  Data_Get_Struct(self, xmlTextReader, reader);
295
309
  lang = (const char *)xmlTextReaderConstXmlLang(reader);
296
- if(lang == NULL) return Qnil;
310
+ if (lang == NULL) { return Qnil; }
297
311
 
298
312
  return NOKOGIRI_STR_NEW2(lang);
299
313
  }
@@ -304,14 +318,15 @@ static VALUE lang(VALUE self)
304
318
  *
305
319
  * Get the text value of the node if present. Returns a utf-8 encoded string.
306
320
  */
307
- static VALUE value(VALUE self)
321
+ static VALUE
322
+ value(VALUE self)
308
323
  {
309
324
  xmlTextReaderPtr reader;
310
325
  const char *value;
311
326
 
312
327
  Data_Get_Struct(self, xmlTextReader, reader);
313
328
  value = (const char *)xmlTextReaderConstValue(reader);
314
- if(value == NULL) return Qnil;
329
+ if (value == NULL) { return Qnil; }
315
330
 
316
331
  return NOKOGIRI_STR_NEW2(value);
317
332
  }
@@ -322,14 +337,15 @@ static VALUE value(VALUE self)
322
337
  *
323
338
  * Get the shorthand reference to the namespace associated with the node.
324
339
  */
325
- static VALUE prefix(VALUE self)
340
+ static VALUE
341
+ prefix(VALUE self)
326
342
  {
327
343
  xmlTextReaderPtr reader;
328
344
  const char *prefix;
329
345
 
330
346
  Data_Get_Struct(self, xmlTextReader, reader);
331
347
  prefix = (const char *)xmlTextReaderConstPrefix(reader);
332
- if(prefix == NULL) return Qnil;
348
+ if (prefix == NULL) { return Qnil; }
333
349
 
334
350
  return NOKOGIRI_STR_NEW2(prefix);
335
351
  }
@@ -340,14 +356,15 @@ static VALUE prefix(VALUE self)
340
356
  *
341
357
  * Get the URI defining the namespace associated with the node
342
358
  */
343
- static VALUE namespace_uri(VALUE self)
359
+ static VALUE
360
+ namespace_uri(VALUE self)
344
361
  {
345
362
  xmlTextReaderPtr reader;
346
363
  const char *uri;
347
364
 
348
365
  Data_Get_Struct(self, xmlTextReader, reader);
349
366
  uri = (const char *)xmlTextReaderConstNamespaceUri(reader);
350
- if(uri == NULL) return Qnil;
367
+ if (uri == NULL) { return Qnil; }
351
368
 
352
369
  return NOKOGIRI_STR_NEW2(uri);
353
370
  }
@@ -358,14 +375,15 @@ static VALUE namespace_uri(VALUE self)
358
375
  *
359
376
  * Get the local name of the node
360
377
  */
361
- static VALUE local_name(VALUE self)
378
+ static VALUE
379
+ local_name(VALUE self)
362
380
  {
363
381
  xmlTextReaderPtr reader;
364
382
  const char *name;
365
383
 
366
384
  Data_Get_Struct(self, xmlTextReader, reader);
367
385
  name = (const char *)xmlTextReaderConstLocalName(reader);
368
- if(name == NULL) return Qnil;
386
+ if (name == NULL) { return Qnil; }
369
387
 
370
388
  return NOKOGIRI_STR_NEW2(name);
371
389
  }
@@ -376,14 +394,15 @@ static VALUE local_name(VALUE self)
376
394
  *
377
395
  * Get the name of the node. Returns a utf-8 encoded string.
378
396
  */
379
- static VALUE name(VALUE self)
397
+ static VALUE
398
+ name(VALUE self)
380
399
  {
381
400
  xmlTextReaderPtr reader;
382
401
  const char *name;
383
402
 
384
403
  Data_Get_Struct(self, xmlTextReader, reader);
385
404
  name = (const char *)xmlTextReaderConstName(reader);
386
- if(name == NULL) return Qnil;
405
+ if (name == NULL) { return Qnil; }
387
406
 
388
407
  return NOKOGIRI_STR_NEW2(name);
389
408
  }
@@ -394,14 +413,15 @@ static VALUE name(VALUE self)
394
413
  *
395
414
  * Get the xml:base of the node
396
415
  */
397
- static VALUE base_uri(VALUE self)
416
+ static VALUE
417
+ base_uri(VALUE self)
398
418
  {
399
419
  xmlTextReaderPtr reader;
400
- const char * base_uri;
420
+ const char *base_uri;
401
421
 
402
422
  Data_Get_Struct(self, xmlTextReader, reader);
403
423
  base_uri = (const char *)xmlTextReaderBaseUri(reader);
404
- if (base_uri == NULL) return Qnil;
424
+ if (base_uri == NULL) { return Qnil; }
405
425
 
406
426
  return NOKOGIRI_STR_NEW2(base_uri);
407
427
  }
@@ -412,7 +432,8 @@ static VALUE base_uri(VALUE self)
412
432
  *
413
433
  * Get the state of the reader
414
434
  */
415
- static VALUE state(VALUE self)
435
+ static VALUE
436
+ state(VALUE self)
416
437
  {
417
438
  xmlTextReaderPtr reader;
418
439
  Data_Get_Struct(self, xmlTextReader, reader);
@@ -425,7 +446,8 @@ static VALUE state(VALUE self)
425
446
  *
426
447
  * Get the type of readers current node
427
448
  */
428
- static VALUE node_type(VALUE self)
449
+ static VALUE
450
+ node_type(VALUE self)
429
451
  {
430
452
  xmlTextReaderPtr reader;
431
453
  Data_Get_Struct(self, xmlTextReader, reader);
@@ -438,7 +460,8 @@ static VALUE node_type(VALUE self)
438
460
  *
439
461
  * Move the Reader forward through the XML document.
440
462
  */
441
- static VALUE read_more(VALUE self)
463
+ static VALUE
464
+ read_more(VALUE self)
442
465
  {
443
466
  xmlTextReaderPtr reader;
444
467
  xmlErrorPtr error;
@@ -453,14 +476,15 @@ static VALUE read_more(VALUE self)
453
476
  ret = xmlTextReaderRead(reader);
454
477
  xmlSetStructuredErrorFunc(NULL, NULL);
455
478
 
456
- if(ret == 1) return self;
457
- if(ret == 0) return Qnil;
479
+ if (ret == 1) { return self; }
480
+ if (ret == 0) { return Qnil; }
458
481
 
459
482
  error = xmlGetLastError();
460
- if(error)
483
+ if (error) {
461
484
  rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
462
- else
485
+ } else {
463
486
  rb_raise(rb_eRuntimeError, "Error pulling: %d", ret);
487
+ }
464
488
 
465
489
  return Qnil;
466
490
  }
@@ -472,10 +496,11 @@ static VALUE read_more(VALUE self)
472
496
  * Read the contents of the current node, including child nodes and markup.
473
497
  * Returns a utf-8 encoded string.
474
498
  */
475
- static VALUE inner_xml(VALUE self)
499
+ static VALUE
500
+ inner_xml(VALUE self)
476
501
  {
477
502
  xmlTextReaderPtr reader;
478
- xmlChar* value;
503
+ xmlChar *value;
479
504
  VALUE str;
480
505
 
481
506
  Data_Get_Struct(self, xmlTextReader, reader);
@@ -483,8 +508,8 @@ static VALUE inner_xml(VALUE self)
483
508
  value = xmlTextReaderReadInnerXml(reader);
484
509
 
485
510
  str = Qnil;
486
- if(value) {
487
- str = NOKOGIRI_STR_NEW2((char*)value);
511
+ if (value) {
512
+ str = NOKOGIRI_STR_NEW2((char *)value);
488
513
  xmlFree(value);
489
514
  }
490
515
 
@@ -498,7 +523,8 @@ static VALUE inner_xml(VALUE self)
498
523
  * Read the current node and its contents, including child nodes and markup.
499
524
  * Returns a utf-8 encoded string.
500
525
  */
501
- static VALUE outer_xml(VALUE self)
526
+ static VALUE
527
+ outer_xml(VALUE self)
502
528
  {
503
529
  xmlTextReaderPtr reader;
504
530
  xmlChar *value;
@@ -508,8 +534,8 @@ static VALUE outer_xml(VALUE self)
508
534
 
509
535
  value = xmlTextReaderReadOuterXml(reader);
510
536
 
511
- if(value) {
512
- str = NOKOGIRI_STR_NEW2((char*)value);
537
+ if (value) {
538
+ str = NOKOGIRI_STR_NEW2((char *)value);
513
539
  xmlFree(value);
514
540
  }
515
541
  return str;
@@ -521,31 +547,32 @@ static VALUE outer_xml(VALUE self)
521
547
  *
522
548
  * Create a new reader that parses +string+
523
549
  */
524
- static VALUE from_memory(int argc, VALUE *argv, VALUE klass)
550
+ static VALUE
551
+ from_memory(int argc, VALUE *argv, VALUE klass)
525
552
  {
526
553
  VALUE rb_buffer, rb_url, encoding, rb_options;
527
554
  xmlTextReaderPtr reader;
528
- const char * c_url = NULL;
529
- const char * c_encoding = NULL;
555
+ const char *c_url = NULL;
556
+ const char *c_encoding = NULL;
530
557
  int c_options = 0;
531
558
  VALUE rb_reader, args[3];
532
559
 
533
560
  rb_scan_args(argc, argv, "13", &rb_buffer, &rb_url, &encoding, &rb_options);
534
561
 
535
- if (!RTEST(rb_buffer)) rb_raise(rb_eArgError, "string cannot be nil");
536
- if (RTEST(rb_url)) c_url = StringValueCStr(rb_url);
537
- if (RTEST(encoding)) c_encoding = StringValueCStr(encoding);
538
- if (RTEST(rb_options)) c_options = (int)NUM2INT(rb_options);
562
+ if (!RTEST(rb_buffer)) { rb_raise(rb_eArgError, "string cannot be nil"); }
563
+ if (RTEST(rb_url)) { c_url = StringValueCStr(rb_url); }
564
+ if (RTEST(encoding)) { c_encoding = StringValueCStr(encoding); }
565
+ if (RTEST(rb_options)) { c_options = (int)NUM2INT(rb_options); }
539
566
 
540
567
  reader = xmlReaderForMemory(
541
- StringValuePtr(rb_buffer),
542
- (int)RSTRING_LEN(rb_buffer),
543
- c_url,
544
- c_encoding,
545
- c_options
546
- );
547
-
548
- if(reader == NULL) {
568
+ StringValuePtr(rb_buffer),
569
+ (int)RSTRING_LEN(rb_buffer),
570
+ c_url,
571
+ c_encoding,
572
+ c_options
573
+ );
574
+
575
+ if (reader == NULL) {
549
576
  xmlFreeTextReader(reader);
550
577
  rb_raise(rb_eRuntimeError, "couldn't create a parser");
551
578
  }
@@ -565,32 +592,33 @@ static VALUE from_memory(int argc, VALUE *argv, VALUE klass)
565
592
  *
566
593
  * Create a new reader that parses +io+
567
594
  */
568
- static VALUE from_io(int argc, VALUE *argv, VALUE klass)
595
+ static VALUE
596
+ from_io(int argc, VALUE *argv, VALUE klass)
569
597
  {
570
598
  VALUE rb_io, rb_url, encoding, rb_options;
571
599
  xmlTextReaderPtr reader;
572
- const char * c_url = NULL;
573
- const char * c_encoding = NULL;
600
+ const char *c_url = NULL;
601
+ const char *c_encoding = NULL;
574
602
  int c_options = 0;
575
603
  VALUE rb_reader, args[3];
576
604
 
577
605
  rb_scan_args(argc, argv, "13", &rb_io, &rb_url, &encoding, &rb_options);
578
606
 
579
- if (!RTEST(rb_io)) rb_raise(rb_eArgError, "io cannot be nil");
580
- if (RTEST(rb_url)) c_url = StringValueCStr(rb_url);
581
- if (RTEST(encoding)) c_encoding = StringValueCStr(encoding);
582
- if (RTEST(rb_options)) c_options = (int)NUM2INT(rb_options);
607
+ if (!RTEST(rb_io)) { rb_raise(rb_eArgError, "io cannot be nil"); }
608
+ if (RTEST(rb_url)) { c_url = StringValueCStr(rb_url); }
609
+ if (RTEST(encoding)) { c_encoding = StringValueCStr(encoding); }
610
+ if (RTEST(rb_options)) { c_options = (int)NUM2INT(rb_options); }
583
611
 
584
612
  reader = xmlReaderForIO(
585
- (xmlInputReadCallback)io_read_callback,
586
- (xmlInputCloseCallback)io_close_callback,
587
- (void *)rb_io,
588
- c_url,
589
- c_encoding,
590
- c_options
591
- );
592
-
593
- if(reader == NULL) {
613
+ (xmlInputReadCallback)noko_io_read,
614
+ (xmlInputCloseCallback)noko_io_close,
615
+ (void *)rb_io,
616
+ c_url,
617
+ c_encoding,
618
+ c_options
619
+ );
620
+
621
+ if (reader == NULL) {
594
622
  xmlFreeTextReader(reader);
595
623
  rb_raise(rb_eRuntimeError, "couldn't create a parser");
596
624
  }
@@ -610,59 +638,54 @@ static VALUE from_io(int argc, VALUE *argv, VALUE klass)
610
638
  *
611
639
  * Returns true if the current node is empty, otherwise false.
612
640
  */
613
- static VALUE empty_element_p(VALUE self)
641
+ static VALUE
642
+ empty_element_p(VALUE self)
614
643
  {
615
644
  xmlTextReaderPtr reader;
616
645
 
617
646
  Data_Get_Struct(self, xmlTextReader, reader);
618
647
 
619
- if(xmlTextReaderIsEmptyElement(reader))
648
+ if (xmlTextReaderIsEmptyElement(reader)) {
620
649
  return Qtrue;
650
+ }
621
651
 
622
652
  return Qfalse;
623
653
  }
624
654
 
625
- VALUE cNokogiriXmlReader;
626
-
627
- void init_xml_reader()
655
+ void
656
+ noko_init_xml_reader()
628
657
  {
629
- VALUE module = rb_define_module("Nokogiri");
630
- VALUE xml = rb_define_module_under(module, "XML");
631
-
632
658
  /*
633
659
  * The Reader parser allows you to effectively pull parse an XML document.
634
660
  * Once instantiated, call Nokogiri::XML::Reader#each to iterate over each
635
661
  * node. Note that you may only iterate over the document once!
636
662
  */
637
- VALUE klass = rb_define_class_under(xml, "Reader", rb_cObject);
638
-
639
- cNokogiriXmlReader = klass;
640
-
641
- rb_define_singleton_method(klass, "from_memory", from_memory, -1);
642
- rb_define_singleton_method(klass, "from_io", from_io, -1);
643
-
644
- rb_define_method(klass, "read", read_more, 0);
645
- rb_define_method(klass, "inner_xml", inner_xml, 0);
646
- rb_define_method(klass, "outer_xml", outer_xml, 0);
647
- rb_define_method(klass, "state", state, 0);
648
- rb_define_method(klass, "node_type", node_type, 0);
649
- rb_define_method(klass, "name", name, 0);
650
- rb_define_method(klass, "local_name", local_name, 0);
651
- rb_define_method(klass, "namespace_uri", namespace_uri, 0);
652
- rb_define_method(klass, "prefix", prefix, 0);
653
- rb_define_method(klass, "value", value, 0);
654
- rb_define_method(klass, "lang", lang, 0);
655
- rb_define_method(klass, "xml_version", xml_version, 0);
656
- rb_define_method(klass, "depth", depth, 0);
657
- rb_define_method(klass, "attribute_count", attribute_count, 0);
658
- rb_define_method(klass, "attribute", reader_attribute, 1);
659
- rb_define_method(klass, "namespaces", namespaces, 0);
660
- rb_define_method(klass, "attribute_at", attribute_at, 1);
661
- rb_define_method(klass, "empty_element?", empty_element_p, 0);
662
- rb_define_method(klass, "attributes?", attributes_eh, 0);
663
- rb_define_method(klass, "value?", value_eh, 0);
664
- rb_define_method(klass, "default?", default_eh, 0);
665
- rb_define_method(klass, "base_uri", base_uri, 0);
666
-
667
- rb_define_private_method(klass, "attr_nodes", attribute_nodes, 0);
663
+ cNokogiriXmlReader = rb_define_class_under(mNokogiriXml, "Reader", rb_cObject);
664
+
665
+ rb_define_singleton_method(cNokogiriXmlReader, "from_memory", from_memory, -1);
666
+ rb_define_singleton_method(cNokogiriXmlReader, "from_io", from_io, -1);
667
+
668
+ rb_define_method(cNokogiriXmlReader, "attribute", reader_attribute, 1);
669
+ rb_define_method(cNokogiriXmlReader, "attribute_at", attribute_at, 1);
670
+ rb_define_method(cNokogiriXmlReader, "attribute_count", attribute_count, 0);
671
+ rb_define_method(cNokogiriXmlReader, "attribute_nodes", rb_xml_reader_attribute_nodes, 0);
672
+ rb_define_method(cNokogiriXmlReader, "attributes?", attributes_eh, 0);
673
+ rb_define_method(cNokogiriXmlReader, "base_uri", base_uri, 0);
674
+ rb_define_method(cNokogiriXmlReader, "default?", default_eh, 0);
675
+ rb_define_method(cNokogiriXmlReader, "depth", depth, 0);
676
+ rb_define_method(cNokogiriXmlReader, "empty_element?", empty_element_p, 0);
677
+ rb_define_method(cNokogiriXmlReader, "inner_xml", inner_xml, 0);
678
+ rb_define_method(cNokogiriXmlReader, "lang", lang, 0);
679
+ rb_define_method(cNokogiriXmlReader, "local_name", local_name, 0);
680
+ rb_define_method(cNokogiriXmlReader, "name", name, 0);
681
+ rb_define_method(cNokogiriXmlReader, "namespace_uri", namespace_uri, 0);
682
+ rb_define_method(cNokogiriXmlReader, "namespaces", namespaces, 0);
683
+ rb_define_method(cNokogiriXmlReader, "node_type", node_type, 0);
684
+ rb_define_method(cNokogiriXmlReader, "outer_xml", outer_xml, 0);
685
+ rb_define_method(cNokogiriXmlReader, "prefix", prefix, 0);
686
+ rb_define_method(cNokogiriXmlReader, "read", read_more, 0);
687
+ rb_define_method(cNokogiriXmlReader, "state", state, 0);
688
+ rb_define_method(cNokogiriXmlReader, "value", value, 0);
689
+ rb_define_method(cNokogiriXmlReader, "value?", value_eh, 0);
690
+ rb_define_method(cNokogiriXmlReader, "xml_version", xml_version, 0);
668
691
  }