nokogiri 1.6.0 → 1.13.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 (340) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -19
  3. data/LICENSE-DEPENDENCIES.md +1903 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +280 -0
  6. data/bin/nokogiri +84 -31
  7. data/dependencies.yml +23 -4
  8. data/ext/nokogiri/depend +38 -358
  9. data/ext/nokogiri/extconf.rb +952 -132
  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 +231 -96
  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 +327 -223
  25. data/ext/nokogiri/xml_document_fragment.c +12 -16
  26. data/ext/nokogiri/xml_dtd.c +56 -50
  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 +45 -20
  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 +1290 -680
  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 +227 -189
  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 +227 -140
  45. data/ext/nokogiri/xslt_stylesheet.c +269 -177
  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 +4875 -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/class_resolver.rb +67 -0
  92. data/lib/nokogiri/css/node.rb +10 -58
  93. data/lib/nokogiri/css/parser.rb +407 -357
  94. data/lib/nokogiri/css/parser.y +265 -246
  95. data/lib/nokogiri/css/parser_extras.rb +52 -49
  96. data/lib/nokogiri/css/syntax_error.rb +3 -1
  97. data/lib/nokogiri/css/tokenizer.rb +107 -104
  98. data/lib/nokogiri/css/tokenizer.rex +8 -7
  99. data/lib/nokogiri/css/xpath_visitor.rb +266 -80
  100. data/lib/nokogiri/css.rb +50 -17
  101. data/lib/nokogiri/decorators/slop.rb +17 -8
  102. data/lib/nokogiri/extension.rb +31 -0
  103. data/lib/nokogiri/gumbo.rb +15 -0
  104. data/lib/nokogiri/html.rb +38 -27
  105. data/lib/nokogiri/{html → html4}/builder.rb +4 -2
  106. data/lib/nokogiri/html4/document.rb +331 -0
  107. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  108. data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
  109. data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
  110. data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
  111. data/lib/nokogiri/{html → html4}/sax/parser.rb +24 -15
  112. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  113. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  114. data/lib/nokogiri/html4.rb +46 -0
  115. data/lib/nokogiri/html5/document.rb +88 -0
  116. data/lib/nokogiri/html5/document_fragment.rb +83 -0
  117. data/lib/nokogiri/html5/node.rb +96 -0
  118. data/lib/nokogiri/html5.rb +477 -0
  119. data/lib/nokogiri/jruby/dependencies.rb +21 -0
  120. data/lib/nokogiri/syntax_error.rb +2 -0
  121. data/lib/nokogiri/version/constant.rb +6 -0
  122. data/lib/nokogiri/version/info.rb +221 -0
  123. data/lib/nokogiri/version.rb +3 -105
  124. data/lib/nokogiri/xml/attr.rb +6 -3
  125. data/lib/nokogiri/xml/attribute_decl.rb +3 -1
  126. data/lib/nokogiri/xml/builder.rb +96 -54
  127. data/lib/nokogiri/xml/cdata.rb +3 -1
  128. data/lib/nokogiri/xml/character_data.rb +2 -0
  129. data/lib/nokogiri/xml/document.rb +234 -95
  130. data/lib/nokogiri/xml/document_fragment.rb +86 -36
  131. data/lib/nokogiri/xml/dtd.rb +16 -4
  132. data/lib/nokogiri/xml/element_content.rb +2 -0
  133. data/lib/nokogiri/xml/element_decl.rb +3 -1
  134. data/lib/nokogiri/xml/entity_decl.rb +4 -2
  135. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  136. data/lib/nokogiri/xml/namespace.rb +3 -0
  137. data/lib/nokogiri/xml/node/save_options.rb +8 -4
  138. data/lib/nokogiri/xml/node.rb +947 -502
  139. data/lib/nokogiri/xml/node_set.rb +168 -159
  140. data/lib/nokogiri/xml/notation.rb +13 -0
  141. data/lib/nokogiri/xml/parse_options.rb +40 -5
  142. data/lib/nokogiri/xml/pp/character_data.rb +9 -6
  143. data/lib/nokogiri/xml/pp/node.rb +25 -26
  144. data/lib/nokogiri/xml/pp.rb +4 -2
  145. data/lib/nokogiri/xml/processing_instruction.rb +3 -1
  146. data/lib/nokogiri/xml/reader.rb +23 -28
  147. data/lib/nokogiri/xml/relax_ng.rb +8 -2
  148. data/lib/nokogiri/xml/sax/document.rb +45 -49
  149. data/lib/nokogiri/xml/sax/parser.rb +43 -41
  150. data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
  151. data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
  152. data/lib/nokogiri/xml/sax.rb +6 -4
  153. data/lib/nokogiri/xml/schema.rb +19 -9
  154. data/lib/nokogiri/xml/searchable.rb +270 -0
  155. data/lib/nokogiri/xml/syntax_error.rb +25 -1
  156. data/lib/nokogiri/xml/text.rb +2 -0
  157. data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
  158. data/lib/nokogiri/xml/xpath.rb +15 -4
  159. data/lib/nokogiri/xml/xpath_context.rb +3 -3
  160. data/lib/nokogiri/xml.rb +38 -36
  161. data/lib/nokogiri/xslt/stylesheet.rb +3 -1
  162. data/lib/nokogiri/xslt.rb +29 -20
  163. data/lib/nokogiri.rb +69 -69
  164. data/lib/xsd/xmlparser/nokogiri.rb +26 -24
  165. data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
  166. data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
  167. data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
  168. data/patches/libxml2/0004-use-glibc-strlen.patch +53 -0
  169. data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
  170. data/patches/libxml2/0006-update-automake-files-for-arm64.patch +3040 -0
  171. data/patches/libxml2/0008-htmlParseComment-handle-abruptly-closed-comments.patch +61 -0
  172. data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
  173. data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
  174. data/ports/archives/libxml2-2.9.13.tar.xz +0 -0
  175. data/ports/archives/libxslt-1.1.35.tar.xz +0 -0
  176. metadata +278 -362
  177. data/.autotest +0 -26
  178. data/.gemtest +0 -0
  179. data/.travis.yml +0 -27
  180. data/CHANGELOG.ja.rdoc +0 -819
  181. data/CHANGELOG.rdoc +0 -819
  182. data/C_CODING_STYLE.rdoc +0 -33
  183. data/Manifest.txt +0 -315
  184. data/README.ja.rdoc +0 -106
  185. data/README.rdoc +0 -175
  186. data/ROADMAP.md +0 -90
  187. data/Rakefile +0 -246
  188. data/STANDARD_RESPONSES.md +0 -47
  189. data/Y_U_NO_GEMSPEC.md +0 -155
  190. data/build_all +0 -105
  191. data/ext/nokogiri/html_document.c +0 -170
  192. data/ext/nokogiri/html_document.h +0 -10
  193. data/ext/nokogiri/html_element_description.c +0 -279
  194. data/ext/nokogiri/html_element_description.h +0 -10
  195. data/ext/nokogiri/html_entity_lookup.c +0 -32
  196. data/ext/nokogiri/html_entity_lookup.h +0 -8
  197. data/ext/nokogiri/html_sax_parser_context.c +0 -116
  198. data/ext/nokogiri/html_sax_parser_context.h +0 -11
  199. data/ext/nokogiri/html_sax_push_parser.c +0 -87
  200. data/ext/nokogiri/html_sax_push_parser.h +0 -9
  201. data/ext/nokogiri/xml_attr.h +0 -9
  202. data/ext/nokogiri/xml_attribute_decl.h +0 -9
  203. data/ext/nokogiri/xml_cdata.h +0 -9
  204. data/ext/nokogiri/xml_comment.h +0 -9
  205. data/ext/nokogiri/xml_document.h +0 -23
  206. data/ext/nokogiri/xml_document_fragment.h +0 -10
  207. data/ext/nokogiri/xml_dtd.h +0 -10
  208. data/ext/nokogiri/xml_element_content.h +0 -10
  209. data/ext/nokogiri/xml_element_decl.h +0 -9
  210. data/ext/nokogiri/xml_encoding_handler.h +0 -8
  211. data/ext/nokogiri/xml_entity_decl.h +0 -10
  212. data/ext/nokogiri/xml_entity_reference.h +0 -9
  213. data/ext/nokogiri/xml_io.c +0 -56
  214. data/ext/nokogiri/xml_io.h +0 -11
  215. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
  216. data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
  217. data/ext/nokogiri/xml_namespace.h +0 -13
  218. data/ext/nokogiri/xml_node.h +0 -13
  219. data/ext/nokogiri/xml_node_set.h +0 -14
  220. data/ext/nokogiri/xml_processing_instruction.h +0 -9
  221. data/ext/nokogiri/xml_reader.h +0 -10
  222. data/ext/nokogiri/xml_relax_ng.h +0 -9
  223. data/ext/nokogiri/xml_sax_parser.h +0 -39
  224. data/ext/nokogiri/xml_sax_parser_context.h +0 -10
  225. data/ext/nokogiri/xml_sax_push_parser.h +0 -9
  226. data/ext/nokogiri/xml_schema.h +0 -9
  227. data/ext/nokogiri/xml_syntax_error.h +0 -13
  228. data/ext/nokogiri/xml_text.h +0 -9
  229. data/ext/nokogiri/xml_xpath_context.h +0 -10
  230. data/ext/nokogiri/xslt_stylesheet.h +0 -14
  231. data/lib/nokogiri/html/document.rb +0 -254
  232. data/lib/nokogiri/html/document_fragment.rb +0 -41
  233. data/lib/nokogiri/html/element_description_defaults.rb +0 -671
  234. data/lib/nokogiri/html/sax/parser_context.rb +0 -16
  235. data/lib/nokogiri/html/sax/push_parser.rb +0 -16
  236. data/ports/archives/libxml2-2.8.0.tar.gz +0 -0
  237. data/ports/archives/libxslt-1.1.26.tar.gz +0 -0
  238. data/tasks/cross_compile.rb +0 -132
  239. data/tasks/nokogiri.org.rb +0 -24
  240. data/tasks/test.rb +0 -95
  241. data/test/css/test_nthiness.rb +0 -159
  242. data/test/css/test_parser.rb +0 -341
  243. data/test/css/test_tokenizer.rb +0 -198
  244. data/test/css/test_xpath_visitor.rb +0 -91
  245. data/test/decorators/test_slop.rb +0 -16
  246. data/test/files/2ch.html +0 -108
  247. data/test/files/address_book.rlx +0 -12
  248. data/test/files/address_book.xml +0 -10
  249. data/test/files/bar/bar.xsd +0 -4
  250. data/test/files/bogus.xml +0 -0
  251. data/test/files/dont_hurt_em_why.xml +0 -422
  252. data/test/files/encoding.html +0 -82
  253. data/test/files/encoding.xhtml +0 -84
  254. data/test/files/exslt.xml +0 -8
  255. data/test/files/exslt.xslt +0 -35
  256. data/test/files/foo/foo.xsd +0 -4
  257. data/test/files/metacharset.html +0 -10
  258. data/test/files/noencoding.html +0 -47
  259. data/test/files/po.xml +0 -32
  260. data/test/files/po.xsd +0 -66
  261. data/test/files/saml/saml20assertion_schema.xsd +0 -283
  262. data/test/files/saml/saml20protocol_schema.xsd +0 -302
  263. data/test/files/saml/xenc_schema.xsd +0 -146
  264. data/test/files/saml/xmldsig_schema.xsd +0 -318
  265. data/test/files/shift_jis.html +0 -10
  266. data/test/files/shift_jis.xml +0 -5
  267. data/test/files/snuggles.xml +0 -3
  268. data/test/files/staff.dtd +0 -10
  269. data/test/files/staff.xml +0 -59
  270. data/test/files/staff.xslt +0 -32
  271. data/test/files/test_document_url/bar.xml +0 -2
  272. data/test/files/test_document_url/document.dtd +0 -4
  273. data/test/files/test_document_url/document.xml +0 -6
  274. data/test/files/tlm.html +0 -850
  275. data/test/files/to_be_xincluded.xml +0 -2
  276. data/test/files/valid_bar.xml +0 -2
  277. data/test/files/xinclude.xml +0 -4
  278. data/test/helper.rb +0 -154
  279. data/test/html/sax/test_parser.rb +0 -141
  280. data/test/html/sax/test_parser_context.rb +0 -46
  281. data/test/html/test_builder.rb +0 -164
  282. data/test/html/test_document.rb +0 -552
  283. data/test/html/test_document_encoding.rb +0 -138
  284. data/test/html/test_document_fragment.rb +0 -261
  285. data/test/html/test_element_description.rb +0 -105
  286. data/test/html/test_named_characters.rb +0 -14
  287. data/test/html/test_node.rb +0 -196
  288. data/test/html/test_node_encoding.rb +0 -27
  289. data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
  290. data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
  291. data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
  292. data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -66
  293. data/test/test_convert_xpath.rb +0 -135
  294. data/test/test_css_cache.rb +0 -45
  295. data/test/test_encoding_handler.rb +0 -46
  296. data/test/test_memory_leak.rb +0 -156
  297. data/test/test_nokogiri.rb +0 -132
  298. data/test/test_reader.rb +0 -555
  299. data/test/test_soap4r_sax.rb +0 -52
  300. data/test/test_xslt_transforms.rb +0 -254
  301. data/test/xml/node/test_save_options.rb +0 -28
  302. data/test/xml/node/test_subclass.rb +0 -44
  303. data/test/xml/sax/test_parser.rb +0 -366
  304. data/test/xml/sax/test_parser_context.rb +0 -106
  305. data/test/xml/sax/test_push_parser.rb +0 -157
  306. data/test/xml/test_attr.rb +0 -64
  307. data/test/xml/test_attribute_decl.rb +0 -86
  308. data/test/xml/test_builder.rb +0 -306
  309. data/test/xml/test_c14n.rb +0 -151
  310. data/test/xml/test_cdata.rb +0 -48
  311. data/test/xml/test_comment.rb +0 -29
  312. data/test/xml/test_document.rb +0 -828
  313. data/test/xml/test_document_encoding.rb +0 -28
  314. data/test/xml/test_document_fragment.rb +0 -223
  315. data/test/xml/test_dtd.rb +0 -103
  316. data/test/xml/test_dtd_encoding.rb +0 -33
  317. data/test/xml/test_element_content.rb +0 -56
  318. data/test/xml/test_element_decl.rb +0 -73
  319. data/test/xml/test_entity_decl.rb +0 -122
  320. data/test/xml/test_entity_reference.rb +0 -245
  321. data/test/xml/test_namespace.rb +0 -95
  322. data/test/xml/test_node.rb +0 -1137
  323. data/test/xml/test_node_attributes.rb +0 -96
  324. data/test/xml/test_node_encoding.rb +0 -107
  325. data/test/xml/test_node_inheritance.rb +0 -32
  326. data/test/xml/test_node_reparenting.rb +0 -374
  327. data/test/xml/test_node_set.rb +0 -755
  328. data/test/xml/test_parse_options.rb +0 -64
  329. data/test/xml/test_processing_instruction.rb +0 -30
  330. data/test/xml/test_reader_encoding.rb +0 -142
  331. data/test/xml/test_relax_ng.rb +0 -60
  332. data/test/xml/test_schema.rb +0 -103
  333. data/test/xml/test_syntax_error.rb +0 -12
  334. data/test/xml/test_text.rb +0 -45
  335. data/test/xml/test_unparented_node.rb +0 -422
  336. data/test/xml/test_xinclude.rb +0 -83
  337. data/test/xml/test_xpath.rb +0 -295
  338. data/test/xslt/test_custom_functions.rb +0 -133
  339. data/test/xslt/test_exception_handling.rb +0 -37
  340. data/test_all +0 -81
