Nokogiri_precompiled_aarch64_dedshit 1.14.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (263) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +44 -0
  3. data/LICENSE-DEPENDENCIES.md +2224 -0
  4. data/LICENSE.md +9 -0
  5. data/README.md +287 -0
  6. data/bin/nokogiri +131 -0
  7. data/dependencies.yml +41 -0
  8. data/ext/java/nokogiri/Html4Document.java +157 -0
  9. data/ext/java/nokogiri/Html4ElementDescription.java +133 -0
  10. data/ext/java/nokogiri/Html4EntityLookup.java +63 -0
  11. data/ext/java/nokogiri/Html4SaxParserContext.java +289 -0
  12. data/ext/java/nokogiri/Html4SaxPushParser.java +213 -0
  13. data/ext/java/nokogiri/NokogiriService.java +613 -0
  14. data/ext/java/nokogiri/XmlAttr.java +154 -0
  15. data/ext/java/nokogiri/XmlAttributeDecl.java +119 -0
  16. data/ext/java/nokogiri/XmlCdata.java +60 -0
  17. data/ext/java/nokogiri/XmlComment.java +77 -0
  18. data/ext/java/nokogiri/XmlDocument.java +705 -0
  19. data/ext/java/nokogiri/XmlDocumentFragment.java +163 -0
  20. data/ext/java/nokogiri/XmlDtd.java +516 -0
  21. data/ext/java/nokogiri/XmlElement.java +44 -0
  22. data/ext/java/nokogiri/XmlElementContent.java +412 -0
  23. data/ext/java/nokogiri/XmlElementDecl.java +148 -0
  24. data/ext/java/nokogiri/XmlEntityDecl.java +151 -0
  25. data/ext/java/nokogiri/XmlEntityReference.java +79 -0
  26. data/ext/java/nokogiri/XmlNamespace.java +193 -0
  27. data/ext/java/nokogiri/XmlNode.java +1938 -0
  28. data/ext/java/nokogiri/XmlNodeSet.java +463 -0
  29. data/ext/java/nokogiri/XmlProcessingInstruction.java +79 -0
  30. data/ext/java/nokogiri/XmlReader.java +615 -0
  31. data/ext/java/nokogiri/XmlRelaxng.java +133 -0
  32. data/ext/java/nokogiri/XmlSaxParserContext.java +329 -0
  33. data/ext/java/nokogiri/XmlSaxPushParser.java +288 -0
  34. data/ext/java/nokogiri/XmlSchema.java +423 -0
  35. data/ext/java/nokogiri/XmlSyntaxError.java +137 -0
  36. data/ext/java/nokogiri/XmlText.java +90 -0
  37. data/ext/java/nokogiri/XmlXpathContext.java +305 -0
  38. data/ext/java/nokogiri/XsltStylesheet.java +368 -0
  39. data/ext/java/nokogiri/internals/ClosedStreamException.java +13 -0
  40. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +252 -0
  41. data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +27 -0
  42. data/ext/java/nokogiri/internals/NokogiriBlockingQueueInputStream.java +178 -0
  43. data/ext/java/nokogiri/internals/NokogiriDomParser.java +99 -0
  44. data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +140 -0
  45. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +65 -0
  46. data/ext/java/nokogiri/internals/NokogiriHandler.java +339 -0
  47. data/ext/java/nokogiri/internals/NokogiriHelpers.java +817 -0
  48. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +228 -0
  49. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +110 -0
  50. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +86 -0
  51. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +107 -0
  52. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +62 -0
  53. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +165 -0
  54. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +50 -0
  55. data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +37 -0
  56. data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +70 -0
  57. data/ext/java/nokogiri/internals/ParserContext.java +262 -0
  58. data/ext/java/nokogiri/internals/ReaderNode.java +564 -0
  59. data/ext/java/nokogiri/internals/SaveContextVisitor.java +865 -0
  60. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +50 -0
  61. data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +174 -0
  62. data/ext/java/nokogiri/internals/XmlDeclHandler.java +11 -0
  63. data/ext/java/nokogiri/internals/XmlDomParserContext.java +265 -0
  64. data/ext/java/nokogiri/internals/XmlSaxParser.java +40 -0
  65. data/ext/java/nokogiri/internals/c14n/AttrCompare.java +122 -0
  66. data/ext/java/nokogiri/internals/c14n/C14nHelper.java +178 -0
  67. data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +43 -0
  68. data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +106 -0
  69. data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +278 -0
  70. data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +664 -0
  71. data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +45 -0
  72. data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +45 -0
  73. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +388 -0
  74. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +308 -0
  75. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +47 -0
  76. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +51 -0
  77. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +51 -0
  78. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +50 -0
  79. data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +660 -0
  80. data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +194 -0
  81. data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +77 -0
  82. data/ext/java/nokogiri/internals/c14n/Constants.java +45 -0
  83. data/ext/java/nokogiri/internals/c14n/ElementProxy.java +325 -0
  84. data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +106 -0
  85. data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +86 -0
  86. data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +181 -0
  87. data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +87 -0
  88. data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +452 -0
  89. data/ext/java/nokogiri/internals/c14n/NodeFilter.java +52 -0
  90. data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +190 -0
  91. data/ext/java/nokogiri/internals/c14n/XMLUtils.java +540 -0
  92. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTM.java +1712 -0
  93. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +737 -0
  94. data/ext/nokogiri/depend +38 -0
  95. data/ext/nokogiri/extconf.rb +1086 -0
  96. data/ext/nokogiri/gumbo.c +594 -0
  97. data/ext/nokogiri/html4_document.c +167 -0
  98. data/ext/nokogiri/html4_element_description.c +294 -0
  99. data/ext/nokogiri/html4_entity_lookup.c +37 -0
  100. data/ext/nokogiri/html4_sax_parser_context.c +116 -0
  101. data/ext/nokogiri/html4_sax_push_parser.c +95 -0
  102. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  103. data/ext/nokogiri/nokogiri.c +265 -0
  104. data/ext/nokogiri/nokogiri.h +235 -0
  105. data/ext/nokogiri/test_global_handlers.c +42 -0
  106. data/ext/nokogiri/xml_attr.c +103 -0
  107. data/ext/nokogiri/xml_attribute_decl.c +70 -0
  108. data/ext/nokogiri/xml_cdata.c +57 -0
  109. data/ext/nokogiri/xml_comment.c +62 -0
  110. data/ext/nokogiri/xml_document.c +689 -0
  111. data/ext/nokogiri/xml_document_fragment.c +44 -0
  112. data/ext/nokogiri/xml_dtd.c +210 -0
  113. data/ext/nokogiri/xml_element_content.c +128 -0
  114. data/ext/nokogiri/xml_element_decl.c +69 -0
  115. data/ext/nokogiri/xml_encoding_handler.c +104 -0
  116. data/ext/nokogiri/xml_entity_decl.c +112 -0
  117. data/ext/nokogiri/xml_entity_reference.c +50 -0
  118. data/ext/nokogiri/xml_namespace.c +186 -0
  119. data/ext/nokogiri/xml_node.c +2426 -0
  120. data/ext/nokogiri/xml_node_set.c +496 -0
  121. data/ext/nokogiri/xml_processing_instruction.c +54 -0
  122. data/ext/nokogiri/xml_reader.c +794 -0
  123. data/ext/nokogiri/xml_relax_ng.c +164 -0
  124. data/ext/nokogiri/xml_sax_parser.c +316 -0
  125. data/ext/nokogiri/xml_sax_parser_context.c +283 -0
  126. data/ext/nokogiri/xml_sax_push_parser.c +166 -0
  127. data/ext/nokogiri/xml_schema.c +260 -0
  128. data/ext/nokogiri/xml_syntax_error.c +85 -0
  129. data/ext/nokogiri/xml_text.c +48 -0
  130. data/ext/nokogiri/xml_xpath_context.c +415 -0
  131. data/ext/nokogiri/xslt_stylesheet.c +363 -0
  132. data/gumbo-parser/CHANGES.md +63 -0
  133. data/gumbo-parser/Makefile +111 -0
  134. data/gumbo-parser/THANKS +27 -0
  135. data/gumbo-parser/src/Makefile +34 -0
  136. data/gumbo-parser/src/README.md +41 -0
  137. data/gumbo-parser/src/ascii.c +75 -0
  138. data/gumbo-parser/src/ascii.h +115 -0
  139. data/gumbo-parser/src/attribute.c +42 -0
  140. data/gumbo-parser/src/attribute.h +17 -0
  141. data/gumbo-parser/src/char_ref.c +22225 -0
  142. data/gumbo-parser/src/char_ref.h +29 -0
  143. data/gumbo-parser/src/char_ref.rl +2154 -0
  144. data/gumbo-parser/src/error.c +626 -0
  145. data/gumbo-parser/src/error.h +148 -0
  146. data/gumbo-parser/src/foreign_attrs.c +104 -0
  147. data/gumbo-parser/src/foreign_attrs.gperf +27 -0
  148. data/gumbo-parser/src/insertion_mode.h +33 -0
  149. data/gumbo-parser/src/macros.h +91 -0
  150. data/gumbo-parser/src/nokogiri_gumbo.h +944 -0
  151. data/gumbo-parser/src/parser.c +4878 -0
  152. data/gumbo-parser/src/parser.h +41 -0
  153. data/gumbo-parser/src/replacement.h +33 -0
  154. data/gumbo-parser/src/string_buffer.c +103 -0
  155. data/gumbo-parser/src/string_buffer.h +68 -0
  156. data/gumbo-parser/src/string_piece.c +48 -0
  157. data/gumbo-parser/src/svg_attrs.c +174 -0
  158. data/gumbo-parser/src/svg_attrs.gperf +77 -0
  159. data/gumbo-parser/src/svg_tags.c +137 -0
  160. data/gumbo-parser/src/svg_tags.gperf +55 -0
  161. data/gumbo-parser/src/tag.c +223 -0
  162. data/gumbo-parser/src/tag_lookup.c +382 -0
  163. data/gumbo-parser/src/tag_lookup.gperf +170 -0
  164. data/gumbo-parser/src/tag_lookup.h +13 -0
  165. data/gumbo-parser/src/token_buffer.c +79 -0
  166. data/gumbo-parser/src/token_buffer.h +71 -0
  167. data/gumbo-parser/src/token_type.h +17 -0
  168. data/gumbo-parser/src/tokenizer.c +3463 -0
  169. data/gumbo-parser/src/tokenizer.h +112 -0
  170. data/gumbo-parser/src/tokenizer_states.h +339 -0
  171. data/gumbo-parser/src/utf8.c +245 -0
  172. data/gumbo-parser/src/utf8.h +164 -0
  173. data/gumbo-parser/src/util.c +66 -0
  174. data/gumbo-parser/src/util.h +34 -0
  175. data/gumbo-parser/src/vector.c +111 -0
  176. data/gumbo-parser/src/vector.h +45 -0
  177. data/lib/nokogiri/class_resolver.rb +67 -0
  178. data/lib/nokogiri/css/node.rb +54 -0
  179. data/lib/nokogiri/css/parser.rb +770 -0
  180. data/lib/nokogiri/css/parser.y +277 -0
  181. data/lib/nokogiri/css/parser_extras.rb +96 -0
  182. data/lib/nokogiri/css/syntax_error.rb +9 -0
  183. data/lib/nokogiri/css/tokenizer.rb +155 -0
  184. data/lib/nokogiri/css/tokenizer.rex +56 -0
  185. data/lib/nokogiri/css/xpath_visitor.rb +359 -0
  186. data/lib/nokogiri/css.rb +66 -0
  187. data/lib/nokogiri/decorators/slop.rb +44 -0
  188. data/lib/nokogiri/encoding_handler.rb +57 -0
  189. data/lib/nokogiri/extension.rb +32 -0
  190. data/lib/nokogiri/gumbo.rb +15 -0
  191. data/lib/nokogiri/html.rb +48 -0
  192. data/lib/nokogiri/html4/builder.rb +37 -0
  193. data/lib/nokogiri/html4/document.rb +214 -0
  194. data/lib/nokogiri/html4/document_fragment.rb +54 -0
  195. data/lib/nokogiri/html4/element_description.rb +25 -0
  196. data/lib/nokogiri/html4/element_description_defaults.rb +572 -0
  197. data/lib/nokogiri/html4/encoding_reader.rb +121 -0
  198. data/lib/nokogiri/html4/entity_lookup.rb +15 -0
  199. data/lib/nokogiri/html4/sax/parser.rb +63 -0
  200. data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
  201. data/lib/nokogiri/html4/sax/push_parser.rb +37 -0
  202. data/lib/nokogiri/html4.rb +47 -0
  203. data/lib/nokogiri/html5/document.rb +168 -0
  204. data/lib/nokogiri/html5/document_fragment.rb +90 -0
  205. data/lib/nokogiri/html5/node.rb +98 -0
  206. data/lib/nokogiri/html5.rb +389 -0
  207. data/lib/nokogiri/jruby/dependencies.rb +3 -0
  208. data/lib/nokogiri/jruby/isorelax/isorelax/20030108/isorelax-20030108.jar +0 -0
  209. data/lib/nokogiri/jruby/net/sf/saxon/Saxon-HE/9.6.0-4/Saxon-HE-9.6.0-4.jar +0 -0
  210. data/lib/nokogiri/jruby/net/sourceforge/htmlunit/neko-htmlunit/2.63.0/neko-htmlunit-2.63.0.jar +0 -0
  211. data/lib/nokogiri/jruby/nokogiri_jars.rb +43 -0
  212. data/lib/nokogiri/jruby/nu/validator/jing/20200702VNU/jing-20200702VNU.jar +0 -0
  213. data/lib/nokogiri/jruby/org/nokogiri/nekodtd/0.1.11.noko2/nekodtd-0.1.11.noko2.jar +0 -0
  214. data/lib/nokogiri/jruby/xalan/serializer/2.7.3/serializer-2.7.3.jar +0 -0
  215. data/lib/nokogiri/jruby/xalan/xalan/2.7.3/xalan-2.7.3.jar +0 -0
  216. data/lib/nokogiri/jruby/xerces/xercesImpl/2.12.2/xercesImpl-2.12.2.jar +0 -0
  217. data/lib/nokogiri/jruby/xml-apis/xml-apis/1.4.01/xml-apis-1.4.01.jar +0 -0
  218. data/lib/nokogiri/syntax_error.rb +6 -0
  219. data/lib/nokogiri/version/constant.rb +6 -0
  220. data/lib/nokogiri/version/info.rb +223 -0
  221. data/lib/nokogiri/version.rb +4 -0
  222. data/lib/nokogiri/xml/attr.rb +66 -0
  223. data/lib/nokogiri/xml/attribute_decl.rb +20 -0
  224. data/lib/nokogiri/xml/builder.rb +487 -0
  225. data/lib/nokogiri/xml/cdata.rb +13 -0
  226. data/lib/nokogiri/xml/character_data.rb +9 -0
  227. data/lib/nokogiri/xml/document.rb +471 -0
  228. data/lib/nokogiri/xml/document_fragment.rb +205 -0
  229. data/lib/nokogiri/xml/dtd.rb +34 -0
  230. data/lib/nokogiri/xml/element_content.rb +38 -0
  231. data/lib/nokogiri/xml/element_decl.rb +15 -0
  232. data/lib/nokogiri/xml/entity_decl.rb +21 -0
  233. data/lib/nokogiri/xml/entity_reference.rb +20 -0
  234. data/lib/nokogiri/xml/namespace.rb +58 -0
  235. data/lib/nokogiri/xml/node/save_options.rb +68 -0
  236. data/lib/nokogiri/xml/node.rb +1563 -0
  237. data/lib/nokogiri/xml/node_set.rb +447 -0
  238. data/lib/nokogiri/xml/notation.rb +19 -0
  239. data/lib/nokogiri/xml/parse_options.rb +213 -0
  240. data/lib/nokogiri/xml/pp/character_data.rb +21 -0
  241. data/lib/nokogiri/xml/pp/node.rb +57 -0
  242. data/lib/nokogiri/xml/pp.rb +4 -0
  243. data/lib/nokogiri/xml/processing_instruction.rb +11 -0
  244. data/lib/nokogiri/xml/reader.rb +105 -0
  245. data/lib/nokogiri/xml/relax_ng.rb +38 -0
  246. data/lib/nokogiri/xml/sax/document.rb +167 -0
  247. data/lib/nokogiri/xml/sax/parser.rb +125 -0
  248. data/lib/nokogiri/xml/sax/parser_context.rb +21 -0
  249. data/lib/nokogiri/xml/sax/push_parser.rb +61 -0
  250. data/lib/nokogiri/xml/sax.rb +6 -0
  251. data/lib/nokogiri/xml/schema.rb +73 -0
  252. data/lib/nokogiri/xml/searchable.rb +270 -0
  253. data/lib/nokogiri/xml/syntax_error.rb +72 -0
  254. data/lib/nokogiri/xml/text.rb +11 -0
  255. data/lib/nokogiri/xml/xpath/syntax_error.rb +13 -0
  256. data/lib/nokogiri/xml/xpath.rb +21 -0
  257. data/lib/nokogiri/xml/xpath_context.rb +16 -0
  258. data/lib/nokogiri/xml.rb +76 -0
  259. data/lib/nokogiri/xslt/stylesheet.rb +27 -0
  260. data/lib/nokogiri/xslt.rb +65 -0
  261. data/lib/nokogiri.rb +120 -0
  262. data/lib/xsd/xmlparser/nokogiri.rb +106 -0
  263. metadata +391 -0
