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