@@ -1,53 +1,52 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
5
+ # :nodoc: all
3
6
  module PP
4
7
  module Node
5
- def inspect # :nodoc:
6
- attributes = inspect_attributes.reject { |x|
7
- begin
8
- attribute = send x
9
- !attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
10
- rescue NoMethodError
11
- true
12
- end
13
- }.map { |attribute|
14
- "#{attribute.to_s.sub(/_\w+/, 's')}=#{send(attribute).inspect}"
15
- }.join ' '
16
- "#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{attributes}>"
8
+ def inspect
9
+ attributes = inspect_attributes.reject do |x|
10
+ attribute = send(x)
11
+ !attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
12
+ rescue NoMethodError
13
+ true
14
+ end.map do |attribute|
15
+ "#{attribute.to_s.sub(/_\w+/, "s")}=#{send(attribute).inspect}"
16
+ end.join(" ")
17
+ "#<#{self.class.name}:#{format("0x%x", object_id)} #{attributes}>"
17
18
  end
18
19
 
19
- def pretty_print pp # :nodoc:
20
- nice_name = self.class.name.split('::').last
21
- pp.group(2, "#(#{nice_name}:#{sprintf("0x%x", object_id)} {", '})') do
22
-
20
+ def pretty_print(pp)
21
+ nice_name = self.class.name.split("::").last
22
+ pp.group(2, "#(#{nice_name}:#{format("0x%x", object_id)} {", "})") do
23
23
  pp.breakable
