nokogiri 1.5.10 → 1.12.5

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 (328) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE-DEPENDENCIES.md +1903 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +278 -0
  6. data/bin/nokogiri +50 -10
  7. data/dependencies.yml +74 -0
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +944 -100
  10. data/ext/nokogiri/gumbo.c +584 -0
  11. data/ext/nokogiri/html4_document.c +166 -0
  12. data/ext/nokogiri/html4_element_description.c +294 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser_context.c +120 -0
  15. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  16. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  17. data/ext/nokogiri/nokogiri.c +232 -87
  18. data/ext/nokogiri/nokogiri.h +188 -129
  19. data/ext/nokogiri/test_global_handlers.c +40 -0
  20. data/ext/nokogiri/xml_attr.c +49 -40
  21. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  22. data/ext/nokogiri/xml_cdata.c +24 -23
  23. data/ext/nokogiri/xml_comment.c +29 -21
  24. data/ext/nokogiri/xml_document.c +305 -201
  25. data/ext/nokogiri/xml_document_fragment.c +13 -15
  26. data/ext/nokogiri/xml_dtd.c +54 -48
  27. data/ext/nokogiri/xml_element_content.c +31 -26
  28. data/ext/nokogiri/xml_element_decl.c +22 -22
  29. data/ext/nokogiri/xml_encoding_handler.c +30 -19
  30. data/ext/nokogiri/xml_entity_decl.c +32 -30
  31. data/ext/nokogiri/xml_entity_reference.c +16 -18
  32. data/ext/nokogiri/xml_namespace.c +74 -32
  33. data/ext/nokogiri/xml_node.c +808 -503
  34. data/ext/nokogiri/xml_node_set.c +239 -208
  35. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  36. data/ext/nokogiri/xml_reader.c +198 -186
  37. data/ext/nokogiri/xml_relax_ng.c +52 -28
  38. data/ext/nokogiri/xml_sax_parser.c +123 -125
  39. data/ext/nokogiri/xml_sax_parser_context.c +138 -79
  40. data/ext/nokogiri/xml_sax_push_parser.c +88 -35
  41. data/ext/nokogiri/xml_schema.c +112 -33
  42. data/ext/nokogiri/xml_syntax_error.c +50 -23
  43. data/ext/nokogiri/xml_text.c +14 -18
  44. data/ext/nokogiri/xml_xpath_context.c +162 -98
  45. data/ext/nokogiri/xslt_stylesheet.c +162 -168
  46. data/gumbo-parser/CHANGES.md +63 -0
  47. data/gumbo-parser/Makefile +101 -0
  48. data/gumbo-parser/THANKS +27 -0
  49. data/gumbo-parser/src/Makefile +34 -0
  50. data/gumbo-parser/src/README.md +41 -0
  51. data/gumbo-parser/src/ascii.c +75 -0
  52. data/gumbo-parser/src/ascii.h +115 -0
  53. data/gumbo-parser/src/attribute.c +42 -0
  54. data/gumbo-parser/src/attribute.h +17 -0
  55. data/gumbo-parser/src/char_ref.c +22225 -0
  56. data/gumbo-parser/src/char_ref.h +29 -0
  57. data/gumbo-parser/src/char_ref.rl +2154 -0
  58. data/gumbo-parser/src/error.c +626 -0
  59. data/gumbo-parser/src/error.h +148 -0
  60. data/gumbo-parser/src/foreign_attrs.c +104 -0
  61. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  62. data/gumbo-parser/src/gumbo.h +943 -0
  63. data/gumbo-parser/src/insertion_mode.h +33 -0
  64. data/gumbo-parser/src/macros.h +91 -0
  65. data/gumbo-parser/src/parser.c +4886 -0
  66. data/gumbo-parser/src/parser.h +41 -0
  67. data/gumbo-parser/src/replacement.h +33 -0
  68. data/gumbo-parser/src/string_buffer.c +103 -0
  69. data/gumbo-parser/src/string_buffer.h +68 -0
  70. data/gumbo-parser/src/string_piece.c +48 -0
  71. data/gumbo-parser/src/svg_attrs.c +174 -0
  72. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  73. data/gumbo-parser/src/svg_tags.c +137 -0
  74. data/gumbo-parser/src/svg_tags.gperf +55 -0
  75. data/gumbo-parser/src/tag.c +222 -0
  76. data/gumbo-parser/src/tag_lookup.c +382 -0
  77. data/gumbo-parser/src/tag_lookup.gperf +169 -0
  78. data/gumbo-parser/src/tag_lookup.h +13 -0
  79. data/gumbo-parser/src/token_buffer.c +79 -0
  80. data/gumbo-parser/src/token_buffer.h +71 -0
  81. data/gumbo-parser/src/token_type.h +17 -0
  82. data/gumbo-parser/src/tokenizer.c +3463 -0
  83. data/gumbo-parser/src/tokenizer.h +112 -0
  84. data/gumbo-parser/src/tokenizer_states.h +339 -0
  85. data/gumbo-parser/src/utf8.c +245 -0
  86. data/gumbo-parser/src/utf8.h +164 -0
  87. data/gumbo-parser/src/util.c +68 -0
  88. data/gumbo-parser/src/util.h +30 -0
  89. data/gumbo-parser/src/vector.c +111 -0
  90. data/gumbo-parser/src/vector.h +45 -0
  91. data/lib/nokogiri/css/node.rb +1 -50
  92. data/lib/nokogiri/css/parser.rb +317 -286
  93. data/lib/nokogiri/css/parser.y +57 -43
  94. data/lib/nokogiri/css/parser_extras.rb +39 -36
  95. data/lib/nokogiri/css/syntax_error.rb +2 -1
  96. data/lib/nokogiri/css/tokenizer.rb +105 -103
  97. data/lib/nokogiri/css/tokenizer.rex +5 -5
  98. data/lib/nokogiri/css/xpath_visitor.rb +137 -48
  99. data/lib/nokogiri/css.rb +15 -14
  100. data/lib/nokogiri/decorators/slop.rb +13 -5
  101. data/lib/nokogiri/extension.rb +31 -0
  102. data/lib/nokogiri/gumbo.rb +14 -0
  103. data/lib/nokogiri/html.rb +32 -27
  104. data/lib/nokogiri/{html → html4}/builder.rb +3 -2
  105. data/lib/nokogiri/{html → html4}/document.rb +118 -50
  106. data/lib/nokogiri/{html → html4}/document_fragment.rb +20 -11
  107. data/lib/nokogiri/{html → html4}/element_description.rb +2 -1
  108. data/lib/nokogiri/{html → html4}/element_description_defaults.rb +2 -1
  109. data/lib/nokogiri/{html → html4}/entity_lookup.rb +2 -1
  110. data/lib/nokogiri/{html → html4}/sax/parser.rb +22 -14
  111. data/lib/nokogiri/html4/sax/parser_context.rb +19 -0
  112. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  113. data/lib/nokogiri/html4.rb +40 -0
  114. data/lib/nokogiri/html5/document.rb +74 -0
  115. data/lib/nokogiri/html5/document_fragment.rb +80 -0
  116. data/lib/nokogiri/html5/node.rb +93 -0
  117. data/lib/nokogiri/html5.rb +473 -0
  118. data/lib/nokogiri/jruby/dependencies.rb +20 -0
  119. data/lib/nokogiri/syntax_error.rb +1 -0
  120. data/lib/nokogiri/version/constant.rb +5 -0
  121. data/lib/nokogiri/version/info.rb +215 -0
  122. data/lib/nokogiri/version.rb +3 -91
  123. data/lib/nokogiri/xml/attr.rb +1 -0
  124. data/lib/nokogiri/xml/attribute_decl.rb +1 -0
  125. data/lib/nokogiri/xml/builder.rb +75 -33
  126. data/lib/nokogiri/xml/cdata.rb +1 -0
  127. data/lib/nokogiri/xml/character_data.rb +1 -0
  128. data/lib/nokogiri/xml/document.rb +157 -54
  129. data/lib/nokogiri/xml/document_fragment.rb +55 -8
  130. data/lib/nokogiri/xml/dtd.rb +15 -4
  131. data/lib/nokogiri/xml/element_content.rb +1 -0
  132. data/lib/nokogiri/xml/element_decl.rb +1 -0
  133. data/lib/nokogiri/xml/entity_decl.rb +1 -0
  134. data/lib/nokogiri/xml/entity_reference.rb +19 -0
  135. data/lib/nokogiri/xml/namespace.rb +1 -0
  136. data/lib/nokogiri/xml/node/save_options.rb +2 -1
  137. data/lib/nokogiri/xml/node.rb +712 -431
  138. data/lib/nokogiri/xml/node_set.rb +140 -123
  139. data/lib/nokogiri/xml/notation.rb +1 -0
  140. data/lib/nokogiri/xml/parse_options.rb +31 -0
  141. data/lib/nokogiri/xml/pp/character_data.rb +1 -0
  142. data/lib/nokogiri/xml/pp/node.rb +1 -0
  143. data/lib/nokogiri/xml/pp.rb +3 -2
  144. data/lib/nokogiri/xml/processing_instruction.rb +1 -0
  145. data/lib/nokogiri/xml/reader.rb +9 -12
  146. data/lib/nokogiri/xml/relax_ng.rb +7 -2
  147. data/lib/nokogiri/xml/sax/document.rb +25 -30
  148. data/lib/nokogiri/xml/sax/parser.rb +8 -8
  149. data/lib/nokogiri/xml/sax/parser_context.rb +1 -0
  150. data/lib/nokogiri/xml/sax/push_parser.rb +1 -0
  151. data/lib/nokogiri/xml/sax.rb +5 -4
  152. data/lib/nokogiri/xml/schema.rb +13 -4
  153. data/lib/nokogiri/xml/searchable.rb +239 -0
  154. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  155. data/lib/nokogiri/xml/text.rb +1 -0
  156. data/lib/nokogiri/xml/xpath/syntax_error.rb +2 -1
  157. data/lib/nokogiri/xml/xpath.rb +4 -5
  158. data/lib/nokogiri/xml/xpath_context.rb +1 -0
  159. data/lib/nokogiri/xml.rb +37 -35
  160. data/lib/nokogiri/xslt/stylesheet.rb +2 -1
  161. data/lib/nokogiri/xslt.rb +17 -16
  162. data/lib/nokogiri.rb +55 -58
  163. data/lib/xsd/xmlparser/nokogiri.rb +1 -0
  164. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  165. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  166. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  167. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  168. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  169. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +2511 -0
  170. data/patches/libxml2/0007-Fix-XPath-recursion-limit.patch +31 -0
  171. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +2511 -0
  172. data/patches/libxslt/0002-Fix-xml2-config-check-in-configure-script.patch +19 -0
  173. data/ports/archives/libxml2-2.9.12.tar.gz +0 -0
  174. data/ports/archives/libxslt-1.1.34.tar.gz +0 -0
  175. metadata +307 -459
  176. data/.autotest +0 -26
  177. data/.gemtest +0 -0
  178. data/CHANGELOG.ja.rdoc +0 -785
  179. data/CHANGELOG.rdoc +0 -783
  180. data/C_CODING_STYLE.rdoc +0 -33
  181. data/Manifest.txt +0 -303
  182. data/README.ja.rdoc +0 -106
  183. data/README.rdoc +0 -175
  184. data/ROADMAP.md +0 -90
  185. data/Rakefile +0 -228
  186. data/STANDARD_RESPONSES.md +0 -47
  187. data/Y_U_NO_GEMSPEC.md +0 -155
  188. data/build_all +0 -105
  189. data/ext/nokogiri/html_document.c +0 -170
  190. data/ext/nokogiri/html_document.h +0 -10
  191. data/ext/nokogiri/html_element_description.c +0 -279
  192. data/ext/nokogiri/html_element_description.h +0 -10
  193. data/ext/nokogiri/html_entity_lookup.c +0 -32
  194. data/ext/nokogiri/html_entity_lookup.h +0 -8
  195. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  196. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  197. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  198. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  199. data/ext/nokogiri/xml_attr.h +0 -9
  200. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  201. data/ext/nokogiri/xml_cdata.h +0 -9
  202. data/ext/nokogiri/xml_comment.h +0 -9
  203. data/ext/nokogiri/xml_document.h +0 -23
  204. data/ext/nokogiri/xml_document_fragment.h +0 -10
  205. data/ext/nokogiri/xml_dtd.h +0 -10
  206. data/ext/nokogiri/xml_element_content.h +0 -10
  207. data/ext/nokogiri/xml_element_decl.h +0 -9
  208. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  209. data/ext/nokogiri/xml_entity_decl.h +0 -10
  210. data/ext/nokogiri/xml_entity_reference.h +0 -9
  211. data/ext/nokogiri/xml_io.c +0 -56
  212. data/ext/nokogiri/xml_io.h +0 -11
  213. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  214. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  215. data/ext/nokogiri/xml_namespace.h +0 -13
  216. data/ext/nokogiri/xml_node.h +0 -13
  217. data/ext/nokogiri/xml_node_set.h +0 -14
  218. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  219. data/ext/nokogiri/xml_reader.h +0 -10
  220. data/ext/nokogiri/xml_relax_ng.h +0 -9
  221. data/ext/nokogiri/xml_sax_parser.h +0 -39
  222. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  223. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  224. data/ext/nokogiri/xml_schema.h +0 -9
  225. data/ext/nokogiri/xml_syntax_error.h +0 -13
  226. data/ext/nokogiri/xml_text.h +0 -9
  227. data/ext/nokogiri/xml_xpath_context.h +0 -10
  228. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  229. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  230. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  231. data/tasks/cross_compile.rb +0 -150
  232. data/tasks/nokogiri.org.rb +0 -24
  233. data/tasks/test.rb +0 -95
  234. data/test/css/test_nthiness.rb +0 -159
  235. data/test/css/test_parser.rb +0 -341
  236. data/test/css/test_tokenizer.rb +0 -198
  237. data/test/css/test_xpath_visitor.rb +0 -91
  238. data/test/decorators/test_slop.rb +0 -16
  239. data/test/files/2ch.html +0 -108
  240. data/test/files/address_book.rlx +0 -12
  241. data/test/files/address_book.xml +0 -10
  242. data/test/files/bar/bar.xsd +0 -4
  243. data/test/files/dont_hurt_em_why.xml +0 -422
  244. data/test/files/encoding.html +0 -82
  245. data/test/files/encoding.xhtml +0 -84
  246. data/test/files/exslt.xml +0 -8
  247. data/test/files/exslt.xslt +0 -35
  248. data/test/files/foo/foo.xsd +0 -4
  249. data/test/files/metacharset.html +0 -10
  250. data/test/files/noencoding.html +0 -47
  251. data/test/files/po.xml +0 -32
  252. data/test/files/po.xsd +0 -66
  253. data/test/files/shift_jis.html +0 -10
  254. data/test/files/shift_jis.xml +0 -5
  255. data/test/files/snuggles.xml +0 -3
  256. data/test/files/staff.dtd +0 -10
  257. data/test/files/staff.xml +0 -59
  258. data/test/files/staff.xslt +0 -32
  259. data/test/files/test_document_url/bar.xml +0 -2
  260. data/test/files/test_document_url/document.dtd +0 -4
  261. data/test/files/test_document_url/document.xml +0 -6
  262. data/test/files/tlm.html +0 -850
  263. data/test/files/to_be_xincluded.xml +0 -2
  264. data/test/files/valid_bar.xml +0 -2
  265. data/test/files/xinclude.xml +0 -4
  266. data/test/helper.rb +0 -154
  267. data/test/html/sax/test_parser.rb +0 -141
  268. data/test/html/sax/test_parser_context.rb +0 -46
  269. data/test/html/test_builder.rb +0 -164
  270. data/test/html/test_document.rb +0 -552
  271. data/test/html/test_document_encoding.rb +0 -138
  272. data/test/html/test_document_fragment.rb +0 -261
  273. data/test/html/test_element_description.rb +0 -105
  274. data/test/html/test_named_characters.rb +0 -14
  275. data/test/html/test_node.rb +0 -196
  276. data/test/html/test_node_encoding.rb +0 -27
  277. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  278. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  279. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  280. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  281. data/test/test_convert_xpath.rb +0 -135
  282. data/test/test_css_cache.rb +0 -45
  283. data/test/test_encoding_handler.rb +0 -46
  284. data/test/test_memory_leak.rb +0 -156
  285. data/test/test_nokogiri.rb +0 -132
  286. data/test/test_reader.rb +0 -555
  287. data/test/test_soap4r_sax.rb +0 -52
  288. data/test/test_xslt_transforms.rb +0 -254
  289. data/test/xml/node/test_save_options.rb +0 -28
  290. data/test/xml/node/test_subclass.rb +0 -44
  291. data/test/xml/sax/test_parser.rb +0 -366
  292. data/test/xml/sax/test_parser_context.rb +0 -106
  293. data/test/xml/sax/test_push_parser.rb +0 -157
  294. data/test/xml/test_attr.rb +0 -64
  295. data/test/xml/test_attribute_decl.rb +0 -86
  296. data/test/xml/test_builder.rb +0 -306
  297. data/test/xml/test_c14n.rb +0 -151
  298. data/test/xml/test_cdata.rb +0 -48
  299. data/test/xml/test_comment.rb +0 -29
  300. data/test/xml/test_document.rb +0 -828
  301. data/test/xml/test_document_encoding.rb +0 -28
  302. data/test/xml/test_document_fragment.rb +0 -223
  303. data/test/xml/test_dtd.rb +0 -103
  304. data/test/xml/test_dtd_encoding.rb +0 -33
  305. data/test/xml/test_element_content.rb +0 -56
  306. data/test/xml/test_element_decl.rb +0 -73
  307. data/test/xml/test_entity_decl.rb +0 -122
  308. data/test/xml/test_entity_reference.rb +0 -245
  309. data/test/xml/test_namespace.rb +0 -95
  310. data/test/xml/test_node.rb +0 -1137
  311. data/test/xml/test_node_attributes.rb +0 -96
  312. data/test/xml/test_node_encoding.rb +0 -107
  313. data/test/xml/test_node_inheritance.rb +0 -32
  314. data/test/xml/test_node_reparenting.rb +0 -374
  315. data/test/xml/test_node_set.rb +0 -755
  316. data/test/xml/test_parse_options.rb +0 -64
  317. data/test/xml/test_processing_instruction.rb +0 -30
  318. data/test/xml/test_reader_encoding.rb +0 -142
  319. data/test/xml/test_relax_ng.rb +0 -60
  320. data/test/xml/test_schema.rb +0 -103
  321. data/test/xml/test_syntax_error.rb +0 -12
  322. data/test/xml/test_text.rb +0 -45
  323. data/test/xml/test_unparented_node.rb +0 -422
  324. data/test/xml/test_xinclude.rb +0 -83
  325. data/test/xml/test_xpath.rb +0 -295
  326. data/test/xslt/test_custom_functions.rb +0 -133
  327. data/test/xslt/test_exception_handling.rb +0 -37
  328. data/test_all +0 -81
