nokogiri 1.11.1-java → 1.11.6-java

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 (143) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE-DEPENDENCIES.md +12 -12
  3. data/LICENSE.md +1 -1
  4. data/README.md +21 -16
  5. data/dependencies.yml +12 -12
  6. data/ext/java/nokogiri/EncodingHandler.java +76 -89
  7. data/ext/java/nokogiri/HtmlDocument.java +135 -144
  8. data/ext/java/nokogiri/HtmlElementDescription.java +102 -117
  9. data/ext/java/nokogiri/HtmlEntityLookup.java +33 -60
  10. data/ext/java/nokogiri/HtmlSaxParserContext.java +218 -222
  11. data/ext/java/nokogiri/HtmlSaxPushParser.java +162 -169
  12. data/ext/java/nokogiri/NokogiriService.java +595 -556
  13. data/ext/java/nokogiri/XmlAttr.java +118 -126
  14. data/ext/java/nokogiri/XmlAttributeDecl.java +95 -106
  15. data/ext/java/nokogiri/XmlCdata.java +35 -58
  16. data/ext/java/nokogiri/XmlComment.java +46 -67
  17. data/ext/java/nokogiri/XmlDocument.java +645 -572
  18. data/ext/java/nokogiri/XmlDocumentFragment.java +125 -137
  19. data/ext/java/nokogiri/XmlDtd.java +448 -414
  20. data/ext/java/nokogiri/XmlElement.java +23 -48
  21. data/ext/java/nokogiri/XmlElementContent.java +343 -316
  22. data/ext/java/nokogiri/XmlElementDecl.java +124 -125
  23. data/ext/java/nokogiri/XmlEntityDecl.java +119 -127
  24. data/ext/java/nokogiri/XmlEntityReference.java +49 -72
  25. data/ext/java/nokogiri/XmlNamespace.java +175 -175
  26. data/ext/java/nokogiri/XmlNode.java +1843 -1620
  27. data/ext/java/nokogiri/XmlNodeSet.java +361 -331
  28. data/ext/java/nokogiri/XmlProcessingInstruction.java +47 -69
  29. data/ext/java/nokogiri/XmlReader.java +513 -450
  30. data/ext/java/nokogiri/XmlRelaxng.java +85 -104
  31. data/ext/java/nokogiri/XmlSaxParserContext.java +328 -315
  32. data/ext/java/nokogiri/XmlSaxPushParser.java +227 -220
  33. data/ext/java/nokogiri/XmlSchema.java +328 -295
  34. data/ext/java/nokogiri/XmlSyntaxError.java +113 -115
  35. data/ext/java/nokogiri/XmlText.java +55 -76
  36. data/ext/java/nokogiri/XmlXpathContext.java +240 -238
  37. data/ext/java/nokogiri/XsltStylesheet.java +280 -269
  38. data/ext/java/nokogiri/internals/ClosedStreamException.java +5 -2
  39. data/ext/java/nokogiri/internals/HtmlDomParserContext.java +201 -202
  40. data/ext/java/nokogiri/internals/IgnoreSchemaErrorsErrorHandler.java +17 -10
  41. data/ext/java/nokogiri/internals/NokogiriBlockingQueueInputStream.java +43 -16
  42. data/ext/java/nokogiri/internals/NokogiriDomParser.java +63 -80
  43. data/ext/java/nokogiri/internals/NokogiriEntityResolver.java +107 -88
  44. data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +27 -52
  45. data/ext/java/nokogiri/internals/NokogiriHandler.java +316 -286
  46. data/ext/java/nokogiri/internals/NokogiriHelpers.java +736 -652
  47. data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +184 -173
  48. data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +81 -98
  49. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +64 -79
  50. data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +84 -99
  51. data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +48 -65
  52. data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +116 -131
  53. data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +34 -56
  54. data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +23 -46
  55. data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +55 -72
  56. data/ext/java/nokogiri/internals/ParserContext.java +206 -211
  57. data/ext/java/nokogiri/internals/ReaderNode.java +478 -403
  58. data/ext/java/nokogiri/internals/SaveContextVisitor.java +822 -739
  59. data/ext/java/nokogiri/internals/SchemaErrorHandler.java +31 -54
  60. data/ext/java/nokogiri/internals/XalanDTMManagerPatch.java +129 -123
  61. data/ext/java/nokogiri/internals/XmlDeclHandler.java +3 -34
  62. data/ext/java/nokogiri/internals/XmlDomParserContext.java +206 -207
  63. data/ext/java/nokogiri/internals/XmlSaxParser.java +22 -47
  64. data/ext/java/nokogiri/internals/c14n/AttrCompare.java +71 -68
  65. data/ext/java/nokogiri/internals/c14n/C14nHelper.java +137 -118
  66. data/ext/java/nokogiri/internals/c14n/CanonicalFilter.java +27 -21
  67. data/ext/java/nokogiri/internals/c14n/CanonicalizationException.java +74 -61
  68. data/ext/java/nokogiri/internals/c14n/Canonicalizer.java +230 -205
  69. data/ext/java/nokogiri/internals/c14n/Canonicalizer11.java +572 -547
  70. data/ext/java/nokogiri/internals/c14n/Canonicalizer11_OmitComments.java +17 -10
  71. data/ext/java/nokogiri/internals/c14n/Canonicalizer11_WithComments.java +17 -10
  72. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315.java +323 -302
  73. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315Excl.java +232 -219
  74. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclOmitComments.java +22 -15
  75. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315ExclWithComments.java +23 -16
  76. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315OmitComments.java +23 -16
  77. data/ext/java/nokogiri/internals/c14n/Canonicalizer20010315WithComments.java +22 -15
  78. data/ext/java/nokogiri/internals/c14n/CanonicalizerBase.java +575 -545
  79. data/ext/java/nokogiri/internals/c14n/CanonicalizerPhysical.java +141 -120
  80. data/ext/java/nokogiri/internals/c14n/CanonicalizerSpi.java +39 -38
  81. data/ext/java/nokogiri/internals/c14n/Constants.java +13 -10
  82. data/ext/java/nokogiri/internals/c14n/ElementProxy.java +279 -247
  83. data/ext/java/nokogiri/internals/c14n/HelperNodeList.java +66 -53
  84. data/ext/java/nokogiri/internals/c14n/IgnoreAllErrorHandler.java +44 -37
  85. data/ext/java/nokogiri/internals/c14n/InclusiveNamespaces.java +135 -120
  86. data/ext/java/nokogiri/internals/c14n/InvalidCanonicalizerException.java +59 -48
  87. data/ext/java/nokogiri/internals/c14n/NameSpaceSymbTable.java +384 -334
  88. data/ext/java/nokogiri/internals/c14n/NodeFilter.java +25 -24
  89. data/ext/java/nokogiri/internals/c14n/UtfHelpper.java +151 -140
  90. data/ext/java/nokogiri/internals/c14n/XMLUtils.java +456 -423
  91. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTM.java +1466 -1500
  92. data/ext/java/nokogiri/internals/dom2dtm/DOM2DTMdefaultNamespaceDeclarationNode.java +626 -574
  93. data/ext/nokogiri/depend +34 -474
  94. data/ext/nokogiri/extconf.rb +253 -183
  95. data/ext/nokogiri/html_document.c +10 -15
  96. data/ext/nokogiri/html_element_description.c +84 -71
  97. data/ext/nokogiri/html_entity_lookup.c +21 -16
  98. data/ext/nokogiri/html_sax_parser_context.c +66 -65
  99. data/ext/nokogiri/html_sax_push_parser.c +29 -27
  100. data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
  101. data/ext/nokogiri/nokogiri.c +190 -63
  102. data/ext/nokogiri/test_global_handlers.c +3 -4
  103. data/ext/nokogiri/xml_attr.c +15 -15
  104. data/ext/nokogiri/xml_attribute_decl.c +18 -18
  105. data/ext/nokogiri/xml_cdata.c +13 -18
  106. data/ext/nokogiri/xml_comment.c +19 -26
  107. data/ext/nokogiri/xml_document.c +246 -188
  108. data/ext/nokogiri/xml_document_fragment.c +13 -15
  109. data/ext/nokogiri/xml_dtd.c +54 -48
  110. data/ext/nokogiri/xml_element_content.c +30 -27
  111. data/ext/nokogiri/xml_element_decl.c +22 -22
  112. data/ext/nokogiri/xml_encoding_handler.c +17 -11
  113. data/ext/nokogiri/xml_entity_decl.c +32 -30
  114. data/ext/nokogiri/xml_entity_reference.c +16 -18
  115. data/ext/nokogiri/xml_namespace.c +56 -49
  116. data/ext/nokogiri/xml_node.c +385 -326
  117. data/ext/nokogiri/xml_node_set.c +168 -156
  118. data/ext/nokogiri/xml_processing_instruction.c +17 -19
  119. data/ext/nokogiri/xml_reader.c +191 -157
  120. data/ext/nokogiri/xml_relax_ng.c +29 -23
  121. data/ext/nokogiri/xml_sax_parser.c +117 -112
  122. data/ext/nokogiri/xml_sax_parser_context.c +100 -85
  123. data/ext/nokogiri/xml_sax_push_parser.c +34 -27
  124. data/ext/nokogiri/xml_schema.c +48 -42
  125. data/ext/nokogiri/xml_syntax_error.c +21 -23
  126. data/ext/nokogiri/xml_text.c +13 -17
  127. data/ext/nokogiri/xml_xpath_context.c +134 -127
  128. data/ext/nokogiri/xslt_stylesheet.c +157 -157
  129. data/lib/nokogiri.rb +1 -22
  130. data/lib/nokogiri/css/parser.rb +1 -1
  131. data/lib/nokogiri/extension.rb +26 -0
  132. data/lib/nokogiri/html/document_fragment.rb +15 -15
  133. data/lib/nokogiri/nokogiri.jar +0 -0
  134. data/lib/nokogiri/version/constant.rb +1 -1
  135. data/lib/nokogiri/version/info.rb +32 -8
  136. data/lib/nokogiri/xml/document.rb +74 -28
  137. data/lib/nokogiri/xml/node.rb +39 -42
  138. data/lib/nokogiri/xml/reader.rb +2 -9
  139. data/lib/nokogiri/xml/xpath.rb +1 -3
  140. data/lib/nokogiri/xml/xpath/syntax_error.rb +1 -1
  141. metadata +7 -8
  142. data/ext/nokogiri/xml_io.c +0 -63
  143. data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