24
- attrs = inspect_attributes.map { |t|
24
+ attrs = inspect_attributes.map do |t|
25
25
  [t, send(t)] if respond_to?(t)
26
- }.compact.find_all { |x|
26
+ end.compact.find_all do |x|
27
27
  if x.last
28
- if [:attribute_nodes, :children].include? x.first
28
+ if [:attribute_nodes, :children].include?(x.first)
29
29
  !x.last.empty?
30
30
  else
31
31
  true
32
32
  end
33
33
  end
34
- }
34
+ end
35
35
 
36
36
  pp.seplist(attrs) do |v|
37
- if [:attribute_nodes, :children].include? v.first
38
- pp.group(2, "#{v.first.to_s.sub(/_\w+$/, 's')} = [", "]") do
37
+ if [:attribute_nodes, :children].include?(v.first)
38
+ pp.group(2, "#{v.first.to_s.sub(/_\w+$/, "s")} = [", "]") do
39
39
  pp.breakable
40
40
  pp.seplist(v.last) do |item|
41
- pp.pp item
41
+ pp.pp(item)
42
42
  end
43
43
  end
44
44
  else
45
- pp.text "#{v.first} = "
46
- pp.pp v.last
45
+ pp.text("#{v.first} = ")
46
+ pp.pp(v.last)
47
47
  end
