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