@@ -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,24 +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*)StringValuePtr(name));
222
- if(value == NULL) {
223
- /* this section is an attempt to workaround older versions of libxml that
224
- don't handle namespaces properly in all attribute-and-friends functions */
225
- xmlChar *prefix = NULL ;
226
- xmlChar *localname = xmlSplitQName2((xmlChar*)StringValuePtr(name), &prefix);
227
- if (localname != NULL) {
228
- value = xmlTextReaderLookupNamespace(reader, localname);
229
- xmlFree(localname) ;
230
- } else {
231
- value = xmlTextReaderLookupNamespace(reader, prefix);
232
- }
233
- xmlFree(prefix);
234
- }
235
- if(value == NULL) return Qnil;
231
+ value = xmlTextReaderGetAttribute(reader, (xmlChar *)StringValueCStr(name));
232
+ if (value == NULL) { return Qnil; }
236
233
 
237
234
  rb_value = NOKOGIRI_STR_NEW2(value);
238
235
  xmlFree(value);
@@ -245,14 +242,15 @@ static VALUE reader_attribute(VALUE self, VALUE name)
245
242
  *
246
243
  * Get the number of attributes for the current node
247
244
  */
248
- static VALUE attribute_count(VALUE self)
245
+ static VALUE
246
+ attribute_count(VALUE self)
249
247
  {
250
248
  xmlTextReaderPtr reader;
251
249
  int count;
252
250
 
253
251
  Data_Get_Struct(self, xmlTextReader, reader);
254
252
  count = xmlTextReaderAttributeCount(reader);
255
- if(count == -1) return Qnil;
253
+ if (count == -1) { return Qnil; }
256
254
 
257
255
  return INT2NUM((long)count);
258
256
  }