48
48
  end
49
49
  pp.breakable
50
-
51
50
  end
52
51
  end
53
52
  end
@@ -1,2 +1,4 @@
1
- require 'nokogiri/xml/pp/node'
2
- require 'nokogiri/xml/pp/character_data'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "pp/node"
4
+ require_relative "pp/character_data"
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  class ProcessingInstruction < Node
4
- def initialize document, name, content
6
+ def initialize(document, name, content)
5
7
  end
6
8
  end
7
9
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  ###
@@ -7,18 +9,18 @@ module Nokogiri
7
9
  #
8
10
  # Here is an example of usage:
9
11
  #
10
- # reader = Nokogiri::XML::Reader(<<-eoxml)
11
- # <x xmlns:tenderlove='http://tenderlovemaking.com/'>
12
- # <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
13
- # </x>
14
- # eoxml
12
+ # reader = Nokogiri::XML::Reader(<<-eoxml)
13
+ # <x xmlns:tenderlove='http://tenderlovemaking.com/'>
14
+ # <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
15
+ # </x>
16
+ # eoxml
15
17
  #
16
- # reader.each do |node|
18
+ # reader.each do |node|
17
19
  #
18
- # # node is an instance of Nokogiri::XML::Reader
19
- # puts node.name
20
+ # # node is an instance of Nokogiri::XML::Reader
21
+ # puts node.name
20
22
  #
21
- # end
23
+ # end
22
24
  #
23
25
  # Note that Nokogiri::XML::Reader#each can only be called once!! Once
24
26
  # the cursor moves through the entire document, you must parse the
@@ -69,41 +71,34 @@ module Nokogiri
69
71
  # A list of errors encountered while parsing