@@ -1,35 +1,3 @@
1
- /**
2
- * (The MIT License)
3
- *
4
- * Copyright (c) 2008 - 2011:
5
- *
6
- * * {Aaron Patterson}[http://tenderlovemaking.com]
7
- * * {Mike Dalessio}[http://mike.daless.io]
8
- * * {Charles Nutter}[http://blog.headius.com]
9
- * * {Sergio Arbeo}[http://www.serabe.com]
10
- * * {Patrick Mahoney}[http://polycrystal.org]
11
- * * {Yoko Harada}[http://yokolet.blogspot.com]
12
- *
13
- * Permission is hereby granted, free of charge, to any person obtaining
14
- * a copy of this software and associated documentation files (the
15
- * 'Software'), to deal in the Software without restriction, including
16
- * without limitation the rights to use, copy, modify, merge, publish,
17
- * distribute, sublicense, and/or sell copies of the Software, and to
18
- * permit persons to whom the Software is furnished to do so, subject to
19
- * the following conditions:
20
- *
21
- * The above copyright notice and this permission notice shall be
22
- * included in all copies or substantial portions of the Software.
23
- *
24
- * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
25
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
27
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
28
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
29
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
30
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31
- */
32
-
33
1
  package nokogiri;
34
2
 
35
3
  import static nokogiri.internals.NokogiriHelpers.adjustSystemIdIfNecessary;