@@ -263,14 +261,15 @@ static VALUE attribute_count(VALUE self)
263
261
  *
264
262
  * Get the depth of the node
265
263
  */
266
- static VALUE depth(VALUE self)
264
+ static VALUE
265
+ depth(VALUE self)
267
266
  {
268
267
  xmlTextReaderPtr reader;
269
268
  int depth;
270
269
 
271
270
  Data_Get_Struct(self, xmlTextReader, reader);
272
271
  depth = xmlTextReaderDepth(reader);
273
- if(depth == -1) return Qnil;
272
+ if (depth == -1) { return Qnil; }
274
273
 
275
274
  return INT2NUM((long)depth);
276
275
  }
@@ -281,14 +280,15 @@ static VALUE depth(VALUE self)
281
280
  *
282
281
  * Get the XML version of the document being read
283
282
  */
284
- static VALUE xml_version(VALUE self)
283
+ static VALUE
284
+ xml_version(VALUE self)
285
285
  {
286
286
  xmlTextReaderPtr reader;
287
287
  const char *version;
288
288
 
289
289
  Data_Get_Struct(self, xmlTextReader, reader);
290
290
  version = (const char *)xmlTextReaderConstXmlVersion(reader);
291
- if(version == NULL) return Qnil;
291
+ if (version == NULL) { return Qnil; }
292
292
 
293
293
  return NOKOGIRI_STR_NEW2(version);
294
294
  }