70
72
  attr_accessor :errors
71
73
 
72
- # The encoding for the document
73
- attr_reader :encoding
74
-
75
74
  # The XML source
76
75
  attr_reader :source
77
76
 
78
- alias :self_closing? :empty_element?
77
+ alias_method :self_closing?, :empty_element?
79
78
 
80
- def initialize source, url = nil, encoding = nil # :nodoc:
79
+ def initialize(source, url = nil, encoding = nil) # :nodoc:
81
80
  @source = source
82
81
  @errors = []
83
82
  @encoding = encoding
84
83
  end
85
84
  private :initialize
86
85
 
87
- ###
88
- # Get a list of attributes for the current node.
86
+ # Get the attributes of the current node as a Hash
87
+ #
88
+ # [Returns] (Hash<String, String>) Attribute names and values
89
89
  def attributes
90
- Hash[attribute_nodes.map { |node|
91
- [node.name, node.to_s]
92
- }].merge(namespaces || {})
93
- end
94
-
95
- ###
96
- # Get a list of attributes for the current node
97
- def attribute_nodes
98
- nodes = attr_nodes
99
- nodes.each { |v| v.instance_variable_set(:@_r, self) }
100
- nodes
90
+ attrs_hash = attribute_nodes.each_with_object({}) do |node, hash|
91
+ hash[node.name] = node.to_s
92
+ end
93
+ ns = namespaces
94
+ attrs_hash.merge!(ns) if ns
95
+ attrs_hash
101
96
  end
102
97
 
103
98
  ###
104
99
  # Move the cursor through the document yielding the cursor to the block
105
100
  def each
106
- while cursor = self.read
101
+ while (cursor = read)
107
102
  yield cursor
108
103
  end
109
104
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  class << self
4
6
  ###
5
7
  # Create a new Nokogiri::XML::RelaxNG document from +string_or_io+.
6
8
  # See Nokogiri::XML::RelaxNG for an example.
7
- def RelaxNG string_or_io
8
- RelaxNG.new(string_or_io)
9
+ def RelaxNG(string_or_io, options = ParseOptions::DEFAULT_SCHEMA)
10
+ RelaxNG.new(string_or_io, options)
9
11
  end
10
12
  end
11
13
 
@@ -26,6 +28,10 @@ module Nokogiri
26
28
  # end
27
29
  #
28
30
  # The list of errors are Nokogiri::XML::SyntaxError objects.
31
+ #
32
+ # NOTE: RelaxNG input is always treated as TRUSTED documents, meaning that they will cause the
33
+ # underlying parsing libraries to access network resources. This is counter to Nokogiri's
34
+ # "untrusted by default" security policy, but is a limitation of the underlying libraries.
29
35
  class RelaxNG < Nokogiri::XML::Schema
30
36
  end
31
37
  end
@@ -1,20 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  ###
4
- # SAX Parsers are event driven parsers. Nokogiri provides two different
5
- # event based parsers when dealing with XML. If you want to do SAX style
6
- # parsing using HTML, check out Nokogiri::HTML::SAX.
6
+ # SAX Parsers are event driven parsers. Nokogiri provides two different event based parsers when
7
+ # dealing with XML. If you want to do SAX style parsing using HTML, check out
8
+ # Nokogiri::HTML4::SAX.
7
9
  #
8
- # The basic way a SAX style parser works is by creating a parser,
9
- # telling the parser about the events we're interested in, then giving
10
- # the parser some XML to process. The parser will notify you when
11
- # it encounters events your said you would like to know about.
10
+ # The basic way a SAX style parser works is by creating a parser, telling the parser about the
11
+ # events we're interested in, then giving the parser some XML to process. The parser will notify
12
+ # you when it encounters events you said you would like to know about.
12
13
  #
13
- # To register for events, you simply subclass Nokogiri::XML::SAX::Document,
14
- # and implement the methods for which you would like notification.
14
+ # To register for events, you simply subclass Nokogiri::XML::SAX::Document, and implement the
15
+ # methods for which you would like notification.
15
16
  #
16
- # For example, if I want to be notified when a document ends, and when an
17
- # element starts, I would write a class like this:
17
+ # For example, if I want to be notified when a document ends, and when an element starts, I
18
+ # would write a class like this:
18
19
  #
19
20
  # class MyDocument < Nokogiri::XML::SAX::Document
20
21
  # def end_document
@@ -26,8 +27,7 @@ module Nokogiri
26
27
  # end
27
28
  # end
28
29
  #
29
- # Then I would instantiate a SAX parser with this document, and feed the
30
- # parser some XML
30
+ # Then I would instantiate a SAX parser with this document, and feed the parser some XML
31
31
  #
32
32
  # # Create a new parser
33
33
  # parser = Nokogiri::XML::SAX::Parser.new(MyDocument.new)
@@ -35,25 +35,21 @@ module Nokogiri
35
35
  # # Feed the parser some XML
36
36
  # parser.parse(File.open(ARGV[0]))
37
37
  #