@@ -79,310 +47,375 @@ import org.xml.sax.SAXParseException;
79
47
  * @author sergio
80
48
  * @author Yoko Harada <yokolet@gmail.com>
81
49
  */
82
- @JRubyClass(name="Nokogiri::XML::Schema")
83
- public class XmlSchema extends RubyObject {
84
- private Validator validator;
85
-
86
- public XmlSchema(Ruby ruby, RubyClass klazz) {
87
- super(ruby, klazz);
50
+ @JRubyClass(name = "Nokogiri::XML::Schema")
51
+ public class XmlSchema extends RubyObject
52
+ {
53
+ private Validator validator;
54
+
55
+ public
56
+ XmlSchema(Ruby ruby, RubyClass klazz)
57
+ {
58
+ super(ruby, klazz);
59
+ }
60
+
61
+ /**
62
+ * Create and return a copy of this object.
63
+ *
64
+ * @return a clone of this object
65
+ */
66
+ @Override
67
+ public Object
68
+ clone() throws CloneNotSupportedException
69
+ {
70
+ return super.clone();
71
+ }
72
+
73
+ private Schema
74
+ getSchema(Source source,
75
+ String currentDir,
76
+ String scriptFileName,
77
+ SchemaErrorHandler errorHandler,
78
+ long parseOptions) throws SAXException
79
+ {
80
+ boolean noNet = new ParserContext.Options(parseOptions).noNet;
81
+
82
+ SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
83
+ SchemaResourceResolver resourceResolver =
84
+ new SchemaResourceResolver(currentDir, scriptFileName, null, errorHandler, noNet);
85
+
86
+ schemaFactory.setResourceResolver(resourceResolver);
87
+ schemaFactory.setErrorHandler(errorHandler);
88
+
89
+ return schemaFactory.newSchema(source);
90
+ }
91
+
92
+ private void
93
+ setValidator(Validator validator)
94
+ {
95
+ this.validator = validator;
96
+ }
97
+
98
+ static XmlSchema
99
+ createSchemaInstance(ThreadContext context, RubyClass klazz, Source source, IRubyObject parseOptions)
100
+ {
101
+ Ruby runtime = context.getRuntime();
102
+ XmlSchema xmlSchema = (XmlSchema) NokogiriService.XML_SCHEMA_ALLOCATOR.allocate(runtime, klazz);
103
+
104
+ if (parseOptions == null) {
105
+ parseOptions = defaultParseOptions(context.getRuntime());
88
106
  }
89
-
90
- /**
91
- * Create and return a copy of this object.
92
- *
93
- * @return a clone of this object
94
- */
95
- @Override
96
- public Object clone() throws CloneNotSupportedException {
97
- return super.clone();
107
+ long intParseOptions = RubyFixnum.fix2long(Helpers.invoke(context, parseOptions, "to_i"));
108
+
109
+ xmlSchema.setInstanceVariable("@errors", runtime.newEmptyArray());
110
+ xmlSchema.setInstanceVariable("@parse_options", parseOptions);
111
+
112
+ try {
113
+ SchemaErrorHandler errorHandler =
114
+ new SchemaErrorHandler(context.getRuntime(), (RubyArray)xmlSchema.getInstanceVariable("@errors"));
115
+ Schema schema =
116
+ xmlSchema.getSchema(source,
117
+ context.getRuntime().getCurrentDirectory(),
118
+ context.getRuntime().getInstanceConfig().getScriptFileName(),
119
+ errorHandler,
120
+ intParseOptions);
121
+ xmlSchema.setValidator(schema.newValidator());
122
+ return xmlSchema;
123
+ } catch (SAXException ex) {
124
+ throw context.getRuntime().newRuntimeError("Could not parse document: " + ex.getMessage());
125
+ }
126
+ }
127
+
128
+ protected static IRubyObject
129
+ defaultParseOptions(Ruby runtime)
130
+ {
131
+ return ((RubyClass)runtime.getClassFromPath("Nokogiri::XML::ParseOptions")).getConstant("DEFAULT_SCHEMA");
132
+ }
133
+
134
+ /*
135
+ * call-seq:
136
+ * from_document(doc)
137
+ *
138
+ * Create a new Schema from the Nokogiri::XML::Document +doc+
139
+ */
140
+ @JRubyMethod(meta = true, required = 1, optional = 1)
141
+ public static IRubyObject
142
+ from_document(ThreadContext context, IRubyObject klazz, IRubyObject[] args)
143
+ {
144
+ IRubyObject document = args[0];
145
+ IRubyObject parseOptions = null;
146
+ if (args.length > 1) {
147
+ parseOptions = args[1];
98
148
  }
99
149
 
100
- private Schema getSchema(Source source,
101
- String currentDir,
102
- String scriptFileName,
103
- SchemaErrorHandler errorHandler,
104
- long parseOptions) throws SAXException {
105
- boolean noNet = new ParserContext.Options(parseOptions).noNet;
150
+ XmlDocument doc = ((XmlDocument)((XmlNode) document).document(context));
106
151
 
107
- SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
108
- SchemaResourceResolver resourceResolver =
109
- new SchemaResourceResolver(currentDir, scriptFileName, null, errorHandler, noNet);
152
+ RubyArray errors = (RubyArray) doc.getInstanceVariable("@errors");
153
+ if (!errors.isEmpty()) {
154
+ throw((XmlSyntaxError) errors.first()).toThrowable();
155
+ }
156
+
157
+ DOMSource source = new DOMSource(doc.getDocument());
110
158
 
111
- schemaFactory.setResourceResolver(resourceResolver);
112
- schemaFactory.setErrorHandler(errorHandler);
159
+ IRubyObject uri = doc.url(context);
113
160
 
114
- return schemaFactory.newSchema(source);
161
+ if (!uri.isNil()) {
162
+ source.setSystemId(uri.convertToString().asJavaString());
115
163
  }
116
164
 
117
- private void setValidator(Validator validator) {
118
- this.validator = validator;
165
+ return getSchema(context, (RubyClass)klazz, source, parseOptions);
166
+ }
167
+
168
+ @JRubyMethod(meta = true, required = 1, optional = 1)
169
+ public static IRubyObject
170
+ read_memory(ThreadContext context, IRubyObject klazz, IRubyObject[] args)
171
+ {
172
+ IRubyObject content = args[0];
173
+ IRubyObject parseOptions = null;
174
+ if (args.length > 1) {
175
+ parseOptions = args[1];
176
+ }
177
+ String data = content.convertToString().asJavaString();
178
+ return getSchema(context, (RubyClass) klazz, new StreamSource(new StringReader(data)), parseOptions);
179
+ }
180
+
181
+ private static IRubyObject
182
+ getSchema(ThreadContext context, RubyClass klazz, Source source, IRubyObject parseOptions)
183
+ {
184
+ String moduleName = klazz.getName();
185
+ if ("Nokogiri::XML::Schema".equals(moduleName)) {
186
+ return XmlSchema.createSchemaInstance(context, klazz, source, parseOptions);
187
+ } else if ("Nokogiri::XML::RelaxNG".equals(moduleName)) {
188
+ return XmlRelaxng.createSchemaInstance(context, klazz, source, parseOptions);
189
+ }
190
+ return context.getRuntime().getNil();
191
+ }
192
+
193
+ @JRubyMethod(visibility = Visibility.PRIVATE)
194
+ public IRubyObject
195
+ validate_document(ThreadContext context, IRubyObject document)
196
+ {
197
+ return validate_document_or_file(context, (XmlDocument)document);
198
+ }
199
+
200
+ @JRubyMethod(visibility = Visibility.PRIVATE)
201
+ public IRubyObject
202
+ validate_file(ThreadContext context, IRubyObject file)
203
+ {
204
+ Ruby runtime = context.runtime;
205
+
206
+ XmlDomParserContext ctx = new XmlDomParserContext(runtime, RubyFixnum.newFixnum(runtime, 1L));
207
+ ctx.setInputSourceFile(context, file);
208
+ XmlDocument xmlDocument = ctx.parse(context, getNokogiriClass(runtime, "Nokogiri::XML::Document"), context.nil);
209
+ return validate_document_or_file(context, xmlDocument);
210
+ }
211
+
212
+ IRubyObject
213
+ validate_document_or_file(ThreadContext context, XmlDocument xmlDocument)
214
+ {
215
+ RubyArray errors = (RubyArray) this.getInstanceVariable("@errors");
216
+ ErrorHandler errorHandler = new SchemaErrorHandler(context.runtime, errors);
217
+ setErrorHandler(errorHandler);
218
+
219
+ try {
220
+ validate(xmlDocument.getDocument());
221
+ } catch (SAXException ex) {
222
+ XmlSyntaxError xmlSyntaxError = XmlSyntaxError.createXMLSyntaxError(context.runtime);
223
+ xmlSyntaxError.setException(ex);
224
+ errors.append(xmlSyntaxError);
225
+ } catch (IOException ex) {
226
+ throw context.runtime.newIOError(ex.getMessage());
119
227
  }
120
228
 
121
- static XmlSchema createSchemaInstance(ThreadContext context, RubyClass klazz, Source source, IRubyObject parseOptions) {
122
- Ruby runtime = context.getRuntime();
123
- XmlSchema xmlSchema = (XmlSchema) NokogiriService.XML_SCHEMA_ALLOCATOR.allocate(runtime, klazz);
229
+ return errors;
230
+ }
231
+
232
+ protected void
233
+ setErrorHandler(ErrorHandler errorHandler)
234
+ {
235
+ validator.setErrorHandler(errorHandler);
236
+ }
237
+
238
+ protected void
239
+ validate(Document document) throws SAXException, IOException
240
+ {
241
+ DOMSource docSource = new DOMSource(document);
242
+ validator.validate(docSource);
243
+ }
244
+
245
+ private class SchemaResourceResolver implements LSResourceResolver
246
+ {
247
+ SchemaLSInput lsInput = new SchemaLSInput();
248
+ String currentDir;
249
+ String scriptFileName;
250
+ SchemaErrorHandler errorHandler;
251
+ boolean noNet;
252
+ //String defaultURI;
253
+
254
+ SchemaResourceResolver(String currentDir, String scriptFileName, Object input, SchemaErrorHandler errorHandler,
255
+ boolean noNet)
256
+ {
257
+ this.currentDir = currentDir;
258
+ this.scriptFileName = scriptFileName;
259
+ this.errorHandler = errorHandler;
260
+ this.noNet = noNet;
261
+ if (input == null) { return; }
262
+ if (input instanceof String) {
263
+ lsInput.setStringData((String)input);
264
+ } else if (input instanceof Reader) {
265
+ lsInput.setCharacterStream((Reader)input);
266
+ } else if (input instanceof InputStream) {
267
+ lsInput.setByteStream((InputStream)input);
268
+ }
269
+ }
124
270
 
125
- if (parseOptions == null) {
126
- parseOptions = defaultParseOptions(context.getRuntime());
271
+ @Override
272
+ public LSInput
273
+ resolveResource(String type,
274
+ String namespaceURI,
275
+ String publicId,
276
+ String systemId,
277
+ String baseURI)
278
+ {
279
+ if (noNet && (systemId.startsWith("http://") || systemId.startsWith("ftp://"))) {
280
+ if (systemId.startsWith(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
281
+ return null; // use default resolver
127
282
  }
128
- long intParseOptions = RubyFixnum.fix2long(Helpers.invoke(context, parseOptions, "to_i"));
129
-
130
- xmlSchema.setInstanceVariable("@errors", runtime.newEmptyArray());
131
- xmlSchema.setInstanceVariable("@parse_options", parseOptions);
132
-
133
283
  try {
134
- SchemaErrorHandler errorHandler =
135
- new SchemaErrorHandler(context.getRuntime(), (RubyArray)xmlSchema.getInstanceVariable("@errors"));
136
- Schema schema =
137
- xmlSchema.getSchema(source,
138
- context.getRuntime().getCurrentDirectory(),
139
- context.getRuntime().getInstanceConfig().getScriptFileName(),
140
- errorHandler,
141
- intParseOptions);
142
- xmlSchema.setValidator(schema.newValidator());
143
- return xmlSchema;
284
+ this.errorHandler.warning(new SAXParseException(String.format("Attempt to load network entity '%s'", systemId), null));
144
285
  } catch (SAXException ex) {
145
- throw context.getRuntime().newRuntimeError("Could not parse document: " + ex.getMessage());
146
286
  }
287
+ } else {
288
+ String adjusted = adjustSystemIdIfNecessary(currentDir, scriptFileName, baseURI, systemId);
289
+ lsInput.setPublicId(publicId);
290
+ lsInput.setSystemId(adjusted != null ? adjusted : systemId);
291
+ lsInput.setBaseURI(baseURI);
292
+ }
293
+ return lsInput;
147
294
  }
295
+ }
296
+
297
+ private class SchemaLSInput implements LSInput
298
+ {
299
+ protected String fPublicId;
300
+ protected String fSystemId;
301
+ protected String fBaseSystemId;
302
+ protected InputStream fByteStream;
303
+ protected Reader fCharStream;
304
+ protected String fData;
305
+ protected String fEncoding;
306
+ protected boolean fCertifiedText = false;
148
307
 
149
- protected static IRubyObject defaultParseOptions(Ruby runtime) {
150
- return ((RubyClass)runtime.getClassFromPath("Nokogiri::XML::ParseOptions")).getConstant("DEFAULT_SCHEMA");
308
+ @Override
309
+ public String
310
+ getBaseURI()
311
+ {
312
+ return fBaseSystemId;
151
313
  }
152
314
 
153
- /*
154
- * call-seq:
155
- * from_document(doc)
156
- *
157
- * Create a new Schema from the Nokogiri::XML::Document +doc+
158
- */
159
- @JRubyMethod(meta=true, required=1, optional=1)
160
- public static IRubyObject from_document(ThreadContext context, IRubyObject klazz, IRubyObject[] args) {
161
- IRubyObject document = args[0];
162
- IRubyObject parseOptions = null;
163
- if (args.length > 1) {
164
- parseOptions = args[1];
165
- }
166
-
167
- XmlDocument doc = ((XmlDocument) ((XmlNode) document).document(context));
168
-
169
- RubyArray errors = (RubyArray) doc.getInstanceVariable("@errors");
170
- if (!errors.isEmpty()) {
171
- throw ((XmlSyntaxError) errors.first()).toThrowable();
172
- }
173
-
174
- DOMSource source = new DOMSource(doc.getDocument());
175
-
176
- IRubyObject uri = doc.url(context);
177
-
178
- if (!uri.isNil()) {
179
- source.setSystemId(uri.convertToString().asJavaString());
180
- }
181
-
182
- return getSchema(context, (RubyClass)klazz, source, parseOptions);
315
+ @Override
316
+ public InputStream
317
+ getByteStream()
318
+ {
319
+ return fByteStream;
183
320
  }
184
321
 
185
- @JRubyMethod(meta=true, required=1, optional=1)
186
- public static IRubyObject read_memory(ThreadContext context, IRubyObject klazz, IRubyObject[] args) {
187
- IRubyObject content = args[0];
188
- IRubyObject parseOptions = null;
189
- if (args.length > 1) {
190
- parseOptions = args[1];
191
- }
192
- String data = content.convertToString().asJavaString();
193
- return getSchema(context, (RubyClass) klazz, new StreamSource(new StringReader(data)), parseOptions);
322
+ @Override
323
+ public boolean
324
+ getCertifiedText()
325
+ {
326
+ return fCertifiedText;
194
327
  }
195
328
 
196
- private static IRubyObject getSchema(ThreadContext context, RubyClass klazz, Source source, IRubyObject parseOptions) {
197
- String moduleName = klazz.getName();
198
- if ("Nokogiri::XML::Schema".equals(moduleName)) {
199
- return XmlSchema.createSchemaInstance(context, klazz, source, parseOptions);
200
- } else if ("Nokogiri::XML::RelaxNG".equals(moduleName)) {
201
- return XmlRelaxng.createSchemaInstance(context, klazz, source, parseOptions);
202
- }
203
- return context.getRuntime().getNil();
329
+ @Override
330
+ public Reader
331
+ getCharacterStream()
332
+ {
333
+ return fCharStream;
204
334
  }
205
335
 
206
- @JRubyMethod(visibility=Visibility.PRIVATE)
207
- public IRubyObject validate_document(ThreadContext context, IRubyObject document) {
208
- return validate_document_or_file(context, (XmlDocument)document);
336
+ @Override
337
+ public String
338
+ getEncoding()
339
+ {
340
+ return fEncoding;
209
341
  }
210
342
 
211
- @JRubyMethod(visibility=Visibility.PRIVATE)
212
- public IRubyObject validate_file(ThreadContext context, IRubyObject file) {
213
- Ruby runtime = context.runtime;
214
-
215
- XmlDomParserContext ctx = new XmlDomParserContext(runtime, RubyFixnum.newFixnum(runtime, 1L));
216
- ctx.setInputSourceFile(context, file);
217
- XmlDocument xmlDocument = ctx.parse(context, getNokogiriClass(runtime, "Nokogiri::XML::Document"), context.nil);
218
- return validate_document_or_file(context, xmlDocument);
343
+ @Override
344
+ public String
345
+ getPublicId()
346
+ {
347
+ return fPublicId;
219
348
  }
220
349
 
221
- IRubyObject validate_document_or_file(ThreadContext context, XmlDocument xmlDocument) {
222
- RubyArray errors = (RubyArray) this.getInstanceVariable("@errors");
223
- ErrorHandler errorHandler = new SchemaErrorHandler(context.runtime, errors);
224
- setErrorHandler(errorHandler);
225
-
226
- try {
227
- validate(xmlDocument.getDocument());
228
- }
229
- catch (SAXException ex) {
230
- XmlSyntaxError xmlSyntaxError = XmlSyntaxError.createXMLSyntaxError(context.runtime);
231
- xmlSyntaxError.setException(ex);
232
- errors.append(xmlSyntaxError);
233
- }
234
- catch (IOException ex) {
235
- throw context.runtime.newIOError(ex.getMessage());
236
- }
237
-
238
- return errors;
350
+ @Override
351
+ public String
352
+ getStringData()
353
+ {
354
+ return fData;
239
355
  }
240
356
 
241
- protected void setErrorHandler(ErrorHandler errorHandler) {
242
- validator.setErrorHandler(errorHandler);
357
+ @Override
358
+ public String
359
+ getSystemId()
360
+ {
361
+ return fSystemId;
243
362
  }
244
363
 
245
- protected void validate(Document document) throws SAXException, IOException {
246
- DOMSource docSource = new DOMSource(document);
247
- validator.validate(docSource);
364
+ @Override
365
+ public void
366
+ setBaseURI(String baseURI)
367
+ {
368
+ fBaseSystemId = baseURI;
248
369
  }
249
370
 
250
- private class SchemaResourceResolver implements LSResourceResolver {
251
- SchemaLSInput lsInput = new SchemaLSInput();
252
- String currentDir;
253
- String scriptFileName;
254
- SchemaErrorHandler errorHandler;
255
- boolean noNet;
256
- //String defaultURI;
257
-
258
- SchemaResourceResolver(String currentDir, String scriptFileName, Object input, SchemaErrorHandler errorHandler, boolean noNet) {
259
- this.currentDir = currentDir;
260
- this.scriptFileName = scriptFileName;
261
- this.errorHandler = errorHandler;
262
- this.noNet = noNet;
263
- if (input == null) return;
264
- if (input instanceof String) {
265
- lsInput.setStringData((String)input);
266
- } else if (input instanceof Reader) {
267
- lsInput.setCharacterStream((Reader)input);
268
- } else if (input instanceof InputStream) {
269
- lsInput.setByteStream((InputStream)input);
270
- }
271
- }
272
-
273
- @Override
274
- public LSInput resolveResource(String type,
275
- String namespaceURI,
276
- String publicId,
277
- String systemId,
278
- String baseURI) {
279
- if (noNet && (systemId.startsWith("http://") || systemId.startsWith("ftp://"))) {
280
- if (systemId.startsWith(XMLConstants.W3C_XML_SCHEMA_NS_URI)) {
281
- return null; // use default resolver
282
- }
283
- try {
284
- this.errorHandler.warning(new SAXParseException(String.format("Attempt to load network entity '%s'", systemId), null));
285
- } catch (SAXException ex) {
286
- }
287
- } else {
288
- String adjusted = adjustSystemIdIfNecessary(currentDir, scriptFileName, baseURI, systemId);
289
- lsInput.setPublicId(publicId);
290
- lsInput.setSystemId(adjusted != null? adjusted : systemId);
291
- lsInput.setBaseURI(baseURI);
292
- }
293
- return lsInput;
294
- }
371
+ @Override
372
+ public void
373
+ setByteStream(InputStream byteStream)
374
+ {
375
+ fByteStream = byteStream;
295
376
  }
296
377
 
297
- private class SchemaLSInput implements LSInput {
298
- protected String fPublicId;
299
- protected String fSystemId;
300
- protected String fBaseSystemId;
301
- protected InputStream fByteStream;
302
- protected Reader fCharStream;
303
- protected String fData;
304
- protected String fEncoding;
305
- protected boolean fCertifiedText = false;
306
-
307
- @Override
308
- public String getBaseURI() {
309
- return fBaseSystemId;
310
- }
311
-
312
- @Override
313
- public InputStream getByteStream() {
314
- return fByteStream;
315
- }
316
-
317
- @Override
318
- public boolean getCertifiedText() {
319
- return fCertifiedText;
320
- }
321
-
322
- @Override
323
- public Reader getCharacterStream() {
324
- return fCharStream;
325
- }
326
-
327
- @Override
328
- public String getEncoding() {
329
- return fEncoding;
330
- }
331
-
332
- @Override
333
- public String getPublicId() {
334
- return fPublicId;
335
- }
336
-
337
- @Override
338
- public String getStringData() {
339
- return fData;
340
- }
341
-
342
- @Override
343
- public String getSystemId() {
344
- return fSystemId;
345
- }
346
-
347
- @Override
348
- public void setBaseURI(String baseURI) {
349
- fBaseSystemId = baseURI;
350
- }
351
-
352
- @Override
353
- public void setByteStream(InputStream byteStream) {
354
- fByteStream = byteStream;
355
- }
356
-
357
- @Override
358
- public void setCertifiedText(boolean certified) {
359
- fCertifiedText = certified;
360
- }
361
-
362
- @Override
363
- public void setCharacterStream(Reader charStream) {
364
- fCharStream = charStream;
365
- }
378
+ @Override
379
+ public void
380
+ setCertifiedText(boolean certified)
381
+ {
382
+ fCertifiedText = certified;
383
+ }
366
384
 
367
- @Override
368
- public void setEncoding(String encoding) {
369
- fEncoding = encoding;
370
- }
385
+ @Override
386
+ public void
387
+ setCharacterStream(Reader charStream)
388
+ {
389
+ fCharStream = charStream;
390
+ }
371
391
 
372
- @Override
373
- public void setPublicId(String pubId) {
374
- fPublicId = pubId;
375
- }
392
+ @Override
393
+ public void
394
+ setEncoding(String encoding)
395
+ {
396
+ fEncoding = encoding;
397
+ }
376
398
 
377
- @Override
378
- public void setStringData(String stringData) {
379
- fData = stringData;
380
- }
399
+ @Override
400
+ public void
401
+ setPublicId(String pubId)
402
+ {
403
+ fPublicId = pubId;
404
+ }
381
405
 
382
- @Override
383
- public void setSystemId(String sysId) {
384
- fSystemId = sysId;
385
- }
406
+ @Override
407
+ public void
408
+ setStringData(String stringData)
409
+ {
410
+ fData = stringData;
411
+ }
386
412
 
413
+ @Override
414
+ public void
415
+ setSystemId(String sysId)
416
+ {
417
+ fSystemId = sysId;
387
418
  }
419
+
420
+ }
388
421
  }