@@ -299,14 +299,15 @@ static VALUE xml_version(VALUE self)
299
299
  *
300
300
  * Get the xml:lang scope within which the node resides.
301
301
  */
302
- static VALUE lang(VALUE self)
302
+ static VALUE
303
+ lang(VALUE self)
303
304
  {
304
305
  xmlTextReaderPtr reader;
305
306
  const char *lang;
306
307
 
307
308
  Data_Get_Struct(self, xmlTextReader, reader);
308
309
  lang = (const char *)xmlTextReaderConstXmlLang(reader);
309
- if(lang == NULL) return Qnil;
310
+ if (lang == NULL) { return Qnil; }
310
311
 
311
312
  return NOKOGIRI_STR_NEW2(lang);
312
313
  }
@@ -317,14 +318,15 @@ static VALUE lang(VALUE self)
317
318
  *
318
319
  * Get the text value of the node if present. Returns a utf-8 encoded string.
319
320
  */
320
- static VALUE value(VALUE self)
321
+ static VALUE
322
+ value(VALUE self)
321
323
  {
322
324
  xmlTextReaderPtr reader;
323
325
  const char *value;
324
326
 
325
327
  Data_Get_Struct(self, xmlTextReader, reader);
326
328
  value = (const char *)xmlTextReaderConstValue(reader);
327
- if(value == NULL) return Qnil;
329
+ if (value == NULL) { return Qnil; }
328
330
 
329
331
  return NOKOGIRI_STR_NEW2(value);
330
332
  }