38
- # Now my document handler will be called when each node starts, and when
39
- # then document ends. To see what kinds of events are available, take
40
- # a look at Nokogiri::XML::SAX::Document.
38
+ # Now my document handler will be called when each node starts, and when then document ends. To
39
+ # see what kinds of events are available, take a look at Nokogiri::XML::SAX::Document.
41
40
  #
42
- # Two SAX parsers for XML are available, a parser that reads from a string
43
- # or IO object as it feels necessary, and a parser that lets you spoon
44
- # feed it XML. If you want to let Nokogiri deal with reading your XML,
45
- # use the Nokogiri::XML::SAX::Parser. If you want to have fine grain
41
+ # Two SAX parsers for XML are available, a parser that reads from a string or IO object as it
42
+ # feels necessary, and a parser that lets you spoon feed it XML. If you want to let Nokogiri
43
+ # deal with reading your XML, use the Nokogiri::XML::SAX::Parser. If you want to have fine grain
46
44
  # control over the XML input, use the Nokogiri::XML::SAX::PushParser.
47
45
  module SAX
48
46
  ###
49
- # This class is used for registering types of events you are interested
50
- # in handling. All of the methods on this class are available as
51
- # possible events while parsing an XML document. To register for any
52
- # particular event, just subclass this class and implement the methods
53
- # you are interested in knowing about.
47
+ # This class is used for registering types of events you are interested in handling. All of
48
+ # the methods on this class are available as possible events while parsing an XML document. To
49
+ # register for any particular event, just subclass this class and implement the methods you
50
+ # are interested in knowing about.
54
51
  #
55
- # To only be notified about start and end element events, write a class
56
- # like this:
52
+ # To only be notified about start and end element events, write a class like this:
57
53
  #
58
54
  # class MyDocument < Nokogiri::XML::SAX::Document
59
55
  # def start_element name, attrs = []
@@ -65,12 +61,12 @@ module Nokogiri
65
61
  # end
66
62
  # end
67
63
  #
68
- # You can use this event handler for any SAX style parser included with
69
- # Nokogiri. See Nokogiri::XML::SAX, and Nokogiri::HTML::SAX.
64
+ # You can use this event handler for any SAX style parser included with Nokogiri. See
65
+ # Nokogiri::XML::SAX, and Nokogiri::HTML4::SAX.
70
66
  class Document
71
67
  ###
72
68
  # Called when an XML declaration is parsed
73
- def xmldecl version, encoding, standalone
69
+ def xmldecl(version, encoding, standalone)
74
70
  end
75
71
 
76
72
  ###
@@ -88,13 +84,13 @@ module Nokogiri
88
84
  # * +name+ is the name of the tag
89
85
  # * +attrs+ are an assoc list of namespaces and attributes, e.g.:
90
86
  # [ ["xmlns:foo", "http://sample.net"], ["size", "large"] ]
91
- def start_element name, attrs = []
87
+ def start_element(name, attrs = [])
92
88
  end
93
89
 
94
90
  ###
95
91
  # Called at the end of an element
96
92
  # +name+ is the tag name
97
- def end_element name
93
+ def end_element(name)
98
94
  end
99
95
 
100
96
  ###
@@ -104,16 +100,16 @@ module Nokogiri
104
100
  # +prefix+ is the namespace prefix for the element
105
101
  # +uri+ is the associated namespace URI
106
102
  # +ns+ is a hash of namespace prefix:urls associated with the element
107
- def start_element_namespace name, attrs = [], prefix = nil, uri = nil, ns = []
103
+ def start_element_namespace(name, attrs = [], prefix = nil, uri = nil, ns = [])
108
104
  ###
109
105
  # Deal with SAX v1 interface
110
- name = [prefix, name].compact.join(':')
111
- attributes = ns.map { |ns_prefix,ns_uri|
112
- [['xmlns', ns_prefix].compact.join(':'), ns_uri]
113
- } + attrs.map { |attr|
114
- [[attr.prefix, attr.localname].compact.join(':'), attr.value]
115
- }
116
- start_element name, attributes
106
+ name = [prefix, name].compact.join(":")
107
+ attributes = ns.map do |ns_prefix, ns_uri|
108
+ [["xmlns", ns_prefix].compact.join(":"), ns_uri]
109
+ end + attrs.map do |attr|
110
+ [[attr.prefix, attr.localname].compact.join(":"), attr.value]
111
+ end
112
+ start_element(name, attributes)
117
113
  end
118
114
 
119
115
  ###
@@ -121,49 +117,49 @@ module Nokogiri
121
117
  # +name+ is the element's name
122
118
  # +prefix+ is the namespace prefix associated with the element
123
119
  # +uri+ is the associated namespace URI
124
- def end_element_namespace name, prefix = nil, uri = nil
120
+ def end_element_namespace(name, prefix = nil, uri = nil)
125
121
  ###
126
122
  # Deal with SAX v1 interface
127
- end_element [prefix, name].compact.join(':')
123
+ end_element([prefix, name].compact.join(":"))
128
124
  end
129
125
 
130
126
  ###
131
- # Characters read between a tag. This method might be called multiple
127
+ # Characters read between a tag. This method might be called multiple
132
128
  # times given one contiguous string of characters.
133
129
  #
134
130
  # +string+ contains the character data
