nokogiri-maven 1.5.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.ja.rdoc +544 -0
- data/CHANGELOG.rdoc +532 -0
- data/Manifest.txt +283 -0
- data/README.ja.rdoc +106 -0
- data/README.rdoc +174 -0
- data/Rakefile +164 -0
- data/bin/nokogiri +53 -0
- data/ext/java/nokogiri/EncodingHandler.java +124 -0
- data/ext/java/nokogiri/HtmlDocument.java +119 -0
- data/ext/java/nokogiri/HtmlElementDescription.java +145 -0
- data/ext/java/nokogiri/HtmlEntityLookup.java +79 -0
- data/ext/java/nokogiri/HtmlSaxParserContext.java +259 -0
- data/ext/java/nokogiri/NokogiriService.java +590 -0
- data/ext/java/nokogiri/XmlAttr.java +180 -0
- data/ext/java/nokogiri/XmlAttributeDecl.java +130 -0
- data/ext/java/nokogiri/XmlCdata.java +84 -0
- data/ext/java/nokogiri/XmlComment.java +86 -0
- data/ext/java/nokogiri/XmlDocument.java +519 -0
- data/ext/java/nokogiri/XmlDocumentFragment.java +223 -0
- data/ext/java/nokogiri/XmlDtd.java +469 -0
- data/ext/java/nokogiri/XmlElement.java +195 -0
- data/ext/java/nokogiri/XmlElementContent.java +382 -0
- data/ext/java/nokogiri/XmlElementDecl.java +152 -0
- data/ext/java/nokogiri/XmlEntityDecl.java +162 -0
- data/ext/java/nokogiri/XmlEntityReference.java +97 -0
- data/ext/java/nokogiri/XmlNamespace.java +183 -0
- data/ext/java/nokogiri/XmlNode.java +1378 -0
- data/ext/java/nokogiri/XmlNodeSet.java +267 -0
- data/ext/java/nokogiri/XmlProcessingInstruction.java +99 -0
- data/ext/java/nokogiri/XmlReader.java +408 -0
- data/ext/java/nokogiri/XmlRelaxng.java +144 -0
- data/ext/java/nokogiri/XmlSaxParserContext.java +367 -0
- data/ext/java/nokogiri/XmlSaxPushParser.java +184 -0
- data/ext/java/nokogiri/XmlSchema.java +324 -0
- data/ext/java/nokogiri/XmlSyntaxError.java +119 -0
- data/ext/java/nokogiri/XmlText.java +119 -0
- data/ext/java/nokogiri/XmlXpathContext.java +199 -0
- data/ext/java/nokogiri/XsltStylesheet.java +197 -0
- data/ext/java/nokogiri/internals/HtmlDomParserContext.java +204 -0
- data/ext/java/nokogiri/internals/NokogiriDocumentCache.java +73 -0
- data/ext/java/nokogiri/internals/NokogiriErrorHandler.java +86 -0
- data/ext/java/nokogiri/internals/NokogiriHandler.java +327 -0
- data/ext/java/nokogiri/internals/NokogiriHelpers.java +639 -0
- data/ext/java/nokogiri/internals/NokogiriNamespaceCache.java +167 -0
- data/ext/java/nokogiri/internals/NokogiriNamespaceContext.java +130 -0
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler.java +74 -0
- data/ext/java/nokogiri/internals/NokogiriNonStrictErrorHandler4NekoHtml.java +121 -0
- data/ext/java/nokogiri/internals/NokogiriStrictErrorHandler.java +79 -0
- data/ext/java/nokogiri/internals/NokogiriXPathFunction.java +141 -0
- data/ext/java/nokogiri/internals/NokogiriXPathFunctionResolver.java +73 -0
- data/ext/java/nokogiri/internals/NokogiriXPathVariableResolver.java +67 -0
- data/ext/java/nokogiri/internals/NokogiriXsltErrorListener.java +86 -0
- data/ext/java/nokogiri/internals/ParserContext.java +276 -0
- data/ext/java/nokogiri/internals/PushInputStream.java +411 -0
- data/ext/java/nokogiri/internals/ReaderNode.java +531 -0
- data/ext/java/nokogiri/internals/SaveContextVisitor.java +567 -0
- data/ext/java/nokogiri/internals/SchemaErrorHandler.java +76 -0
- data/ext/java/nokogiri/internals/XmlDeclHandler.java +42 -0
- data/ext/java/nokogiri/internals/XmlDomParser.java +76 -0
- data/ext/java/nokogiri/internals/XmlDomParserContext.java +244 -0
- data/ext/java/nokogiri/internals/XmlSaxParser.java +65 -0
- data/ext/java/nokogiri/internals/XsltExtensionFunction.java +72 -0
- data/ext/nokogiri/depend +358 -0
- data/ext/nokogiri/extconf.rb +124 -0
- data/ext/nokogiri/html_document.c +154 -0
- data/ext/nokogiri/html_document.h +10 -0
- data/ext/nokogiri/html_element_description.c +276 -0
- data/ext/nokogiri/html_element_description.h +10 -0
- data/ext/nokogiri/html_entity_lookup.c +32 -0
- data/ext/nokogiri/html_entity_lookup.h +8 -0
- data/ext/nokogiri/html_sax_parser_context.c +94 -0
- data/ext/nokogiri/html_sax_parser_context.h +11 -0
- data/ext/nokogiri/nokogiri.c +115 -0
- data/ext/nokogiri/nokogiri.h +160 -0
- data/ext/nokogiri/xml_attr.c +94 -0
- data/ext/nokogiri/xml_attr.h +9 -0
- data/ext/nokogiri/xml_attribute_decl.c +70 -0
- data/ext/nokogiri/xml_attribute_decl.h +9 -0
- data/ext/nokogiri/xml_cdata.c +56 -0
- data/ext/nokogiri/xml_cdata.h +9 -0
- data/ext/nokogiri/xml_comment.c +54 -0
- data/ext/nokogiri/xml_comment.h +9 -0
- data/ext/nokogiri/xml_document.c +478 -0
- data/ext/nokogiri/xml_document.h +23 -0
- data/ext/nokogiri/xml_document_fragment.c +48 -0
- data/ext/nokogiri/xml_document_fragment.h +10 -0
- data/ext/nokogiri/xml_dtd.c +202 -0
- data/ext/nokogiri/xml_dtd.h +10 -0
- data/ext/nokogiri/xml_element_content.c +123 -0
- data/ext/nokogiri/xml_element_content.h +10 -0
- data/ext/nokogiri/xml_element_decl.c +69 -0
- data/ext/nokogiri/xml_element_decl.h +9 -0
- data/ext/nokogiri/xml_encoding_handler.c +79 -0
- data/ext/nokogiri/xml_encoding_handler.h +8 -0
- data/ext/nokogiri/xml_entity_decl.c +110 -0
- data/ext/nokogiri/xml_entity_decl.h +10 -0
- data/ext/nokogiri/xml_entity_reference.c +52 -0
- data/ext/nokogiri/xml_entity_reference.h +9 -0
- data/ext/nokogiri/xml_io.c +56 -0
- data/ext/nokogiri/xml_io.h +11 -0
- data/ext/nokogiri/xml_libxml2_hacks.c +112 -0
- data/ext/nokogiri/xml_libxml2_hacks.h +12 -0
- data/ext/nokogiri/xml_namespace.c +84 -0
- data/ext/nokogiri/xml_namespace.h +13 -0
- data/ext/nokogiri/xml_node.c +1385 -0
- data/ext/nokogiri/xml_node.h +13 -0
- data/ext/nokogiri/xml_node_set.c +418 -0
- data/ext/nokogiri/xml_node_set.h +9 -0
- data/ext/nokogiri/xml_processing_instruction.c +56 -0
- data/ext/nokogiri/xml_processing_instruction.h +9 -0
- data/ext/nokogiri/xml_reader.c +684 -0
- data/ext/nokogiri/xml_reader.h +10 -0
- data/ext/nokogiri/xml_relax_ng.c +161 -0
- data/ext/nokogiri/xml_relax_ng.h +9 -0
- data/ext/nokogiri/xml_sax_parser.c +293 -0
- data/ext/nokogiri/xml_sax_parser.h +39 -0
- data/ext/nokogiri/xml_sax_parser_context.c +199 -0
- data/ext/nokogiri/xml_sax_parser_context.h +10 -0
- data/ext/nokogiri/xml_sax_push_parser.c +115 -0
- data/ext/nokogiri/xml_sax_push_parser.h +9 -0
- data/ext/nokogiri/xml_schema.c +205 -0
- data/ext/nokogiri/xml_schema.h +9 -0
- data/ext/nokogiri/xml_syntax_error.c +58 -0
- data/ext/nokogiri/xml_syntax_error.h +13 -0
- data/ext/nokogiri/xml_text.c +50 -0
- data/ext/nokogiri/xml_text.h +9 -0
- data/ext/nokogiri/xml_xpath_context.c +309 -0
- data/ext/nokogiri/xml_xpath_context.h +9 -0
- data/ext/nokogiri/xslt_stylesheet.c +264 -0
- data/ext/nokogiri/xslt_stylesheet.h +9 -0
- data/lib/nokogiri.rb +127 -0
- data/lib/nokogiri/css.rb +27 -0
- data/lib/nokogiri/css/node.rb +99 -0
- data/lib/nokogiri/css/parser.rb +677 -0
- data/lib/nokogiri/css/parser.y +237 -0
- data/lib/nokogiri/css/parser_extras.rb +91 -0
- data/lib/nokogiri/css/syntax_error.rb +7 -0
- data/lib/nokogiri/css/tokenizer.rb +152 -0
- data/lib/nokogiri/css/tokenizer.rex +55 -0
- data/lib/nokogiri/css/xpath_visitor.rb +171 -0
- data/lib/nokogiri/decorators/slop.rb +35 -0
- data/lib/nokogiri/html.rb +36 -0
- data/lib/nokogiri/html/builder.rb +35 -0
- data/lib/nokogiri/html/document.rb +213 -0
- data/lib/nokogiri/html/document_fragment.rb +41 -0
- data/lib/nokogiri/html/element_description.rb +23 -0
- data/lib/nokogiri/html/element_description_defaults.rb +671 -0
- data/lib/nokogiri/html/entity_lookup.rb +13 -0
- data/lib/nokogiri/html/sax/parser.rb +52 -0
- data/lib/nokogiri/html/sax/parser_context.rb +16 -0
- data/lib/nokogiri/nokogiri.jar +0 -0
- data/lib/nokogiri/syntax_error.rb +4 -0
- data/lib/nokogiri/version.rb +88 -0
- data/lib/nokogiri/xml.rb +67 -0
- data/lib/nokogiri/xml/attr.rb +14 -0
- data/lib/nokogiri/xml/attribute_decl.rb +18 -0
- data/lib/nokogiri/xml/builder.rb +425 -0
- data/lib/nokogiri/xml/cdata.rb +11 -0
- data/lib/nokogiri/xml/character_data.rb +7 -0
- data/lib/nokogiri/xml/document.rb +234 -0
- data/lib/nokogiri/xml/document_fragment.rb +98 -0
- data/lib/nokogiri/xml/dtd.rb +22 -0
- data/lib/nokogiri/xml/element_content.rb +36 -0
- data/lib/nokogiri/xml/element_decl.rb +13 -0
- data/lib/nokogiri/xml/entity_decl.rb +19 -0
- data/lib/nokogiri/xml/namespace.rb +13 -0
- data/lib/nokogiri/xml/node.rb +915 -0
- data/lib/nokogiri/xml/node/save_options.rb +61 -0
- data/lib/nokogiri/xml/node_set.rb +357 -0
- data/lib/nokogiri/xml/notation.rb +6 -0
- data/lib/nokogiri/xml/parse_options.rb +93 -0
- data/lib/nokogiri/xml/pp.rb +2 -0
- data/lib/nokogiri/xml/pp/character_data.rb +18 -0
- data/lib/nokogiri/xml/pp/node.rb +56 -0
- data/lib/nokogiri/xml/processing_instruction.rb +8 -0
- data/lib/nokogiri/xml/reader.rb +112 -0
- data/lib/nokogiri/xml/relax_ng.rb +32 -0
- data/lib/nokogiri/xml/sax.rb +4 -0
- data/lib/nokogiri/xml/sax/document.rb +164 -0
- data/lib/nokogiri/xml/sax/parser.rb +115 -0
- data/lib/nokogiri/xml/sax/parser_context.rb +16 -0
- data/lib/nokogiri/xml/sax/push_parser.rb +60 -0
- data/lib/nokogiri/xml/schema.rb +63 -0
- data/lib/nokogiri/xml/syntax_error.rb +47 -0
- data/lib/nokogiri/xml/text.rb +9 -0
- data/lib/nokogiri/xml/xpath.rb +10 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +11 -0
- data/lib/nokogiri/xml/xpath_context.rb +16 -0
- data/lib/nokogiri/xslt.rb +52 -0
- data/lib/nokogiri/xslt/stylesheet.rb +25 -0
- data/lib/xsd/xmlparser/nokogiri.rb +90 -0
- data/nokogiri_help_responses.md +40 -0
- data/tasks/cross_compile.rb +152 -0
- data/tasks/nokogiri.org.rb +18 -0
- data/tasks/test.rb +94 -0
- data/test/css/test_nthiness.rb +159 -0
- data/test/css/test_parser.rb +303 -0
- data/test/css/test_tokenizer.rb +198 -0
- data/test/css/test_xpath_visitor.rb +85 -0
- data/test/decorators/test_slop.rb +16 -0
- data/test/files/2ch.html +108 -0
- data/test/files/address_book.rlx +12 -0
- data/test/files/address_book.xml +10 -0
- data/test/files/bar/bar.xsd +4 -0
- data/test/files/dont_hurt_em_why.xml +422 -0
- data/test/files/encoding.html +82 -0
- data/test/files/encoding.xhtml +84 -0
- data/test/files/exslt.xml +8 -0
- data/test/files/exslt.xslt +35 -0
- data/test/files/foo/foo.xsd +4 -0
- data/test/files/metacharset.html +10 -0
- data/test/files/noencoding.html +47 -0
- data/test/files/po.xml +32 -0
- data/test/files/po.xsd +66 -0
- data/test/files/shift_jis.html +10 -0
- data/test/files/shift_jis.xml +5 -0
- data/test/files/snuggles.xml +3 -0
- data/test/files/staff.dtd +10 -0
- data/test/files/staff.xml +59 -0
- data/test/files/staff.xslt +32 -0
- data/test/files/tlm.html +850 -0
- data/test/files/valid_bar.xml +2 -0
- data/test/helper.rb +173 -0
- data/test/html/sax/test_parser.rb +136 -0
- data/test/html/sax/test_parser_context.rb +48 -0
- data/test/html/test_builder.rb +164 -0
- data/test/html/test_document.rb +472 -0
- data/test/html/test_document_encoding.rb +138 -0
- data/test/html/test_document_fragment.rb +255 -0
- data/test/html/test_element_description.rb +100 -0
- data/test/html/test_named_characters.rb +14 -0
- data/test/html/test_node.rb +190 -0
- data/test/html/test_node_encoding.rb +27 -0
- data/test/test_convert_xpath.rb +135 -0
- data/test/test_css_cache.rb +45 -0
- data/test/test_encoding_handler.rb +46 -0
- data/test/test_memory_leak.rb +72 -0
- data/test/test_nokogiri.rb +132 -0
- data/test/test_reader.rb +425 -0
- data/test/test_soap4r_sax.rb +52 -0
- data/test/test_xslt_transforms.rb +193 -0
- data/test/xml/node/test_save_options.rb +28 -0
- data/test/xml/node/test_subclass.rb +44 -0
- data/test/xml/sax/test_parser.rb +338 -0
- data/test/xml/sax/test_parser_context.rb +113 -0
- data/test/xml/sax/test_push_parser.rb +156 -0
- data/test/xml/test_attr.rb +65 -0
- data/test/xml/test_attribute_decl.rb +86 -0
- data/test/xml/test_builder.rb +227 -0
- data/test/xml/test_cdata.rb +50 -0
- data/test/xml/test_comment.rb +29 -0
- data/test/xml/test_document.rb +697 -0
- data/test/xml/test_document_encoding.rb +26 -0
- data/test/xml/test_document_fragment.rb +192 -0
- data/test/xml/test_dtd.rb +107 -0
- data/test/xml/test_dtd_encoding.rb +33 -0
- data/test/xml/test_element_content.rb +56 -0
- data/test/xml/test_element_decl.rb +73 -0
- data/test/xml/test_entity_decl.rb +122 -0
- data/test/xml/test_entity_reference.rb +21 -0
- data/test/xml/test_namespace.rb +70 -0
- data/test/xml/test_node.rb +917 -0
- data/test/xml/test_node_attributes.rb +34 -0
- data/test/xml/test_node_encoding.rb +107 -0
- data/test/xml/test_node_reparenting.rb +334 -0
- data/test/xml/test_node_set.rb +742 -0
- data/test/xml/test_parse_options.rb +52 -0
- data/test/xml/test_processing_instruction.rb +30 -0
- data/test/xml/test_reader_encoding.rb +126 -0
- data/test/xml/test_relax_ng.rb +60 -0
- data/test/xml/test_schema.rb +94 -0
- data/test/xml/test_syntax_error.rb +12 -0
- data/test/xml/test_text.rb +47 -0
- data/test/xml/test_unparented_node.rb +381 -0
- data/test/xml/test_xpath.rb +237 -0
- data/test/xslt/test_custom_functions.rb +94 -0
- data/test/xslt/test_exception_handling.rb +37 -0
- metadata +552 -0
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
package nokogiri.internals;
|
|
34
|
+
|
|
35
|
+
import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;
|
|
36
|
+
import nokogiri.NokogiriService;
|
|
37
|
+
import nokogiri.XmlSyntaxError;
|
|
38
|
+
|
|
39
|
+
import org.jruby.Ruby;
|
|
40
|
+
import org.jruby.RubyArray;
|
|
41
|
+
import org.xml.sax.ErrorHandler;
|
|
42
|
+
import org.xml.sax.SAXException;
|
|
43
|
+
import org.xml.sax.SAXParseException;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Error handler for Relax and W3C XML Schema.
|
|
47
|
+
*
|
|
48
|
+
* @author sergio
|
|
49
|
+
* @author Yoko Harada <yokolet@gmail.com>
|
|
50
|
+
*/
|
|
51
|
+
public class SchemaErrorHandler implements ErrorHandler{
|
|
52
|
+
private RubyArray errors;
|
|
53
|
+
private Ruby runtime;
|
|
54
|
+
|
|
55
|
+
public SchemaErrorHandler(Ruby ruby, RubyArray array) {
|
|
56
|
+
this.runtime = ruby;
|
|
57
|
+
this.errors = array;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public void warning(SAXParseException ex) throws SAXException {
|
|
61
|
+
XmlSyntaxError xmlSyntaxError = (XmlSyntaxError) NokogiriService.XML_SYNTAXERROR_ALLOCATOR.allocate(runtime, getNokogiriClass(runtime, "Nokogiri::XML::SyntaxError"));
|
|
62
|
+
xmlSyntaxError.setException(ex);
|
|
63
|
+
this.errors.append(xmlSyntaxError);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public void error(SAXParseException ex) throws SAXException {
|
|
67
|
+
XmlSyntaxError xmlSyntaxError = (XmlSyntaxError) NokogiriService.XML_SYNTAXERROR_ALLOCATOR.allocate(runtime, getNokogiriClass(runtime, "Nokogiri::XML::SyntaxError"));
|
|
68
|
+
xmlSyntaxError.setException(ex);
|
|
69
|
+
this.errors.append(xmlSyntaxError);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public void fatalError(SAXParseException ex) throws SAXException {
|
|
73
|
+
throw ex;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
package nokogiri.internals;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Interface for receiving xmlDecl information.
|
|
37
|
+
*
|
|
38
|
+
* @author Patrick Mahoney <pat@polycrystal.org>
|
|
39
|
+
*/
|
|
40
|
+
public interface XmlDeclHandler {
|
|
41
|
+
public void xmlDecl(String version, String encoding, String standalone);
|
|
42
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
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
|
+
package nokogiri.internals;
|
|
34
|
+
|
|
35
|
+
import java.io.IOException;
|
|
36
|
+
|
|
37
|
+
import nokogiri.XmlDocument;
|
|
38
|
+
|
|
39
|
+
import org.apache.xerces.parsers.DOMParser;
|
|
40
|
+
import org.apache.xerces.xni.parser.XMLParserConfiguration;
|
|
41
|
+
import org.cyberneko.dtd.DTDConfiguration;
|
|
42
|
+
import org.w3c.dom.Document;
|
|
43
|
+
import org.xml.sax.InputSource;
|
|
44
|
+
import org.xml.sax.SAXException;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Sets up a Xerces/XNI DOM Parser for use with Nokogiri. Uses
|
|
48
|
+
* NekoDTD to parse the DTD into a tree of Nodes.
|
|
49
|
+
*
|
|
50
|
+
* @author Patrick Mahoney <pat@polycrystal.org>
|
|
51
|
+
*/
|
|
52
|
+
public class XmlDomParser extends DOMParser {
|
|
53
|
+
DOMParser dtd;
|
|
54
|
+
|
|
55
|
+
public XmlDomParser() {
|
|
56
|
+
super();
|
|
57
|
+
|
|
58
|
+
DTDConfiguration dtdConfig = new DTDConfiguration();
|
|
59
|
+
dtd = new DOMParser(dtdConfig);
|
|
60
|
+
|
|
61
|
+
XMLParserConfiguration config = getXMLParserConfiguration();
|
|
62
|
+
config.setDTDHandler(dtdConfig);
|
|
63
|
+
config.setDTDContentModelHandler(dtdConfig);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public void parse(InputSource source) throws SAXException, IOException {
|
|
68
|
+
dtd.reset();
|
|
69
|
+
super.parse(source);
|
|
70
|
+
Document doc = getDocument();
|
|
71
|
+
if (doc == null)
|
|
72
|
+
throw new RuntimeException("null document");
|
|
73
|
+
|
|
74
|
+
doc.setUserData(XmlDocument.DTD_RAW_DOCUMENT, dtd.getDocument(), null);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
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
|
+
package nokogiri.internals;
|
|
34
|
+
|
|
35
|
+
import static nokogiri.internals.NokogiriHelpers.getNokogiriClass;
|
|
36
|
+
import static nokogiri.internals.NokogiriHelpers.rubyStringToString;
|
|
37
|
+
|
|
38
|
+
import java.io.ByteArrayInputStream;
|
|
39
|
+
import java.io.IOException;
|
|
40
|
+
import java.util.ArrayList;
|
|
41
|
+
import java.util.List;
|
|
42
|
+
|
|
43
|
+
import nokogiri.NokogiriService;
|
|
44
|
+
import nokogiri.XmlDocument;
|
|
45
|
+
import nokogiri.XmlDtd;
|
|
46
|
+
import nokogiri.XmlSyntaxError;
|
|
47
|
+
|
|
48
|
+
import org.apache.xerces.parsers.DOMParser;
|
|
49
|
+
import org.jruby.Ruby;
|
|
50
|
+
import org.jruby.RubyArray;
|
|
51
|
+
import org.jruby.RubyClass;
|
|
52
|
+
import org.jruby.exceptions.RaiseException;
|
|
53
|
+
import org.jruby.runtime.ThreadContext;
|
|
54
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
|
55
|
+
import org.w3c.dom.Document;
|
|
56
|
+
import org.w3c.dom.Node;
|
|
57
|
+
import org.w3c.dom.NodeList;
|
|
58
|
+
import org.xml.sax.EntityResolver;
|
|
59
|
+
import org.xml.sax.InputSource;
|
|
60
|
+
import org.xml.sax.SAXException;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Parser class for XML DOM processing. This class actually parses XML document
|
|
64
|
+
* and creates DOM tree in Java side. However, DOM tree in Ruby side is not since
|
|
65
|
+
* we delay creating objects for performance.
|
|
66
|
+
*
|
|
67
|
+
* @author sergio
|
|
68
|
+
* @author Yoko Harada <yokolet@gmail.com>
|
|
69
|
+
*/
|
|
70
|
+
public class XmlDomParserContext extends ParserContext {
|
|
71
|
+
protected static final String FEATURE_LOAD_EXTERNAL_DTD =
|
|
72
|
+
"http://apache.org/xml/features/nonvalidating/load-external-dtd";
|
|
73
|
+
protected static final String FEATURE_INCLUDE_IGNORABLE_WHITESPACE =
|
|
74
|
+
"http://apache.org/xml/features/dom/include-ignorable-whitespace";
|
|
75
|
+
protected static final String FEATURE_VALIDATION = "http://xml.org/sax/features/validation";
|
|
76
|
+
|
|
77
|
+
protected ParserContext.Options options;
|
|
78
|
+
protected DOMParser parser;
|
|
79
|
+
protected NokogiriErrorHandler errorHandler;
|
|
80
|
+
protected String java_encoding;
|
|
81
|
+
protected IRubyObject ruby_encoding;
|
|
82
|
+
|
|
83
|
+
public XmlDomParserContext(Ruby runtime, IRubyObject options) {
|
|
84
|
+
this(runtime, runtime.getNil(), options);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public XmlDomParserContext(Ruby runtime, IRubyObject encoding, IRubyObject options) {
|
|
88
|
+
super(runtime);
|
|
89
|
+
this.options = new ParserContext.Options((Long)options.toJava(Long.class));
|
|
90
|
+
this.java_encoding = encoding.isNil() ? NokogiriHelpers.guessEncoding(runtime) : rubyStringToString(encoding);
|
|
91
|
+
ruby_encoding = encoding;
|
|
92
|
+
initErrorHandler();
|
|
93
|
+
initParser(runtime);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
protected void initErrorHandler() {
|
|
97
|
+
if (options.recover) {
|
|
98
|
+
errorHandler = new NokogiriNonStrictErrorHandler(options.noError, options.noWarning);
|
|
99
|
+
} else {
|
|
100
|
+
errorHandler = new NokogiriStrictErrorHandler(options.noError, options.noWarning);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected void initParser(Ruby runtime) {
|
|
105
|
+
parser = new XmlDomParser();
|
|
106
|
+
parser.setErrorHandler(errorHandler);
|
|
107
|
+
|
|
108
|
+
if (options.noBlanks) {
|
|
109
|
+
setFeature(FEATURE_INCLUDE_IGNORABLE_WHITESPACE, false);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (options.dtdValid) {
|
|
113
|
+
setFeature(FEATURE_VALIDATION, true);
|
|
114
|
+
}
|
|
115
|
+
// If we turn off loading of external DTDs complete, we don't
|
|
116
|
+
// getthe publicID. Instead of turning off completely, we use
|
|
117
|
+
// an entity resolver that returns empty documents.
|
|
118
|
+
if (options.dtdLoad) {
|
|
119
|
+
setFeature(FEATURE_LOAD_EXTERNAL_DTD, true);
|
|
120
|
+
parser.setEntityResolver(new ChdirEntityResolver(runtime));
|
|
121
|
+
} else {
|
|
122
|
+
parser.setEntityResolver(new EntityResolver() {
|
|
123
|
+
public InputSource resolveEntity(String arg0, String arg1)
|
|
124
|
+
throws SAXException, IOException {
|
|
125
|
+
ByteArrayInputStream empty =
|
|
126
|
+
new ByteArrayInputStream(new byte[0]);
|
|
127
|
+
return new InputSource(empty);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Convenience method that catches and ignores SAXException
|
|
135
|
+
* (unrecognized and unsupported exceptions).
|
|
136
|
+
*/
|
|
137
|
+
protected void setFeature(String feature, boolean value) {
|
|
138
|
+
try {
|
|
139
|
+
parser.setFeature(feature, value);
|
|
140
|
+
} catch (SAXException e) {
|
|
141
|
+
// ignore
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Convenience method that catches and ignores SAXException
|
|
147
|
+
* (unrecognized and unsupported exceptions).
|
|
148
|
+
*/
|
|
149
|
+
protected void setProperty(String property, Object value) {
|
|
150
|
+
try {
|
|
151
|
+
parser.setProperty(property, value);
|
|
152
|
+
} catch (SAXException e) {
|
|
153
|
+
// ignore
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
public void addErrorsIfNecessary(ThreadContext context, XmlDocument doc) {
|
|
158
|
+
Ruby ruby = context.getRuntime();
|
|
159
|
+
RubyArray errors = ruby.newArray(errorHandler.getErrorsReadyForRuby(context));
|
|
160
|
+
doc.setInstanceVariable("@errors", errors);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public XmlDocument getDocumentWithErrorsOrRaiseException(ThreadContext context, Exception ex) {
|
|
164
|
+
if (options.recover) {
|
|
165
|
+
XmlDocument doc = this.getNewEmptyDocument(context);
|
|
166
|
+
this.addErrorsIfNecessary(context, doc);
|
|
167
|
+
XmlSyntaxError xmlSyntaxError = (XmlSyntaxError) NokogiriService.XML_SYNTAXERROR_ALLOCATOR.allocate(context.getRuntime(), getNokogiriClass(context.getRuntime(), "Nokogiri::XML::SyntaxError"));
|
|
168
|
+
xmlSyntaxError.setException(ex);
|
|
169
|
+
((RubyArray) doc.getInstanceVariable("@errors")).append(xmlSyntaxError);
|
|
170
|
+
return doc;
|
|
171
|
+
} else {
|
|
172
|
+
XmlSyntaxError xmlSyntaxError = (XmlSyntaxError) NokogiriService.XML_SYNTAXERROR_ALLOCATOR.allocate(context.getRuntime(), getNokogiriClass(context.getRuntime(), "Nokogiri::XML::SyntaxError"));
|
|
173
|
+
xmlSyntaxError.setException(ex);
|
|
174
|
+
throw new RaiseException(xmlSyntaxError);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
protected XmlDocument getNewEmptyDocument(ThreadContext context) {
|
|
179
|
+
IRubyObject[] args = new IRubyObject[0];
|
|
180
|
+
return (XmlDocument) XmlDocument.rbNew(context, getNokogiriClass(context.getRuntime(), "Nokogiri::XML::Document"), args);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* This method is broken out so that HtmlDomParserContext can
|
|
185
|
+
* override it.
|
|
186
|
+
*/
|
|
187
|
+
protected XmlDocument wrapDocument(ThreadContext context,
|
|
188
|
+
RubyClass klazz,
|
|
189
|
+
Document doc) {
|
|
190
|
+
XmlDocument xmlDocument = (XmlDocument) NokogiriService.XML_DOCUMENT_ALLOCATOR.allocate(context.getRuntime(), klazz);
|
|
191
|
+
xmlDocument.setNode(context, doc);
|
|
192
|
+
xmlDocument.setEncoding(ruby_encoding);
|
|
193
|
+
|
|
194
|
+
if (options.dtdLoad) {
|
|
195
|
+
XmlDtd xmlDtd = (XmlDtd) XmlDtd.newFromExternalSubset(context.getRuntime(), doc);
|
|
196
|
+
doc.setUserData(XmlDocument.DTD_EXTERNAL_SUBSET, xmlDtd, null);
|
|
197
|
+
}
|
|
198
|
+
return xmlDocument;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Must call setInputSource() before this method.
|
|
203
|
+
*/
|
|
204
|
+
public XmlDocument parse(ThreadContext context,
|
|
205
|
+
IRubyObject klass,
|
|
206
|
+
IRubyObject url) {
|
|
207
|
+
try {
|
|
208
|
+
Document doc = do_parse();
|
|
209
|
+
XmlDocument xmlDoc = wrapDocument(context, (RubyClass)klass, doc);
|
|
210
|
+
xmlDoc.setUrl(url);
|
|
211
|
+
addErrorsIfNecessary(context, xmlDoc);
|
|
212
|
+
return xmlDoc;
|
|
213
|
+
} catch (SAXException e) {
|
|
214
|
+
return getDocumentWithErrorsOrRaiseException(context, e);
|
|
215
|
+
} catch (IOException e) {
|
|
216
|
+
return getDocumentWithErrorsOrRaiseException(context, e);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
protected Document do_parse() throws SAXException, IOException {
|
|
221
|
+
parser.parse(getInputSource());
|
|
222
|
+
if (options.noBlanks) {
|
|
223
|
+
List<Node> emptyNodes = new ArrayList<Node>();
|
|
224
|
+
findEmptyTexts(parser.getDocument(), emptyNodes);
|
|
225
|
+
if (emptyNodes.size() > 0) {
|
|
226
|
+
for (Node node : emptyNodes) {
|
|
227
|
+
node.getParentNode().removeChild(node);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return parser.getDocument();
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
private void findEmptyTexts(Node node, List<Node> emptyNodes) {
|
|
235
|
+
if (node.getNodeType() == Node.TEXT_NODE && "".equals(node.getTextContent().trim())) {
|
|
236
|
+
emptyNodes.add(node);
|
|
237
|
+
} else {
|
|
238
|
+
NodeList children = node.getChildNodes();
|
|
239
|
+
for (int i=0; i < children.getLength(); i++) {
|
|
240
|
+
findEmptyTexts(children.item(i), emptyNodes);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
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
|
+
package nokogiri.internals;
|
|
34
|
+
|
|
35
|
+
import org.apache.xerces.parsers.SAXParser;
|
|
36
|
+
import org.apache.xerces.xni.Augmentations;
|
|
37
|
+
import org.apache.xerces.xni.XNIException;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Extends SAXParser in order to receive xmlDecl events and pass them
|
|
41
|
+
* on to a handler.
|
|
42
|
+
*
|
|
43
|
+
* @author Patrick Mahoney <pat@polycrystal.org>
|
|
44
|
+
*/
|
|
45
|
+
public class XmlSaxParser extends SAXParser {
|
|
46
|
+
|
|
47
|
+
protected XmlDeclHandler xmlDeclHandler = null;
|
|
48
|
+
|
|
49
|
+
public XmlSaxParser() {
|
|
50
|
+
super();
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public void setXmlDeclHandler(XmlDeclHandler xmlDeclHandler) {
|
|
54
|
+
this.xmlDeclHandler = xmlDeclHandler;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@Override
|
|
58
|
+
public void xmlDecl(String version, String encoding, String standalone,
|
|
59
|
+
Augmentations augs) throws XNIException {
|
|
60
|
+
super.xmlDecl(version, encoding, standalone, augs);
|
|
61
|
+
if (xmlDeclHandler != null) {
|
|
62
|
+
xmlDeclHandler.xmlDecl(version, encoding, standalone);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|