@@ -335,14 +337,15 @@ static VALUE value(VALUE self)
335
337
  *
336
338
  * Get the shorthand reference to the namespace associated with the node.
337
339
  */
338
- static VALUE prefix(VALUE self)
340
+ static VALUE
341
+ prefix(VALUE self)
339
342
  {
340
343
  xmlTextReaderPtr reader;
341
344
  const char *prefix;
342
345
 
343
346
  Data_Get_Struct(self, xmlTextReader, reader);
344
347
  prefix = (const char *)xmlTextReaderConstPrefix(reader);
345
- if(prefix == NULL) return Qnil;
348
+ if (prefix == NULL) { return Qnil; }
346
349
 
347
350
  return NOKOGIRI_STR_NEW2(prefix);
348
351
  }
@@ -353,14 +356,15 @@ static VALUE prefix(VALUE self)
353
356
  *
354
357
  * Get the URI defining the namespace associated with the node
355
358
  */
356
- static VALUE namespace_uri(VALUE self)
359
+ static VALUE
360
+ namespace_uri(VALUE self)
357
361
  {
358
362
  xmlTextReaderPtr reader;
359
363
  const char *uri;
360
364
 
361
365
  Data_Get_Struct(self, xmlTextReader, reader);
362
366
  uri = (const char *)xmlTextReaderConstNamespaceUri(reader);
363
- if(uri == NULL) return Qnil;
367
+ if (uri == NULL) { return Qnil; }
364
368
 
365
369
  return NOKOGIRI_STR_NEW2(uri);
366
370
  }