135
- def characters string
131
+ def characters(string)
136
132
  end
137
133
 
138
134
  ###
139
135
  # Called when comments are encountered
140
136
  # +string+ contains the comment data
141
- def comment string
137
+ def comment(string)
142
138
  end
143
139
 
144
140
  ###
145
141
  # Called on document warnings
146
142
  # +string+ contains the warning
147
- def warning string
143
+ def warning(string)
148
144
  end
149
145
 
150
146
  ###
151
147
  # Called on document errors
152
148
  # +string+ contains the error
153
- def error string
149
+ def error(string)
154
150
  end
155
151
 
156
152
  ###
157
153
  # Called when cdata blocks are found
158
154
  # +string+ contains the cdata content
159
- def cdata_block string
155
+ def cdata_block(string)
160
156
  end
161
157
 
162
158
  ###
163
159
  # Called when processing instructions are found
164
160
  # +name+ is the target of the instruction
165
161
  # +content+ is the value of the instruction
166
- def processing_instruction name, content
162
+ def processing_instruction(name, content)
167
163
  end
168
164
  end
169
165
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  module SAX
@@ -35,29 +37,29 @@ module Nokogiri
35
37
 
36
38
  # Encodinds this parser supports
37
39
  ENCODINGS = {
38
- 'NONE' => 0, # No char encoding detected
39
- 'UTF-8' => 1, # UTF-8
40
- 'UTF16LE' => 2, # UTF-16 little endian
41
- 'UTF16BE' => 3, # UTF-16 big endian
42
- 'UCS4LE' => 4, # UCS-4 little endian
43
- 'UCS4BE' => 5, # UCS-4 big endian
44
- 'EBCDIC' => 6, # EBCDIC uh!
45
- 'UCS4-2143' => 7, # UCS-4 unusual ordering
46
- 'UCS4-3412' => 8, # UCS-4 unusual ordering
47
- 'UCS2' => 9, # UCS-2
48
- 'ISO-8859-1' => 10, # ISO-8859-1 ISO Latin 1
49
- 'ISO-8859-2' => 11, # ISO-8859-2 ISO Latin 2
50
- 'ISO-8859-3' => 12, # ISO-8859-3
51
- 'ISO-8859-4' => 13, # ISO-8859-4
52
- 'ISO-8859-5' => 14, # ISO-8859-5
53
- 'ISO-8859-6' => 15, # ISO-8859-6
54
- 'ISO-8859-7' => 16, # ISO-8859-7
55
- 'ISO-8859-8' => 17, # ISO-8859-8
56
- 'ISO-8859-9' => 18, # ISO-8859-9
57
- 'ISO-2022-JP' => 19, # ISO-2022-JP
58
- 'SHIFT-JIS' => 20, # Shift_JIS
59
- 'EUC-JP' => 21, # EUC-JP
60
- 'ASCII' => 22, # pure ASCII
40
+ "NONE" => 0, # No char encoding detected
41
+ "UTF-8" => 1, # UTF-8
42
+ "UTF16LE" => 2, # UTF-16 little endian
43
+ "UTF16BE" => 3, # UTF-16 big endian
44
+ "UCS4LE" => 4, # UCS-4 little endian
45
+ "UCS4BE" => 5, # UCS-4 big endian
46
+ "EBCDIC" => 6, # EBCDIC uh!
47
+ "UCS4-2143" => 7, # UCS-4 unusual ordering
48
+ "UCS4-3412" => 8, # UCS-4 unusual ordering
49
+ "UCS2" => 9, # UCS-2
50
+ "ISO-8859-1" => 10, # ISO-8859-1 ISO Latin 1
51
+ "ISO-8859-2" => 11, # ISO-8859-2 ISO Latin 2
52
+ "ISO-8859-3" => 12, # ISO-8859-3
53
+ "ISO-8859-4" => 13, # ISO-8859-4
54
+ "ISO-8859-5" => 14, # ISO-8859-5
55
+ "ISO-8859-6" => 15, # ISO-8859-6
56
+ "ISO-8859-7" => 16, # ISO-8859-7
57
+ "ISO-8859-8" => 17, # ISO-8859-8
58
+ "ISO-8859-9" => 18, # ISO-8859-9
59
+ "ISO-2022-JP" => 19, # ISO-2022-JP
60
+ "SHIFT-JIS" => 20, # Shift_JIS
61
+ "EUC-JP" => 21, # EUC-JP
62
+ "ASCII" => 22, # pure ASCII
61
63
  }
62
64
 
63
65
  # The Nokogiri::XML::SAX::Document where events will be sent.
@@ -67,9 +69,8 @@ module Nokogiri
67
69
  attr_accessor :encoding
68
70
 
69
71
  # Create a new Parser with +doc+ and +encoding+
70
- def initialize doc = Nokogiri::XML::SAX::Document.new, encoding = 'UTF-8'
71
- check_encoding(encoding)
72
- @encoding = encoding
72
+ def initialize(doc = Nokogiri::XML::SAX::Document.new, encoding = "UTF-8")
73
+ @encoding = check_encoding(encoding)
73
74
  @document = doc
74
75
  @warned = false
75
76
  end
