nokogiri 1.18.0.rc1-x86_64-linux-gnu

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +38 -0
  3. data/LICENSE-DEPENDENCIES.md +2224 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +293 -0
  6. data/bin/nokogiri +131 -0
  7. data/dependencies.yml +42 -0
  8. data/ext/nokogiri/depend +38 -0
  9. data/ext/nokogiri/extconf.rb +1173 -0
  10. data/ext/nokogiri/gumbo.c +610 -0
  11. data/ext/nokogiri/html4_document.c +171 -0
  12. data/ext/nokogiri/html4_element_description.c +299 -0
  13. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  14. data/ext/nokogiri/html4_sax_parser.c +40 -0
  15. data/ext/nokogiri/html4_sax_parser_context.c +98 -0
  16. data/ext/nokogiri/html4_sax_push_parser.c +96 -0
  17. data/ext/nokogiri/include/libexslt/exslt.h +108 -0
  18. data/ext/nokogiri/include/libexslt/exsltconfig.h +70 -0
  19. data/ext/nokogiri/include/libexslt/exsltexports.h +63 -0
  20. data/ext/nokogiri/include/libxml2/libxml/HTMLparser.h +336 -0
  21. data/ext/nokogiri/include/libxml2/libxml/HTMLtree.h +147 -0
  22. data/ext/nokogiri/include/libxml2/libxml/SAX.h +202 -0
  23. data/ext/nokogiri/include/libxml2/libxml/SAX2.h +171 -0
  24. data/ext/nokogiri/include/libxml2/libxml/c14n.h +115 -0
  25. data/ext/nokogiri/include/libxml2/libxml/catalog.h +182 -0
  26. data/ext/nokogiri/include/libxml2/libxml/chvalid.h +230 -0
  27. data/ext/nokogiri/include/libxml2/libxml/debugXML.h +217 -0
  28. data/ext/nokogiri/include/libxml2/libxml/dict.h +82 -0
  29. data/ext/nokogiri/include/libxml2/libxml/encoding.h +244 -0
  30. data/ext/nokogiri/include/libxml2/libxml/entities.h +166 -0
  31. data/ext/nokogiri/include/libxml2/libxml/globals.h +41 -0
  32. data/ext/nokogiri/include/libxml2/libxml/hash.h +251 -0
  33. data/ext/nokogiri/include/libxml2/libxml/list.h +137 -0
  34. data/ext/nokogiri/include/libxml2/libxml/nanoftp.h +186 -0
  35. data/ext/nokogiri/include/libxml2/libxml/nanohttp.h +98 -0
  36. data/ext/nokogiri/include/libxml2/libxml/parser.h +1390 -0
  37. data/ext/nokogiri/include/libxml2/libxml/parserInternals.h +671 -0
  38. data/ext/nokogiri/include/libxml2/libxml/pattern.h +106 -0
  39. data/ext/nokogiri/include/libxml2/libxml/relaxng.h +219 -0
  40. data/ext/nokogiri/include/libxml2/libxml/schemasInternals.h +959 -0
  41. data/ext/nokogiri/include/libxml2/libxml/schematron.h +143 -0
  42. data/ext/nokogiri/include/libxml2/libxml/threads.h +87 -0
  43. data/ext/nokogiri/include/libxml2/libxml/tree.h +1382 -0
  44. data/ext/nokogiri/include/libxml2/libxml/uri.h +106 -0
  45. data/ext/nokogiri/include/libxml2/libxml/valid.h +477 -0
  46. data/ext/nokogiri/include/libxml2/libxml/xinclude.h +136 -0
  47. data/ext/nokogiri/include/libxml2/libxml/xlink.h +189 -0
  48. data/ext/nokogiri/include/libxml2/libxml/xmlIO.h +438 -0
  49. data/ext/nokogiri/include/libxml2/libxml/xmlautomata.h +146 -0
  50. data/ext/nokogiri/include/libxml2/libxml/xmlerror.h +962 -0
  51. data/ext/nokogiri/include/libxml2/libxml/xmlexports.h +146 -0
  52. data/ext/nokogiri/include/libxml2/libxml/xmlmemory.h +188 -0
  53. data/ext/nokogiri/include/libxml2/libxml/xmlmodule.h +57 -0
  54. data/ext/nokogiri/include/libxml2/libxml/xmlreader.h +436 -0
  55. data/ext/nokogiri/include/libxml2/libxml/xmlregexp.h +215 -0
  56. data/ext/nokogiri/include/libxml2/libxml/xmlsave.h +102 -0
  57. data/ext/nokogiri/include/libxml2/libxml/xmlschemas.h +249 -0
  58. data/ext/nokogiri/include/libxml2/libxml/xmlschemastypes.h +152 -0
  59. data/ext/nokogiri/include/libxml2/libxml/xmlstring.h +140 -0
  60. data/ext/nokogiri/include/libxml2/libxml/xmlunicode.h +366 -0
  61. data/ext/nokogiri/include/libxml2/libxml/xmlversion.h +347 -0
  62. data/ext/nokogiri/include/libxml2/libxml/xmlwriter.h +489 -0
  63. data/ext/nokogiri/include/libxml2/libxml/xpath.h +579 -0
  64. data/ext/nokogiri/include/libxml2/libxml/xpathInternals.h +633 -0
  65. data/ext/nokogiri/include/libxml2/libxml/xpointer.h +138 -0
  66. data/ext/nokogiri/include/libxslt/attributes.h +39 -0
  67. data/ext/nokogiri/include/libxslt/documents.h +93 -0
  68. data/ext/nokogiri/include/libxslt/extensions.h +262 -0
  69. data/ext/nokogiri/include/libxslt/extra.h +72 -0
  70. data/ext/nokogiri/include/libxslt/functions.h +78 -0
  71. data/ext/nokogiri/include/libxslt/imports.h +75 -0
  72. data/ext/nokogiri/include/libxslt/keys.h +53 -0
  73. data/ext/nokogiri/include/libxslt/namespaces.h +68 -0
  74. data/ext/nokogiri/include/libxslt/numbersInternals.h +73 -0
  75. data/ext/nokogiri/include/libxslt/pattern.h +84 -0
  76. data/ext/nokogiri/include/libxslt/preproc.h +43 -0
  77. data/ext/nokogiri/include/libxslt/security.h +104 -0
  78. data/ext/nokogiri/include/libxslt/templates.h +77 -0
  79. data/ext/nokogiri/include/libxslt/transform.h +207 -0
  80. data/ext/nokogiri/include/libxslt/variables.h +118 -0
  81. data/ext/nokogiri/include/libxslt/xslt.h +110 -0
  82. data/ext/nokogiri/include/libxslt/xsltInternals.h +1995 -0
  83. data/ext/nokogiri/include/libxslt/xsltconfig.h +146 -0
  84. data/ext/nokogiri/include/libxslt/xsltexports.h +64 -0
  85. data/ext/nokogiri/include/libxslt/xsltlocale.h +44 -0
  86. data/ext/nokogiri/include/libxslt/xsltutils.h +343 -0
  87. data/ext/nokogiri/libxml2_polyfill.c +114 -0
  88. data/ext/nokogiri/nokogiri.c +294 -0
  89. data/ext/nokogiri/nokogiri.h +238 -0
  90. data/ext/nokogiri/test_global_handlers.c +40 -0
  91. data/ext/nokogiri/xml_attr.c +103 -0
  92. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  93. data/ext/nokogiri/xml_cdata.c +62 -0
  94. data/ext/nokogiri/xml_comment.c +57 -0
  95. data/ext/nokogiri/xml_document.c +784 -0
  96. data/ext/nokogiri/xml_document_fragment.c +29 -0
  97. data/ext/nokogiri/xml_dtd.c +208 -0
  98. data/ext/nokogiri/xml_element_content.c +131 -0
  99. data/ext/nokogiri/xml_element_decl.c +69 -0
  100. data/ext/nokogiri/xml_encoding_handler.c +112 -0
  101. data/ext/nokogiri/xml_entity_decl.c +112 -0
  102. data/ext/nokogiri/xml_entity_reference.c +50 -0
  103. data/ext/nokogiri/xml_namespace.c +181 -0
  104. data/ext/nokogiri/xml_node.c +2459 -0
  105. data/ext/nokogiri/xml_node_set.c +518 -0
  106. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  107. data/ext/nokogiri/xml_reader.c +777 -0
  108. data/ext/nokogiri/xml_relax_ng.c +149 -0
  109. data/ext/nokogiri/xml_sax_parser.c +403 -0
  110. data/ext/nokogiri/xml_sax_parser_context.c +390 -0
  111. data/ext/nokogiri/xml_sax_push_parser.c +206 -0
  112. data/ext/nokogiri/xml_schema.c +226 -0
  113. data/ext/nokogiri/xml_syntax_error.c +93 -0
  114. data/ext/nokogiri/xml_text.c +59 -0
  115. data/ext/nokogiri/xml_xpath_context.c +502 -0
  116. data/ext/nokogiri/xslt_stylesheet.c +421 -0
  117. data/gumbo-parser/CHANGES.md +63 -0
  118. data/gumbo-parser/Makefile +129 -0
  119. data/gumbo-parser/THANKS +27 -0
  120. data/lib/nokogiri/3.1/nokogiri.so +0 -0
  121. data/lib/nokogiri/3.2/nokogiri.so +0 -0
  122. data/lib/nokogiri/3.3/nokogiri.so +0 -0
  123. data/lib/nokogiri/3.4/nokogiri.so +0 -0
  124. data/lib/nokogiri/class_resolver.rb +67 -0
  125. data/lib/nokogiri/css/node.rb +58 -0
  126. data/lib/nokogiri/css/parser.rb +772 -0
  127. data/lib/nokogiri/css/parser.y +277 -0
  128. data/lib/nokogiri/css/parser_extras.rb +36 -0
  129. data/lib/nokogiri/css/selector_cache.rb +38 -0
  130. data/lib/nokogiri/css/syntax_error.rb +9 -0
  131. data/lib/nokogiri/css/tokenizer.rb +155 -0
  132. data/lib/nokogiri/css/tokenizer.rex +57 -0
  133. data/lib/nokogiri/css/xpath_visitor.rb +375 -0
  134. data/lib/nokogiri/css.rb +132 -0
  135. data/lib/nokogiri/decorators/slop.rb +42 -0
  136. data/lib/nokogiri/encoding_handler.rb +57 -0
  137. data/lib/nokogiri/extension.rb +32 -0
  138. data/lib/nokogiri/gumbo.rb +15 -0
  139. data/lib/nokogiri/html.rb +48 -0
  140. data/lib/nokogiri/html4/builder.rb +37 -0
  141. data/lib/nokogiri/html4/document.rb +235 -0
  142. data/lib/nokogiri/html4/document_fragment.rb +166 -0
  143. data/lib/nokogiri/html4/element_description.rb +25 -0
  144. data/lib/nokogiri/html4/element_description_defaults.rb +2040 -0
  145. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  146. data/lib/nokogiri/html4/entity_lookup.rb +15 -0
  147. data/lib/nokogiri/html4/sax/parser.rb +48 -0
  148. data/lib/nokogiri/html4/sax/parser_context.rb +15 -0
  149. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  150. data/lib/nokogiri/html4.rb +42 -0
  151. data/lib/nokogiri/html5/builder.rb +40 -0
  152. data/lib/nokogiri/html5/document.rb +199 -0
  153. data/lib/nokogiri/html5/document_fragment.rb +200 -0
  154. data/lib/nokogiri/html5/node.rb +103 -0
  155. data/lib/nokogiri/html5.rb +368 -0
  156. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  157. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  158. data/lib/nokogiri/syntax_error.rb +6 -0
  159. data/lib/nokogiri/version/constant.rb +6 -0
  160. data/lib/nokogiri/version/info.rb +224 -0
  161. data/lib/nokogiri/version.rb +4 -0
  162. data/lib/nokogiri/xml/attr.rb +66 -0
  163. data/lib/nokogiri/xml/attribute_decl.rb +22 -0
  164. data/lib/nokogiri/xml/builder.rb +494 -0
  165. data/lib/nokogiri/xml/cdata.rb +13 -0
  166. data/lib/nokogiri/xml/character_data.rb +9 -0
  167. data/lib/nokogiri/xml/document.rb +514 -0
  168. data/lib/nokogiri/xml/document_fragment.rb +276 -0
  169. data/lib/nokogiri/xml/dtd.rb +34 -0
  170. data/lib/nokogiri/xml/element_content.rb +46 -0
  171. data/lib/nokogiri/xml/element_decl.rb +17 -0
  172. data/lib/nokogiri/xml/entity_decl.rb +23 -0
  173. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  174. data/lib/nokogiri/xml/namespace.rb +57 -0
  175. data/lib/nokogiri/xml/node/save_options.rb +76 -0
  176. data/lib/nokogiri/xml/node.rb +1650 -0
  177. data/lib/nokogiri/xml/node_set.rb +449 -0
  178. data/lib/nokogiri/xml/notation.rb +19 -0
  179. data/lib/nokogiri/xml/parse_options.rb +213 -0
  180. data/lib/nokogiri/xml/pp/character_data.rb +21 -0
  181. data/lib/nokogiri/xml/pp/node.rb +73 -0
  182. data/lib/nokogiri/xml/pp.rb +4 -0
  183. data/lib/nokogiri/xml/processing_instruction.rb +11 -0
  184. data/lib/nokogiri/xml/reader.rb +139 -0
  185. data/lib/nokogiri/xml/relax_ng.rb +75 -0
  186. data/lib/nokogiri/xml/sax/document.rb +258 -0
  187. data/lib/nokogiri/xml/sax/parser.rb +199 -0
  188. data/lib/nokogiri/xml/sax/parser_context.rb +129 -0
  189. data/lib/nokogiri/xml/sax/push_parser.rb +64 -0
  190. data/lib/nokogiri/xml/sax.rb +54 -0
  191. data/lib/nokogiri/xml/schema.rb +140 -0
  192. data/lib/nokogiri/xml/searchable.rb +297 -0
  193. data/lib/nokogiri/xml/syntax_error.rb +94 -0
  194. data/lib/nokogiri/xml/text.rb +11 -0
  195. data/lib/nokogiri/xml/xpath/syntax_error.rb +13 -0
  196. data/lib/nokogiri/xml/xpath.rb +21 -0
  197. data/lib/nokogiri/xml/xpath_context.rb +49 -0
  198. data/lib/nokogiri/xml.rb +65 -0
  199. data/lib/nokogiri/xslt/stylesheet.rb +49 -0
  200. data/lib/nokogiri/xslt.rb +129 -0
  201. data/lib/nokogiri.rb +128 -0
  202. data/lib/xsd/xmlparser/nokogiri.rb +105 -0
  203. metadata +324 -0