@@ -371,14 +375,15 @@ static VALUE namespace_uri(VALUE self)
371
375
  *
372
376
  * Get the local name of the node
373
377
  */
374
- static VALUE local_name(VALUE self)
378
+ static VALUE
379
+ local_name(VALUE self)
375
380
  {
376
381
  xmlTextReaderPtr reader;
377
382
  const char *name;
378
383
 
379
384
  Data_Get_Struct(self, xmlTextReader, reader);
380
385
  name = (const char *)xmlTextReaderConstLocalName(reader);
381
- if(name == NULL) return Qnil;
386
+ if (name == NULL) { return Qnil; }
382
387
 
383
388
  return NOKOGIRI_STR_NEW2(name);
384
389
  }
@@ -389,14 +394,15 @@ static VALUE local_name(VALUE self)
389
394
  *
390
395
  * Get the name of the node. Returns a utf-8 encoded string.
391
396
  */
392
- static VALUE name(VALUE self)
397
+ static VALUE
398
+ name(VALUE self)
393
399
  {
394
400
  xmlTextReaderPtr reader;
395
401
  const char *name;
396
402
 
397
403
  Data_Get_Struct(self, xmlTextReader, reader);
398
404
  name = (const char *)xmlTextReaderConstName(reader);
399
- if(name == NULL) return Qnil;
405
+ if (name == NULL) { return Qnil; }
400
406
 
401
407
  return NOKOGIRI_STR_NEW2(name);
402
408
  }
@@ -407,14 +413,15 @@ static VALUE name(VALUE self)
407
413
  *
408
414
  * Get the xml:base of the node
409
415
  */
410
- static VALUE base_uri(VALUE self)
416
+ static VALUE
417
+ base_uri(VALUE self)
411
418
  {
412
419
  xmlTextReaderPtr reader;
413
- const char * base_uri;
420
+ const char *base_uri;
414
421
 
415
422
  Data_Get_Struct(self, xmlTextReader, reader);
416
423
  base_uri = (const char *)xmlTextReaderBaseUri(reader);
417
- if (base_uri == NULL) return Qnil;
424
+ if (base_uri == NULL) { return Qnil; }
418
425
 
419
426
  return NOKOGIRI_STR_NEW2(base_uri);
420
427
  }
@@ -425,7 +432,8 @@ static VALUE base_uri(VALUE self)
425
432
  *
426
433
  * Get the state of the reader
427
434
  */