@@ -77,7 +78,7 @@ module Nokogiri
77
78
  ###
78
79
  # Parse given +thing+ which may be a string containing xml, or an
79
80
  # IO object.
80
- def parse thing, &block
81
+ def parse(thing, &block)
81
82
  if thing.respond_to?(:read) && thing.respond_to?(:close)
82
83
  parse_io(thing, &block)
83
84
  else
@@ -87,35 +88,36 @@ module Nokogiri
87
88
 
88
89
  ###
89
90
  # Parse given +io+
90
- def parse_io io, encoding = 'ASCII'
91
- check_encoding(encoding)
92
- @encoding = encoding
93
- ctx = ParserContext.io(io, ENCODINGS[encoding])
91
+ def parse_io(io, encoding = "ASCII")
92
+ @encoding = check_encoding(encoding)
93
+ ctx = ParserContext.io(io, ENCODINGS[@encoding])
94
94
  yield ctx if block_given?
95
- ctx.parse_with self
95
+ ctx.parse_with(self)
96
96
  end
97
97
 
98
98
  ###
99
99
  # Parse a file with +filename+
100
- def parse_file filename
100
+ def parse_file(filename)
101
101
  raise ArgumentError unless filename
102
- raise Errno::ENOENT unless File.exists?(filename)
102
+ raise Errno::ENOENT unless File.exist?(filename)
103
103
  raise Errno::EISDIR if File.directory?(filename)
104
- ctx = ParserContext.file filename
104
+ ctx = ParserContext.file(filename)
105
105
  yield ctx if block_given?
106
- ctx.parse_with self
106
+ ctx.parse_with(self)
107
107
  end
108
108
 
109
- def parse_memory data
110
- ctx = ParserContext.memory data
109
+ def parse_memory(data)
110
+ ctx = ParserContext.memory(data)
111
111
  yield ctx if block_given?
112
- ctx.parse_with self
112
+ ctx.parse_with(self)
113
113
  end
114
114
 
115
115
  private
116
+
116
117
  def check_encoding(encoding)
117
- encoding.upcase!
118
- raise ArgumentError.new("'#{encoding}' is not a valid encoding") unless ENCODINGS[encoding]
118
+ encoding.upcase.tap do |enc|
119
+ raise ArgumentError, "'#{enc}' is not a valid encoding" unless ENCODINGS[enc]
120
+ end
119
121
  end
120
122
  end
121
123
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  module SAX
@@ -6,9 +8,12 @@ module Nokogiri
6
8
  # by the user. Instead, you should be looking at
7
9
  # Nokogiri::XML::SAX::Parser
8
10
  class ParserContext
9
- def self.new thing, encoding = 'UTF-8'
10
- [:read, :close].all? { |x| thing.respond_to?(x) } ?
11
- io(thing, Parser::ENCODINGS[encoding]) : memory(thing)
11
+ def self.new(thing, encoding = "UTF-8")
12
+ if [:read, :close].all? { |x| thing.respond_to?(x) }
13
+ io(thing, Parser::ENCODINGS[encoding])
14
+ else
15
+ memory(thing)
16
+ end
12
17
  end
13
18
  end
14
19
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Nokogiri
2
4
  module XML
3
5
  module SAX
@@ -23,7 +25,6 @@ module Nokogiri
23
25
  # parser << "/div>"
24
26
  # parser.finish
25
27
  class PushParser
26
-
27
28
  # The Nokogiri::XML::SAX::Document on which the PushParser will be
28
29
  # operating
29
30
  attr_accessor :document
@@ -31,7 +32,7 @@ module Nokogiri
31
32
  ###
32
33
  # Create a new PushParser with +doc+ as the SAX Document, providing
33
34
  # an optional +file_name+ and +encoding+
34
- def initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = 'UTF-8')
35
+ def initialize(doc = XML::SAX::Document.new, file_name = nil, encoding = "UTF-8")
35
36
  @document = doc
36
37
  @encoding = encoding
37
38
  @sax_parser = XML::SAX::Parser.new(doc)
@@ -43,16 +44,16 @@ module Nokogiri
43
44
  ###
44
45
  # Write a +chunk+ of XML to the PushParser. Any callback methods
45
46
  # that can be called will be called immediately.
46
- def write chunk, last_chunk = false
47
+ def write(chunk, last_chunk = false)
47
48
  native_write(chunk, last_chunk)
48
49
  end
49
- alias :<< :write
50
+ alias_method :<<, :write
50
51
 
51
52
  ###
52
53
  # Finish the parsing. This method is only necessary for
53
54
  # Nokogiri::XML::SAX::Document#end_document to be called.
54
55
  def finish
55
- write '', true
56
+ write("", true)
56
57
  end
57
58
  end
58
59
  end
@@ -1,4 +1,6 @@
1
- require 'nokogiri/xml/sax/document'
2
- require 'nokogiri/xml/sax/parser_context'
3
- require 'nokogiri/xml/sax/parser'
4
- require 'nokogiri/xml/sax/push_parser'
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "sax/document"
4
+ require_relative "sax/parser_context"
5
+ require_relative "sax/parser"
6
+ require_relative "sax/push_parser"