@@ -0,0 +1,228 @@
1
+ package nokogiri.internals;
2
+
3
+ import static nokogiri.internals.NokogiriHelpers.isNamespace;
4
+
5
+ import java.util.ArrayList;
6
+ import java.util.LinkedHashMap;
7
+ import java.util.List;
8
+ import java.util.Map;
9
+
10
+ import nokogiri.XmlNamespace;
11
+
12
+ import org.w3c.dom.Attr;
13
+ import org.w3c.dom.NamedNodeMap;
14
+ import org.w3c.dom.Node;
15
+
16
+ /**
17
+ * Cache of namespaces of each node. XmlDocument has one cache of this class.
18
+ *
19
+ * @author sergio
20
+ * @author Yoko Harada <yokolet@gmail.com>
21
+ */
22
+ public class NokogiriNamespaceCache
23
+ {
24
+
25
+ private final Map<CacheKey, CacheEntry> cache; // pair of the index of a given key and entry
26
+ private XmlNamespace defaultNamespace = null;
27
+
28
+ public
29
+ NokogiriNamespaceCache()
30
+ {
31
+ this.cache = new LinkedHashMap<CacheKey, CacheEntry>(4);
32
+ }
33
+
34
+ public
35
+ NokogiriNamespaceCache(NokogiriNamespaceCache cache)
36
+ {
37
+ this.cache = new LinkedHashMap<CacheKey, CacheEntry>(cache.size() + 2);
38
+ this.cache.putAll(cache.cache);
39
+ }
40
+
41
+ public XmlNamespace
42
+ getDefault()
43
+ {
44
+ return defaultNamespace;
45
+ }
46
+
47
+ public XmlNamespace
48
+ get(String prefix, String href)
49
+ {
50
+ if (href == null) { return null; }
51
+
52
+ CacheEntry value = cache.get(new CacheKey(prefix, href));
53
+ return value == null ? null : value.namespace;
54
+ }
55
+
56
+ public XmlNamespace
57
+ get(Node node, String prefix)
58
+ {
59
+ if (prefix == null) { return defaultNamespace; }
60
+ for (Map.Entry<CacheKey, CacheEntry> entry : cache.entrySet()) {
61
+ if (entry.getKey().prefix.equals(prefix)) {
62
+ if (entry.getValue().isOwner(node)) {
63
+ return entry.getValue().namespace;
64
+ }
65
+ }
66
+ }
67
+ return null;
68
+ }
69
+
70
+ public List<XmlNamespace>
71
+ get(String prefix)
72
+ {
73
+ List<XmlNamespace> namespaces = new ArrayList<XmlNamespace>();
74
+ if (prefix == null) {
75
+ namespaces.add(defaultNamespace);
76
+ return namespaces;
77
+ }
78
+ for (Map.Entry<CacheKey, CacheEntry> entry : cache.entrySet()) {
79
+ if (entry.getKey().prefix.equals(prefix)) {
80
+ namespaces.add(entry.getValue().namespace);
81
+ }
82
+ }
83
+ return namespaces;
84
+ }
85
+
86
+ public List<XmlNamespace>
87
+ get(Node node)
88
+ {
89
+ List<XmlNamespace> namespaces = new ArrayList<XmlNamespace>();
90
+ for (Map.Entry<CacheKey, CacheEntry> entry : cache.entrySet()) {
91
+ if (entry.getValue().isOwner(node)) {
92
+ namespaces.add(entry.getValue().namespace);
93
+ }
94
+ }
95
+ return namespaces;
96
+ }
97
+
98
+ public void
99
+ put(XmlNamespace namespace, Node ownerNode)
100
+ {
101
+ String prefix = namespace.getPrefix();
102
+ String href = namespace.getHref();
103
+ if (href == null) { return; }
104
+
105
+ CacheKey key = new CacheKey(prefix, href);
106
+ if (cache.get(key) != null) { return; }
107
+ cache.put(key, new CacheEntry(namespace, ownerNode));
108
+ if ("".equals(prefix)) { defaultNamespace = namespace; }
109
+ }
110
+
111
+ public void
112
+ remove(Node ownerNode)
113
+ {
114
+ String prefix = ownerNode.getPrefix();
115
+ String href = ownerNode.getNamespaceURI();
116
+ if (href == null) { return; }
117
+
118
+ cache.remove(new CacheKey(prefix, href));
119
+ }
120
+
121
+ public int
122
+ size()
123
+ {
124
+ return cache.size();
125
+ }
126
+
127
+ public void
128
+ clear()
129
+ {
130
+ // removes namespace declarations from node
131
+ for (CacheEntry entry : cache.values()) {
132
+ NamedNodeMap attributes = entry.ownerNode.getAttributes();
133
+ for (int j = 0; j < attributes.getLength(); j++) {
134
+ String name = ((Attr) attributes.item(j)).getName();
135
+ if (isNamespace(name)) {
136
+ attributes.removeNamedItem(name);
137
+ }
138
+ }
139
+ }
140
+ cache.clear();
141
+ defaultNamespace = null;
142
+ }
143
+
144
+ public void
145
+ replaceNode(Node oldNode, Node newNode)
146
+ {
147
+ for (Map.Entry<CacheKey, CacheEntry> entry : cache.entrySet()) {
148
+ if (entry.getValue().isOwner(oldNode)) {
149
+ entry.getValue().replaceOwner(newNode);
150
+ }
151
+ }
152
+ }
153
+
154
+ @Override
155
+ public String
156
+ toString()
157
+ {
158
+ return getClass().getName() + '@' + Integer.toHexString(hashCode()) + '(' + cache + "default=" + defaultNamespace + ')';
159
+ }
160
+
161
+ private static class CacheKey
162
+ {
163
+ final String prefix;
164
+ final String href;
165
+
166
+ CacheKey(String prefix, String href)
167
+ {
168
+ this.prefix = prefix;
169
+ this.href = href;
170
+ }
171
+
172
+ @Override
173
+ public boolean
174
+ equals(final Object obj)
175
+ {
176
+ if (obj instanceof CacheKey) {
177
+ CacheKey that = (CacheKey) obj;
178
+ return prefix == null ? that.prefix == null : prefix.equals(that.prefix) && href.equals(that.href);
179
+ }
180
+ return false;
181
+ }
182
+
183
+ @Override
184
+ public int
185
+ hashCode()
186
+ {
187
+ return (prefix == null ? 0 : prefix.hashCode()) + 37 * href.hashCode();
188
+ }
189
+
190
+ @Override
191
+ public String
192
+ toString()
193
+ {
194
+ return '[' + prefix + ']' + href;
195
+ }
196
+ }
197
+
198
+ private static class CacheEntry
199
+ {
200
+ final XmlNamespace namespace;
201
+ private Node ownerNode;
202
+
203
+ CacheEntry(XmlNamespace namespace, Node ownerNode)
204
+ {
205
+ this.namespace = namespace;
206
+ this.ownerNode = ownerNode;
207
+ }
208
+
209
+ boolean
210
+ isOwner(Node node)
211
+ {
212
+ return ownerNode.isSameNode(node);
213
+ }
214
+
215
+ void
216
+ replaceOwner(Node newNode)
217
+ {
218
+ this.ownerNode = newNode;
219
+ }
220
+
221
+ @Override
222
+ public String
223
+ toString()
224
+ {
225
+ return namespace.toString();
226
+ }
227
+ }
228
+ }
@@ -0,0 +1,110 @@
1
+ package nokogiri.internals;
2
+
3
+ import java.util.ArrayList;
4
+ import java.util.HashMap;
5
+ import java.util.Iterator;
6
+ import java.util.Map;
7
+ import java.util.Map.Entry;
8
+ import java.util.Set;
9
+
10
+ import javax.xml.XMLConstants;
11
+ import javax.xml.namespace.NamespaceContext;
12
+
13
+ /**
14
+ * Holder of each node's namespace.
15
+ *
16
+ * @author Yoko Harada <yokolet@gmail.com>
17
+ *
18
+ */
19
+ public final class NokogiriNamespaceContext implements NamespaceContext
20
+ {
21
+
22
+ /*
23
+ * these constants have matching declarations in
24
+ * ext/nokogiri/xml_xpath_context.c
25
+ */
26
+ public static final String NOKOGIRI_PREFIX = "nokogiri";
27
+ public static final String NOKOGIRI_URI = "http://www.nokogiri.org/default_ns/ruby/extensions_functions";
28
+
29
+ public static final String NOKOGIRI_BUILTIN_PREFIX = "nokogiri-builtin";
30
+ public static final String NOKOGIRI_BUILTIN_URI = "https://www.nokogiri.org/default_ns/ruby/builtins";
31
+
32
+ private final Map<String, String> register;
33
+
34
+ public static NokogiriNamespaceContext
35
+ create()
36
+ {
37
+ return new NokogiriNamespaceContext();
38
+ }
39
+
40
+ private
41
+ NokogiriNamespaceContext()
42
+ {
43
+ register = new HashMap<String, String>(6, 1);
44
+ register.put(NOKOGIRI_PREFIX, NOKOGIRI_URI);
45
+ register.put(NOKOGIRI_BUILTIN_PREFIX, NOKOGIRI_BUILTIN_URI);
46
+ register.put("xml", "http://www.w3.org/XML/1998/namespace");
47
+ register.put("xhtml", "http://www.w3.org/1999/xhtml");
48
+ }
49
+
50
+ public String
51
+ getNamespaceURI(String prefix)
52
+ {
53
+ if (prefix == null) {
54
+ throw new IllegalArgumentException();
55
+ }
56
+ String uri = this.register.get(prefix);
57
+ if (uri != null) {
58
+ return uri;
59
+ }
60
+
61
+ if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) {
62
+ uri = this.register.get(XMLConstants.XMLNS_ATTRIBUTE);
63
+ return (uri == null) ? XMLConstants.XMLNS_ATTRIBUTE_NS_URI : uri;
64
+ }
65
+
66
+ return XMLConstants.NULL_NS_URI;
67
+ }
68
+
69
+ public String
70
+ getPrefix(String uri)
71
+ {
72
+ if (uri == null) {
73
+ throw new IllegalArgumentException("uri is null");
74
+ }
75
+ Set<Entry<String, String>> entries = register.entrySet();
76
+ for (Entry<String, String> entry : entries) {
77
+ if (uri.equals(entry.getValue())) {
78
+ return entry.getKey();
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+
84
+ public Iterator<String>
85
+ getPrefixes(String uri)
86
+ {
87
+ Set<Entry<String, String>> entries = register.entrySet();
88
+ ArrayList<String> list = new ArrayList<String>(entries.size());
89
+ for (Entry<String, String> entry : entries) {
90
+ if (uri.equals(entry.getValue())) {
91
+ list.add(entry.getKey());
92
+ }
93
+ }
94
+ return list.iterator();
95
+ }
96
+
97
+ public Set<String>
98
+ getAllPrefixes()
99
+ {
100
+ return register.keySet();
101
+ }
102
+
103
+ public void
104
+ registerNamespace(String prefix, String uri)
105
+ {
106
+ if ("xmlns".equals(prefix)) { prefix = ""; }
107
+ register.put(prefix, uri);
108
+ }
109
+
110
+ }
@@ -0,0 +1,86 @@
1
+ package nokogiri.internals;
2
+
3
+ import org.apache.xerces.xni.parser.XMLParseException;
4
+ import org.jruby.Ruby;
5
+ import org.xml.sax.SAXException;
6
+ import org.xml.sax.SAXParseException;
7
+
8
+ /**
9
+ * Error Handler for XML document when recover is true (default).
10
+ *
11
+ * @author sergio
12
+ * @author Yoko Harada <yokolet@gmail.com>
13
+ */
14
+ public class NokogiriNonStrictErrorHandler extends NokogiriErrorHandler
15
+ {
16
+ public
17
+ NokogiriNonStrictErrorHandler(Ruby runtime, boolean noerror, boolean nowarning)
18
+ {
19
+ super(runtime, noerror, nowarning);
20
+ }
21
+
22
+ public void
23
+ warning(SAXParseException ex) throws SAXException
24
+ {
25
+ addError(ex);
26
+ }
27
+
28
+ public void
29
+ error(SAXParseException ex) throws SAXException
30
+ {
31
+ addError(ex);
32
+ }
33
+
34
+ public void
35
+ fatalError(SAXParseException ex) throws SAXException
36
+ {
37
+ // fix #837
38
+ // Xerces won't skip the reference entity (and other invalid) constructs
39
+ // found in the prolog, instead it will keep calling this method and we'll
40
+ // keep inserting the error in the document errors array until we run
41
+ // out of memory
42
+ addError(ex);
43
+ String message = ex.getMessage();
44
+
45
+ // The problem with Xerces is that some errors will cause the
46
+ // parser not to advance the reader and it will keep reporting
47
+ // the same error over and over, which will cause the parser
48
+ // to enter an infinite loop unless we throw the exception.
49
+ if (message != null && isFatal(message)) {
50
+ throw ex;
51
+ }
52
+ }
53
+
54
+ public void
55
+ error(String domain, String key, XMLParseException e)
56
+ {
57
+ addError(e);
58
+ }
59
+
60
+ public void
61
+ fatalError(String domain, String key, XMLParseException e)
62
+ {
63
+ addError(e);
64
+ }
65
+
66
+ public void
67
+ warning(String domain, String key, XMLParseException e)
68
+ {
69
+ addError(e);
70
+ }
71
+
72
+ /*
73
+ * Determine whether this is a fatal error that should cause
74
+ * the parsing to stop, or an error that can be ignored.
75
+ */
76
+ private static boolean
77
+ isFatal(String msg)
78
+ {
79
+ String msgLowerCase = msg.toLowerCase();
80
+ return
81
+ msgLowerCase.contains("in prolog") ||
82
+ msgLowerCase.contains("limit") ||
83
+ msgLowerCase.contains("preceding the root element must be well-formed") ||
84
+ msgLowerCase.contains("following the root element must be well-formed");
85
+ }
86
+ }
@@ -0,0 +1,107 @@
1
+ package nokogiri.internals;
2
+
3
+ import org.apache.xerces.xni.parser.XMLParseException;
4
+ import org.jruby.Ruby;
5
+ import org.xml.sax.SAXException;
6
+ import org.xml.sax.SAXParseException;
7
+
8
+ /**
9
+ * Non-strict error handler for NekoHtml.
10
+ *
11
+ * NekoHtml adds too many warnings, which makes later processing hard. For example,
12
+ * Nokogiri wants to know whether number of errors have been increased or not to judge
13
+ * availability of creating NodeSet from a given fragment. When the fragment nodes
14
+ * are to be created from HTML document, which means NekoHtml is used, always errors
15
+ * increases. As a result, even though the given fragment is correct HTML, NodeSet
16
+ * base on the given fragment won't be created. This is why all warnings are eliminated.
17
+ *
18
+ * @author Yoko Harada <yokolet@gmail.com>
19
+ */
20
+ public class NokogiriNonStrictErrorHandler4NekoHtml extends NokogiriErrorHandler
21
+ {
22
+
23
+ public
24
+ NokogiriNonStrictErrorHandler4NekoHtml(Ruby runtime, boolean nowarning)
25
+ {
26
+ super(runtime, false, nowarning);
27
+ }
28
+
29
+ public
30
+ NokogiriNonStrictErrorHandler4NekoHtml(Ruby runtime, boolean noerror, boolean nowarning)
31
+ {
32
+ super(runtime, noerror, nowarning);
33
+ }
34
+
35
+ public void
36
+ warning(SAXParseException ex) throws SAXException
37
+ {
38
+ //noop. NekoHtml adds too many warnings.
39
+ }
40
+
41
+ public void
42
+ error(SAXParseException ex) throws SAXException
43
+ {
44
+ addError(ex);
45
+ }
46
+
47
+ public void
48
+ fatalError(SAXParseException ex) throws SAXException
49
+ {
50
+ addError(ex);
51
+ }
52
+
53
+ /**
54
+ * Implementation of org.apache.xerces.xni.parser.XMLErrorHandler. This method
55
+ * is invoked during parsing fired by HtmlDomParserContext and is a NekoHtml requirement.
56
+ *
57
+ * @param domain The domain of the error. The domain can be any string but is
58
+ * suggested to be a valid URI. The domain can be used to conveniently
59
+ * specify a web site location of the relevant specification or
60
+ * document pertaining to this warning.
61
+ * @param key The error key. This key can be any string and is implementation
62
+ * dependent.
63
+ * @param e Exception.
64
+ */
65
+ public void
66
+ error(String domain, String key, XMLParseException e)
67
+ {
68
+ addError(e);
69
+ }
70
+
71
+ /**
72
+ * Implementation of org.apache.xerces.xni.parser.XMLErrorHandler. This method
73
+ * is invoked during parsing fired by HtmlDomParserContext and is a NekoHtml requirement.
74
+ *
75
+ * @param domain The domain of the fatal error. The domain can be any string but is
76
+ * suggested to be a valid URI. The domain can be used to conveniently
77
+ * specify a web site location of the relevant specification or
78
+ * document pertaining to this warning.
79
+ * @param key The fatal error key. This key can be any string and is implementation
80
+ * dependent.
81
+ * @param e Exception.
82
+ */
83
+ public void
84
+ fatalError(String domain, String key, XMLParseException e)
85
+ {
86
+ addError(e);
87
+ }
88
+
89
+ /**
90
+ * Implementation of org.apache.xerces.xni.parser.XMLErrorHandler. This method
91
+ * is invoked during parsing fired by HtmlDomParserContext and is a NekoHtml requirement.
92
+ *
93
+ * @param domain The domain of the warning. The domain can be any string but is
94
+ * suggested to be a valid URI. The domain can be used to conveniently
95
+ * specify a web site location of the relevant specification or
96
+ * document pertaining to this warning.
97
+ * @param key The warning key. This key can be any string and is implementation
98
+ * dependent.
99
+ * @param e Exception.
100
+ */
101
+ public void
102
+ warning(String domain, String key, XMLParseException e)
103
+ {
104
+ addError(e);
105
+ }
106
+
107
+ }
@@ -0,0 +1,62 @@
1
+ package nokogiri.internals;
2
+
3
+ import org.apache.xerces.xni.parser.XMLParseException;
4
+ import org.jruby.Ruby;
5
+ import org.xml.sax.SAXException;
6
+ import org.xml.sax.SAXParseException;
7
+
8
+ /**
9
+ * Strict error handler. Even though strict is specified, Nokogiri allows to go further
10
+ * when NOERROR or/both NOWARNING is/are true.
11
+ *
12
+ * @author sergio
13
+ * @author Yoko Harada <yokolet@gmail.com>
14
+ */
15
+ public class NokogiriStrictErrorHandler extends NokogiriErrorHandler
16
+ {
17
+ public
18
+ NokogiriStrictErrorHandler(Ruby runtime, boolean noerror, boolean nowarning)
19
+ {
20
+ super(runtime, noerror, nowarning);
21
+ }
22
+
23
+ public void
24
+ warning(SAXParseException spex) throws SAXException
25
+ {
26
+ if (!nowarning) { throw spex; }
27
+ else { addError(spex); }
28
+ }
29
+
30
+ public void
31
+ error(SAXParseException spex) throws SAXException
32
+ {
33
+ if (!noerror) { throw spex; }
34
+ else { addError(spex); }
35
+ }
36
+
37
+ public void
38
+ fatalError(SAXParseException spex) throws SAXException
39
+ {
40
+ throw spex;
41
+ }
42
+
43
+ public void
44
+ error(String domain, String key, XMLParseException e) throws XMLParseException
45
+ {
46
+ if (!noerror) { throw e; }
47
+ else { addError(e); }
48
+ }
49
+
50
+ public void
51
+ fatalError(String domain, String key, XMLParseException e) throws XMLParseException
52
+ {
53
+ throw e;
54
+ }
55
+
56
+ public void
57
+ warning(String domain, String key, XMLParseException e) throws XMLParseException
58
+ {
59
+ if (!nowarning) { throw e; }
60
+ else { addError(e); }
61
+ }
62
+ }