428
- static VALUE state(VALUE self)
435
+ static VALUE
436
+ state(VALUE self)
429
437
  {
430
438
  xmlTextReaderPtr reader;
431
439
  Data_Get_Struct(self, xmlTextReader, reader);
@@ -438,7 +446,8 @@ static VALUE state(VALUE self)
438
446
  *
439
447
  * Get the type of readers current node
440
448
  */
441
- static VALUE node_type(VALUE self)
449
+ static VALUE
450
+ node_type(VALUE self)
442
451
  {
443
452
  xmlTextReaderPtr reader;
444
453
  Data_Get_Struct(self, xmlTextReader, reader);
@@ -451,7 +460,8 @@ static VALUE node_type(VALUE self)
451
460
  *
452
461
  * Move the Reader forward through the XML document.
453
462
  */
454
- static VALUE read_more(VALUE self)
463
+ static VALUE
464
+ read_more(VALUE self)
455
465
  {
456
466
  xmlTextReaderPtr reader;
457
467
  xmlErrorPtr error;
@@ -466,14 +476,15 @@ static VALUE read_more(VALUE self)
466
476
  ret = xmlTextReaderRead(reader);
467
477
  xmlSetStructuredErrorFunc(NULL, NULL);
468
478
 
469
- if(ret == 1) return self;
470
- if(ret == 0) return Qnil;
479
+ if (ret == 1) { return self; }
480
+ if (ret == 0) { return Qnil; }
471
481
 
472
482
  error = xmlGetLastError();
473
- if(error)
474
- rb_exc_raise(Nokogiri_wrap_xml_syntax_error((VALUE)NULL, error));
475
- else
483
+ if (error) {
484
+ rb_exc_raise(Nokogiri_wrap_xml_syntax_error(error));
485
+ } else {
476
486
  rb_raise(rb_eRuntimeError, "Error pulling: %d", ret);
487
+ }
477
488
 
478
489
  return Qnil;
479
490
  }
@@ -485,10 +496,11 @@ static VALUE read_more(VALUE self)
485
496
  * Read the contents of the current node, including child nodes and markup.
486
497
  * Returns a utf-8 encoded string.
487
498
  */
488
- static VALUE inner_xml(VALUE self)
499
+ static VALUE
500
+ inner_xml(VALUE self)
489
501
  {
490
502
  xmlTextReaderPtr reader;
491
- xmlChar* value;
503
+ xmlChar *value;
492
504
  VALUE str;
493
505
 
494
506
  Data_Get_Struct(self, xmlTextReader, reader);
@@ -496,8 +508,8 @@ static VALUE inner_xml(VALUE self)
496
508
  value = xmlTextReaderReadInnerXml(reader);
497
509
 
498
510
  str = Qnil;
499
- if(value) {
500
- str = NOKOGIRI_STR_NEW2((char*)value);
511
+ if (value) {
512
+ str = NOKOGIRI_STR_NEW2((char *)value);
501
513
  xmlFree(value);
502
514
  }
503
515
 
@@ -511,7 +523,8 @@ static VALUE inner_xml(VALUE self)
511
523
  * Read the current node and its contents, including child nodes and markup.
512
524
  * Returns a utf-8 encoded string.
513
525
  */
514
- static VALUE outer_xml(VALUE self)
526
+ static VALUE
527
+ outer_xml(VALUE self)
515
528
  {
516
529
  xmlTextReaderPtr reader;
517
530
  xmlChar *value;
@@ -521,8 +534,8 @@ static VALUE outer_xml(VALUE self)
521
534
 
522
535
  value = xmlTextReaderReadOuterXml(reader);
523
536
 
524
- if(value) {
525
- str = NOKOGIRI_STR_NEW2((char*)value);
537
+ if (value) {
538
+ str = NOKOGIRI_STR_NEW2((char *)value);
526
539
  xmlFree(value);
527
540
  }
528
541
  return str;
@@ -534,31 +547,32 @@ static VALUE outer_xml(VALUE self)
534
547
  *
535
548
  * Create a new reader that parses +string+
536
549
  */
537
- static VALUE from_memory(int argc, VALUE *argv, VALUE klass)
550
+ static VALUE
551
+ from_memory(int argc, VALUE *argv, VALUE klass)
538
552
  {
539
553
  VALUE rb_buffer, rb_url, encoding, rb_options;
540
554
  xmlTextReaderPtr reader;
541
- const char * c_url = NULL;
542
- const char * c_encoding = NULL;
555
+ const char *c_url = NULL;
556
+ const char *c_encoding = NULL;
543
557
  int c_options = 0;
544
558
  VALUE rb_reader, args[3];
545
559
 
546
560
  rb_scan_args(argc, argv, "13", &rb_buffer, &rb_url, &encoding, &rb_options);
547
561
 
548
- if (!RTEST(rb_buffer)) rb_raise(rb_eArgError, "string cannot be nil");
549
- if (RTEST(rb_url)) c_url = StringValuePtr(rb_url);
550
- if (RTEST(encoding)) c_encoding = StringValuePtr(encoding);
551
- 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); }
552
566
 
553
567
  reader = xmlReaderForMemory(
554
- StringValuePtr(rb_buffer),
555
- (int)RSTRING_LEN(rb_buffer),
556
- c_url,
557
- c_encoding,
558
- c_options
559
- );
560
-
561
- 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) {
562
576
  xmlFreeTextReader(reader);
563
577
  rb_raise(rb_eRuntimeError, "couldn't create a parser");
564
578
  }
@@ -578,32 +592,33 @@ static VALUE from_memory(int argc, VALUE *argv, VALUE klass)
578
592
  *
579
593
  * Create a new reader that parses +io+
580
594
  */
581
- static VALUE from_io(int argc, VALUE *argv, VALUE klass)
595
+ static VALUE
596
+ from_io(int argc, VALUE *argv, VALUE klass)
582
597
  {
583
598
  VALUE rb_io, rb_url, encoding, rb_options;
584
599
  xmlTextReaderPtr reader;
585
- const char * c_url = NULL;
586
- const char * c_encoding = NULL;
600
+ const char *c_url = NULL;
601
+ const char *c_encoding = NULL;
587
602
  int c_options = 0;
588
603
  VALUE rb_reader, args[3];
589
604
 
590
605
  rb_scan_args(argc, argv, "13", &rb_io, &rb_url, &encoding, &rb_options);
591
606
 
592
- if (!RTEST(rb_io)) rb_raise(rb_eArgError, "io cannot be nil");
593
- if (RTEST(rb_url)) c_url = StringValuePtr(rb_url);
594
- if (RTEST(encoding)) c_encoding = StringValuePtr(encoding);
595
- 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); }
596
611
 
597
612
  reader = xmlReaderForIO(
598
- (xmlInputReadCallback)io_read_callback,
599
- (xmlInputCloseCallback)io_close_callback,
600
- (void *)rb_io,
601
- c_url,
602
- c_encoding,
603
- c_options
604
- );
605
-
606
- 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) {
607
622
  xmlFreeTextReader(reader);
608
623
  rb_raise(rb_eRuntimeError, "couldn't create a parser");
609
624
  }
@@ -623,59 +638,56 @@ static VALUE from_io(int argc, VALUE *argv, VALUE klass)
623
638
  *
624
639
  * Returns true if the current node is empty, otherwise false.
625
640
  */
626
- static VALUE empty_element_p(VALUE self)
641
+ static VALUE
642
+ empty_element_p(VALUE self)
627
643
  {
628
644
  xmlTextReaderPtr reader;
629
645
 
630
646
  Data_Get_Struct(self, xmlTextReader, reader);
631
647
 
632
- if(xmlTextReaderIsEmptyElement(reader))
648
+ if (xmlTextReaderIsEmptyElement(reader)) {
633
649
  return Qtrue;
650
+ }
634
651
 
635
652
  return Qfalse;
636
653
  }
637
654
 
638
- VALUE cNokogiriXmlReader;
639
-
640
- void init_xml_reader()
655
+ void
656
+ noko_init_xml_reader()
641
657
  {
642
- VALUE module = rb_define_module("Nokogiri");
643
- VALUE xml = rb_define_module_under(module, "XML");
644
-
645
658
  /*
646
659
  * The Reader parser allows you to effectively pull parse an XML document.
647
660
  * Once instantiated, call Nokogiri::XML::Reader#each to iterate over each
648
661
  * node. Note that you may only iterate over the document once!
649
662
  */
650
- VALUE klass = rb_define_class_under(xml, "Reader", rb_cObject);
651
-
652
- cNokogiriXmlReader = klass;
653
-
654
- rb_define_singleton_method(klass, "from_memory", from_memory, -1);
655
- rb_define_singleton_method(klass, "from_io", from_io, -1);
656
-
657
- rb_define_method(klass, "read", read_more, 0);
658
- rb_define_method(klass, "inner_xml", inner_xml, 0);
659
- rb_define_method(klass, "outer_xml", outer_xml, 0);
660
- rb_define_method(klass, "state", state, 0);
661
- rb_define_method(klass, "node_type", node_type, 0);
662
- rb_define_method(klass, "name", name, 0);
663
- rb_define_method(klass, "local_name", local_name, 0);
664
- rb_define_method(klass, "namespace_uri", namespace_uri, 0);
665
- rb_define_method(klass, "prefix", prefix, 0);
666
- rb_define_method(klass, "value", value, 0);
667
- rb_define_method(klass, "lang", lang, 0);
668
- rb_define_method(klass, "xml_version", xml_version, 0);
669
- rb_define_method(klass, "depth", depth, 0);
670
- rb_define_method(klass, "attribute_count", attribute_count, 0);
671
- rb_define_method(klass, "attribute", reader_attribute, 1);
672
- rb_define_method(klass, "namespaces", namespaces, 0);
673
- rb_define_method(klass, "attribute_at", attribute_at, 1);
674
- rb_define_method(klass, "empty_element?", empty_element_p, 0);
675
- rb_define_method(klass, "attributes?", attributes_eh, 0);
676
- rb_define_method(klass, "value?", value_eh, 0);
677
- rb_define_method(klass, "default?", default_eh, 0);
678
- rb_define_method(klass, "base_uri", base_uri, 0);
679
-
680
- rb_define_private_method(klass, "attr_nodes", attribute_nodes, 0);
663
+ cNokogiriXmlReader = rb_define_class_under(mNokogiriXml, "Reader", rb_cObject);
664
+
665
+ rb_undef_alloc_func(cNokogiriXmlReader);
666
+
667
+ rb_define_singleton_method(cNokogiriXmlReader, "from_memory", from_memory, -1);
668
+ rb_define_singleton_method(cNokogiriXmlReader, "from_io", from_io, -1);
669
+
670
+ rb_define_method(cNokogiriXmlReader, "attribute", reader_attribute, 1);
671
+ rb_define_method(cNokogiriXmlReader, "attribute_at", attribute_at, 1);
672
+ rb_define_method(cNokogiriXmlReader, "attribute_count", attribute_count, 0);
673
+ rb_define_method(cNokogiriXmlReader, "attribute_nodes", rb_xml_reader_attribute_nodes, 0);
674
+ rb_define_method(cNokogiriXmlReader, "attributes?", attributes_eh, 0);
675
+ rb_define_method(cNokogiriXmlReader, "base_uri", base_uri, 0);
676
+ rb_define_method(cNokogiriXmlReader, "default?", default_eh, 0);
677
+ rb_define_method(cNokogiriXmlReader, "depth", depth, 0);
678
+ rb_define_method(cNokogiriXmlReader, "empty_element?", empty_element_p, 0);
679
+ rb_define_method(cNokogiriXmlReader, "inner_xml", inner_xml, 0);
680
+ rb_define_method(cNokogiriXmlReader, "lang", lang, 0);
681
+ rb_define_method(cNokogiriXmlReader, "local_name", local_name, 0);
682
+ rb_define_method(cNokogiriXmlReader, "name", name, 0);
683
+ rb_define_method(cNokogiriXmlReader, "namespace_uri", namespace_uri, 0);
684
+ rb_define_method(cNokogiriXmlReader, "namespaces", namespaces, 0);
685
+ rb_define_method(cNokogiriXmlReader, "node_type", node_type, 0);
686
+ rb_define_method(cNokogiriXmlReader, "outer_xml", outer_xml, 0);
687
+ rb_define_method(cNokogiriXmlReader, "prefix", prefix, 0);
688
+ rb_define_method(cNokogiriXmlReader, "read", read_more, 0);
689
+ rb_define_method(cNokogiriXmlReader, "state", state, 0);
690
+ rb_define_method(cNokogiriXmlReader, "value", value, 0);
691
+ rb_define_method(cNokogiriXmlReader, "value?", value_eh, 0);
692
+ rb_define_method(cNokogiriXmlReader, "xml_version", xml_version, 0);
681
693
  }