data/LICENSE.md ADDED
@@ -0,0 +1,9 @@
1
+ The MIT License
2
+
3
+ Copyright 2008 -- 2023 by Mike Dalessio, Aaron Patterson, Yoko Harada, Akinori MUSHA, John Shahid, Karol Bucek, Sam Ruby, Craig Barnes, Stephen Checkoway, Lars Kanis, Sergio Arbeo, Timothy Elliott, Nobuyoshi Nakada, Charles Nutter, Patrick Mahoney.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,293 @@
1
+ <div><img src="https://nokogiri.org/images/nokogiri-serif-black.png" align="right"/></div>
2
+
3
+ # Nokogiri
4
+
5
+ Nokogiri (鋸) makes it easy and painless to work with XML and HTML from Ruby. It provides a sensible, easy-to-understand API for [reading](https://nokogiri.org/tutorials/parsing_an_html_xml_document.html), writing, [modifying](https://nokogiri.org/tutorials/modifying_an_html_xml_document.html), and [querying](https://nokogiri.org/tutorials/searching_a_xml_html_document.html) documents. It is fast and standards-compliant by relying on native parsers like libxml2, libgumbo, and xerces.
6
+
7
+ ## Guiding Principles
8
+
9
+ Some guiding principles Nokogiri tries to follow:
10
+
11
+ - be secure-by-default by treating all documents as **untrusted** by default
12
+ - be a **thin-as-reasonable layer** on top of the underlying parsers, and don't attempt to fix behavioral differences between the parsers
13
+
14
+
15
+ ## Features Overview
16
+
17
+ - DOM Parser for XML, HTML4, and HTML5
18
+ - SAX Parser for XML and HTML4
19
+ - Push Parser for XML and HTML4
20
+ - Document search via XPath 1.0
21
+ - Document search via CSS3 selectors, with some jquery-like extensions
22
+ - XSD Schema validation
23
+ - XSLT transformation
24
+ - "Builder" DSL for XML and HTML documents
25
+
26
+
27
+ ## Status
28
+
29
+ [![Github Actions CI](https://github.com/sparklemotion/nokogiri/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/sparklemotion/nokogiri/actions/workflows/ci.yml)
30
+ [![Appveyor CI](https://ci.appveyor.com/api/projects/status/xj2pqwvlxwuwgr06/branch/main?svg=true)](https://ci.appveyor.com/project/flavorjones/nokogiri/branch/main)
31
+
32
+ [![Gem Version](https://badge.fury.io/rb/nokogiri.svg)](https://rubygems.org/gems/nokogiri)
33
+ [![SemVer compatibility](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.11.7&new-version=1.12.5)](https://docs.github.com/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates#about-compatibility-scores)
34
+
35
+ [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/5344/badge)](https://bestpractices.coreinfrastructure.org/projects/5344)
36
+ [![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/nokogiri)](https://tidelift.com/subscription/pkg/rubygems-nokogiri?utm_source=rubygems-nokogiri&utm_medium=referral&utm_campaign=readme)
37
+
38
+
39
+ ## Support, Getting Help, and Reporting Issues
40
+
41
+ All official documentation is posted at https://nokogiri.org (the source for which is at https://github.com/sparklemotion/nokogiri.org/, and we welcome contributions).
42
+
43
+ ### Reading
44
+
45
+ Your first stops for learning more about Nokogiri should be:
46
+
47
+ - [API Documentation](https://nokogiri.org/rdoc/index.html)
48
+ - [Tutorials](https://nokogiri.org/tutorials/toc.html)
49
+ - An excellent community-maintained [Cheat Sheet](https://github.com/sparklemotion/nokogiri/wiki/Cheat-sheet)
50
+
51
+
52
+ ### Ask For Help
53
+
54
+ There are a few ways to ask exploratory questions:
55
+
56
+ - The Nokogiri mailing list is active at https://groups.google.com/group/nokogiri-talk
57
+ - Open an issue using the "Help Request" template at https://github.com/sparklemotion/nokogiri/issues
58
+ - Open a discussion at https://github.com/sparklemotion/nokogiri/discussions
59
+
60
+ Please do not mail the maintainers at their personal addresses.
61
+
62
+
63
+ ### Report A Bug
64
+
65
+ The Nokogiri bug tracker is at https://github.com/sparklemotion/nokogiri/issues
66
+
67
+ Please use the "Bug Report" or "Installation Difficulties" templates.
68
+
69
+
70
+ ### Security and Vulnerability Reporting
71
+
72
+ Please report vulnerabilities at https://hackerone.com/nokogiri
73
+
74
+ Full information and description of our security policy is in [`SECURITY.md`](SECURITY.md)
75
+
76
+
77
+ ### Semantic Versioning Policy
78
+
79
+ Nokogiri follows [Semantic Versioning](https://semver.org/) (since 2017 or so). [![Dependabot's SemVer compatibility score for Nokogiri](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.11.7&new-version=1.12.5)](https://docs.github.com/en/code-security/supply-chain-security/managing-vulnerabilities-in-your-projects-dependencies/about-dependabot-security-updates#about-compatibility-scores)
80
+
81
+ We bump `Major.Minor.Patch` versions following this guidance:
82
+
83
+ `Major`: (we've never done this)
84
+
85
+ - Significant backwards-incompatible changes to the public API that would require rewriting existing application code.
86
+ - Some examples of backwards-incompatible changes we might someday consider for a Major release are at [`ROADMAP.md`](ROADMAP.md).
87
+
88
+ `Minor`:
89
+
90
+ - Features and bugfixes.
91
+ - Updating packaged libraries for non-security-related reasons.
92
+ - Dropping support for EOLed Ruby versions. [Some folks find this objectionable](https://github.com/sparklemotion/nokogiri/issues/1568), but [SemVer says this is OK if the public API hasn't changed](https://semver.org/#what-should-i-do-if-i-update-my-own-dependencies-without-changing-the-public-api).
93
+ - Backwards-incompatible changes to internal or private methods and constants. These are detailed in the "Changes" section of each changelog entry.
94
+ - Removal of deprecated methods or parameters, after a generous transition period; usually when those methods or parameters are rarely-used or dangerous to the user. Essentially, removals that do not justify a major version bump.
95
+
96
+
97
+ `Patch`:
98
+
99
+ - Bugfixes.
100
+ - Security updates.
101
+ - Updating packaged libraries for security-related reasons.
102
+
103
+
104
+ ### Sponsorship
105
+
106
+ You can help sponsor the maintainers of this software through one of these organizations:
107
+
108
+ - [github.com/sponsors/flavorjones](https://github.com/sponsors/flavorjones)
109
+ - [opencollective.com/nokogiri](https://opencollective.com/nokogiri)
110
+ - [tidelift.com/subscription/pkg/rubygems-nokogiri](https://tidelift.com/subscription/pkg/rubygems-nokogiri?utm_source=rubygems-nokogiri&utm_medium=referral&utm_campaign=readme)
111
+
112
+
113
+ ## Installation
114
+
115
+ Requirements:
116
+
117
+ - Ruby >= 3.1
118
+ - JRuby >= 9.4.0.0
119
+
120
+ If you are compiling the native extension against a system version of libxml2:
121
+
122
+ - libxml2 >= 2.9.2 (recommended >= 2.12.0)
123
+
124
+
125
+ ### Native Gems: Faster, more reliable installation
126
+
127
+ "Native gems" contain pre-compiled libraries for a specific machine architecture. On supported platforms, this removes the need for compiling the C extension and the packaged libraries, or for system dependencies to exist. This results in **much faster installation** and **more reliable installation**, which as you probably know are the biggest headaches for Nokogiri users.
128
+
129
+ ### Supported Platforms
130
+
131
+ Nokogiri ships pre-compiled, "native" gems for the following platforms:
132
+
133
+ - Linux:
134
+ - `x86_64-linux-gnu`, `aarch64-linux-gnu`, and `arm-linux-gnu` (req: `glibc >= 2.29`)
135
+ - `x86_64-linux-musl`, `aarch64-linux-musl`, and `arm-linux-musl`
136
+ - Darwin/MacOS: `x86_64-darwin` and `arm64-darwin`
137
+ - Windows: `x64-mingw-ucrt`
138
+ - Java: any platform running JRuby 9.4 or higher
139
+
140
+ To determine whether your system supports one of these gems, look at the output of `bundle platform` or `ruby -e 'puts Gem::Platform.local.to_s'`.
141
+
142
+ If you're on a supported platform, either `gem install` or `bundle install` should install a native gem without any additional action on your part. This installation should only take a few seconds, and your output should look something like:
143
+
144
+ ``` sh
145
+ $ gem install nokogiri
146
+ Fetching nokogiri-1.11.0-x86_64-linux.gem
147
+ Successfully installed nokogiri-1.11.0-x86_64-linux
148
+ 1 gem installed
149
+ ```
150
+
151
+
152
+ ### Other Installation Options
153
+
154
+ Because Nokogiri is a C extension, it requires that you have a C compiler toolchain, Ruby development header files, and some system dependencies installed.
155
+
156
+ The following may work for you if you have an appropriately-configured system:
157
+
158
+ ``` bash
159
+ gem install nokogiri
160
+ ```
161
+
162
+ If you have any issues, please visit [Installing Nokogiri](https://nokogiri.org/tutorials/installing_nokogiri.html) for more complete instructions and troubleshooting.
163
+
164
+
165
+ ## How To Use Nokogiri
166
+
167
+ Nokogiri is a large library, and so it's challenging to briefly summarize it. We've tried to provide long, real-world examples at [Tutorials](https://nokogiri.org/tutorials/toc.html).
168
+
169
+ ### Parsing and Querying
170
+
171
+ Here is example usage for parsing and querying a document:
172
+
173
+ ```ruby
174
+ #! /usr/bin/env ruby
175
+
176
+ require 'nokogiri'
177
+ require 'open-uri'
178
+
179
+ # Fetch and parse HTML document
180
+ doc = Nokogiri::HTML(URI.open('https://nokogiri.org/tutorials/installing_nokogiri.html'))
181
+
182
+ # Search for nodes by css
183
+ doc.css('nav ul.menu li a', 'article h2').each do |link|
184
+ puts link.content
185
+ end
186
+
187
+ # Search for nodes by xpath
188
+ doc.xpath('//nav//ul//li/a', '//article//h2').each do |link|
189
+ puts link.content
190
+ end
191
+
192
+ # Or mix and match
193
+ doc.search('nav ul.menu li a', '//article//h2').each do |link|
194
+ puts link.content
195
+ end
196
+ ```
197
+
198
+
199
+ ### Encoding
200
+
201
+ Strings are always stored as UTF-8 internally. Methods that return
202
+ text values will always return UTF-8 encoded strings. Methods that
203
+ return a string containing markup (like `to_xml`, `to_html` and
204
+ `inner_html`) will return a string encoded like the source document.
205
+
206
+ __WARNING__
207
+
208
+ Some documents declare one encoding, but actually use a different
209
+ one. In these cases, which encoding should the parser choose?
210
+
211
+ Data is just a stream of bytes. Humans add meaning to that stream. Any
212
+ particular set of bytes could be valid characters in multiple
213
+ encodings, so detecting encoding with 100% accuracy is not
214
+ possible. `libxml2` does its best, but it can't be right all the time.
215
+
216
+ If you want Nokogiri to handle the document encoding properly, your
217
+ best bet is to explicitly set the encoding. Here is an example of
218
+ explicitly setting the encoding to EUC-JP on the parser:
219
+
220
+ ```ruby
221
+ doc = Nokogiri.XML('<foo><bar /></foo>', nil, 'EUC-JP')
222
+ ```
223
+
224
+
225
+ ## Technical Overview
226
+
227
+ ### Guiding Principles
228
+
229
+ As noted above, two guiding principles of the software are:
230
+
231
+ - be secure-by-default by treating all documents as **untrusted** by default
232
+ - be a **thin-as-reasonable layer** on top of the underlying parsers, and don't attempt to fix behavioral differences between the parsers
233
+
234
+ Notably, despite all parsers being standards-compliant, there are behavioral inconsistencies between the parsers used in the CRuby and JRuby implementations, and Nokogiri does not and should not attempt to remove these inconsistencies. Instead, we surface these differences in the test suite when they are important/semantic; or we intentionally write tests to depend only on the important/semantic bits (omitting whitespace from regex matchers on results, for example).
235
+
236
+
237
+ ### CRuby
238
+
239
+ The Ruby (a.k.a., CRuby, MRI, YARV) implementation is a C extension that depends on libxml2 and libxslt (which in turn depend on zlib and possibly libiconv).
240
+
241
+ These dependencies are met by default by Nokogiri's packaged versions of the libxml2 and libxslt source code, but a configuration option `--use-system-libraries` is provided to allow specification of alternative library locations. See [Installing Nokogiri](https://nokogiri.org/tutorials/installing_nokogiri.html) for full documentation.
242
+
243
+ We provide native gems by pre-compiling libxml2 and libxslt (and potentially zlib and libiconv) and packaging them into the gem file. In this case, no compilation is necessary at installation time, which leads to faster and more reliable installation.
244
+
245
+ See [`LICENSE-DEPENDENCIES.md`](LICENSE-DEPENDENCIES.md) for more information on which dependencies are provided in which native and source gems.
246
+
247
+
248
+ ### JRuby
249
+
250
+ The Java (a.k.a. JRuby) implementation is a Java extension that depends primarily on Xerces and NekoHTML for parsing, though additional dependencies are on `isorelax`, `nekodtd`, `jing`, `serializer`, `xalan-j`, and `xml-apis`.
251
+
252
+ These dependencies are provided by pre-compiled jar files packaged in the `java` platform gem.
253
+
254
+ See [`LICENSE-DEPENDENCIES.md`](LICENSE-DEPENDENCIES.md) for more information on which dependencies are provided in which native and source gems.
255
+
256
+
257
+ ## Contributing
258
+
259
+ See [`CONTRIBUTING.md`](CONTRIBUTING.md) for an intro guide to developing Nokogiri.
260
+
261
+
262
+ ## Code of Conduct
263
+
264
+ We've adopted the Contributor Covenant code of conduct, which you can read in full in [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).
265
+
266
+
267
+ ## License
268
+
269
+ This project is licensed under the terms of the MIT license.
270
+
271
+ See this license at [`LICENSE.md`](LICENSE.md).
272
+
273
+
274
+ ### Dependencies
275
+
276
+ Some additional libraries may be distributed with your version of Nokogiri. Please see [`LICENSE-DEPENDENCIES.md`](LICENSE-DEPENDENCIES.md) for a discussion of the variations as well as the licenses thereof.
277
+
278
+
279
+ ## Authors
280
+
281
+ - Mike Dalessio
282
+ - Aaron Patterson
283
+ - Yoko Harada
284
+ - Akinori MUSHA
285
+ - John Shahid
286
+ - Karol Bucek
287
+ - Sam Ruby
288
+ - Craig Barnes
289
+ - Stephen Checkoway
290
+ - Lars Kanis
291
+ - Sergio Arbeo
292
+ - Timothy Elliott
293
+ - Nobuyoshi Nakada
data/bin/nokogiri ADDED
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "optparse"
5
+ require "open-uri"
6
+ require "uri"
7
+ require "rubygems"
8
+ require "nokogiri"
9
+ autoload :IRB, "irb"
10
+
11
+ parse_class = Nokogiri
12
+ encoding = nil
13
+
14
+ # This module provides some tunables with the nokogiri CLI for use in
15
+ # your ~/.nokogirirc.
16
+ module Nokogiri
17
+ module CLI
18
+ class << self
19
+ # Specify the console engine, defaulted to IRB.
20
+ #
21
+ # call-seq:
22
+ # require 'pry'
23
+ # Nokogiri::CLI.console = Pry
24
+ attr_writer :console
25
+
26
+ def console
27
+ case @console
28
+ when Symbol
29
+ Kernel.const_get(@console)
30
+ else
31
+ @console
32
+ end
33
+ end
34
+
35
+ attr_accessor :rcfile
36
+ end
37
+
38
+ self.rcfile = File.expand_path("~/.nokogirirc")
39
+ self.console = :IRB
40
+ end
41
+ end
42
+
43
+ def safe_read(uri_or_path)
44
+ uri = URI.parse(uri_or_path)
45
+ case uri
46
+ when URI::HTTP
47
+ uri.read
48
+ when URI::File
49
+ File.read(uri.path)
50
+ else
51
+ File.read(uri_or_path)
52
+ end
53
+ end
54
+
55
+ opts = OptionParser.new do |opts|
56
+ opts.banner = "Nokogiri: an HTML, XML, SAX, and Reader parser"
57
+ opts.define_head("Usage: nokogiri <uri|path> [options]")
58
+ opts.separator("")
59
+ opts.separator("Examples:")
60
+ opts.separator(" nokogiri https://www.ruby-lang.org/")
61
+ opts.separator(" nokogiri ./public/index.html")
62
+ opts.separator(" curl -s http://www.nokogiri.org | nokogiri -e'p $_.css(\"h1\").length'")
63
+ opts.separator("")
64
+ opts.separator("Options:")
65
+
66
+ opts.on("--type type", "Parse as type: xml or html (default: auto)", [:xml, :html]) do |v|
67
+ parse_class = { xml: Nokogiri::XML, html: Nokogiri::HTML }[v]
68
+ end
69
+
70
+ opts.on("-C file", "Specifies initialization file to load (default #{Nokogiri::CLI.rcfile})") do |v|
71
+ Nokogiri::CLI.rcfile = v
72
+ end
73
+
74
+ opts.on("-E", "--encoding encoding", "Read as encoding (default: #{encoding || "none"})") do |v|
75
+ encoding = v
76
+ end
77
+
78
+ opts.on("-e command", "Specifies script from command-line.") do |v|
79
+ @script = v
80
+ end
81
+
82
+ opts.on("--rng <uri|path>", "Validate using this rng file.") do |v|
83
+ @rng = Nokogiri::XML::RelaxNG(safe_read(v))
84
+ end
85
+
86
+ opts.on_tail("-?", "--help", "Show this message") do
87
+ puts opts
88
+ exit
89
+ end
90
+
91
+ opts.on_tail("-v", "--version", "Show version") do
92
+ puts Nokogiri::VersionInfo.instance.to_markdown
93
+ exit
94
+ end
95
+ end
96
+ opts.parse!
97
+
98
+ url = ARGV.shift
99
+
100
+ if url.to_s.strip.empty? && $stdin.tty?
101
+ puts opts
102
+ exit 1
103
+ end
104
+
105
+ if File.file?(Nokogiri::CLI.rcfile)
106
+ load Nokogiri::CLI.rcfile
107
+ end
108
+
109
+ @doc = if url || $stdin.tty?
110
+ parse_class.parse(safe_read(url), url, encoding)
111
+ else
112
+ parse_class.parse($stdin, nil, encoding)
113
+ end
114
+
115
+ $_ = @doc
116
+
117
+ if @rng
118
+ @rng.validate(@doc).each do |error|
119
+ puts error.message
120
+ end
121
+ elsif @script
122
+ begin
123
+ eval(@script, binding, "<main>") # rubocop:disable Security/Eval
124
+ rescue Exception => e # rubocop:disable Lint/RescueException
125
+ warn("ERROR: Exception raised while evaluating '#{@script}'")
126
+ raise e
127
+ end
128
+ else
129
+ puts "Your document is stored in @doc..."
130
+ Nokogiri::CLI.console.start
131
+ end
data/dependencies.yml ADDED
@@ -0,0 +1,42 @@
1
+ ---
2
+ libxml2:
3
+ version: "2.13.5"
4
+ sha256: "74fc163217a3964257d3be39af943e08861263c4231f9ef5b496b6f6d4c7b2b6"
5
+ # sha-256 hash provided in https://download.gnome.org/sources/libxml2/2.13/libxml2-2.13.5.sha256sum
6
+
7
+ libxslt:
8
+ version: "1.1.42"
9
+ sha256: "85ca62cac0d41fc77d3f6033da9df6fd73d20ea2fc18b0a3609ffb4110e1baeb"
10
+ # sha-256 hash provided in https://download.gnome.org/sources/libxslt/1.1/libxslt-1.1.42.sha256sum
11
+
12
+ zlib:
13
+ version: "1.3.1"
14
+ sha256: "9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23"
15
+ # SHA-256 hash provided on http://zlib.net/
16
+
17
+ libiconv:
18
+ version: "1.17"
19
+ sha256: "8f74213b56238c85a50a5329f77e06198771e70dd9a739779f4c02f65d971313"
20
+ # signature verified by following this path:
21
+ # - release announced at https://savannah.gnu.org/forum/forum.php?forum_id=10175
22
+ # - which links to https://savannah.gnu.org/users/haible as the releaser
23
+ # - which links to https://savannah.gnu.org/people/viewgpg.php?user_id=1871 as the gpg key
24
+ #
25
+ # So:
26
+ # - wget -q -O - https://savannah.gnu.org/people/viewgpg.php?user_id=1871 | gpg --import
27
+ # gpg: key F5BE8B267C6A406D: 1 signature not checked due to a missing key
28
+ # gpg: key F5BE8B267C6A406D: public key "Bruno Haible (Open Source Development) <bruno@clisp.org>" imported
29
+ # gpg: Total number processed: 1
30
+ # gpg: imported: 1
31
+ # gpg: marginals needed: 3 completes needed: 1 trust model: pgp
32
+ # gpg: depth: 0 valid: 4 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 4u
33
+ # gpg: next trustdb check due at 2024-05-09
34
+ # - gpg --verify libiconv-1.17.tar.gz.sig ports/archives/libiconv-1.17.tar.gz
35
+ # gpg: Signature made Sun 15 May 2022 11:26:42 AM EDT
36
+ # gpg: using RSA key 9001B85AF9E1B83DF1BDA942F5BE8B267C6A406D
37
+ # gpg: Good signature from "Bruno Haible (Open Source Development) <bruno@clisp.org>" [unknown]
38
+ # gpg: WARNING: This key is not certified with a trusted signature!
39
+ # gpg: There is no indication that the signature belongs to the owner.
40
+ # Primary key fingerprint: 9001 B85A F9E1 B83D F1BD A942 F5BE 8B26 7C6A 406D
41
+ #
42
+ # And this sha256sum is calculated from that verified tarball.
@@ -0,0 +1,38 @@
1
+ # -*-makefile-*-
2
+ # DO NOT DELETE
3
+
4
+ gumbo.o: $(srcdir)/nokogiri.h
5
+ html_document.o: $(srcdir)/nokogiri.h
6
+ html_element_description.o: $(srcdir)/nokogiri.h
7
+ html_entity_lookup.o: $(srcdir)/nokogiri.h
8
+ html_sax_parser_context.o: $(srcdir)/nokogiri.h
9
+ html_sax_push_parser.o: $(srcdir)/nokogiri.h
10
+ libxml2_backwards_compat.o: $(srcdir)/nokogiri.h
11
+ nokogiri.o: $(srcdir)/nokogiri.h
12
+ test_global_handlers.o: $(srcdir)/nokogiri.h
13
+ xml_attr.o: $(srcdir)/nokogiri.h
14
+ xml_attribute_decl.o: $(srcdir)/nokogiri.h
15
+ xml_cdata.o: $(srcdir)/nokogiri.h
16
+ xml_comment.o: $(srcdir)/nokogiri.h
17
+ xml_document.o: $(srcdir)/nokogiri.h
18
+ xml_document_fragment.o: $(srcdir)/nokogiri.h
19
+ xml_dtd.o: $(srcdir)/nokogiri.h
20
+ xml_element_content.o: $(srcdir)/nokogiri.h
21
+ xml_element_decl.o: $(srcdir)/nokogiri.h
22
+ xml_encoding_handler.o: $(srcdir)/nokogiri.h
23
+ xml_entity_decl.o: $(srcdir)/nokogiri.h
24
+ xml_entity_reference.o: $(srcdir)/nokogiri.h
25
+ xml_namespace.o: $(srcdir)/nokogiri.h
26
+ xml_node.o: $(srcdir)/nokogiri.h
27
+ xml_node_set.o: $(srcdir)/nokogiri.h
28
+ xml_processing_instruction.o: $(srcdir)/nokogiri.h
29
+ xml_reader.o: $(srcdir)/nokogiri.h
30
+ xml_relax_ng.o: $(srcdir)/nokogiri.h
31
+ xml_sax_parser.o: $(srcdir)/nokogiri.h
32
+ xml_sax_parser_context.o: $(srcdir)/nokogiri.h
33
+ xml_sax_push_parser.o: $(srcdir)/nokogiri.h
34
+ xml_schema.o: $(srcdir)/nokogiri.h
35
+ xml_syntax_error.o: $(srcdir)/nokogiri.h
36
+ xml_text.o: $(srcdir)/nokogiri.h
37
+ xml_xpath_context.o: $(srcdir)/nokogiri.h
38
+ xslt_stylesheet.o: $(srcdir)/nokogiri.h