smile-xml 1.0.0-jruby → 1.0.2-jruby
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/lib/smile-xml.jar +0 -0
- data/src/main/java/smile/xml/AttrJ.java +160 -0
- data/src/main/java/smile/xml/AttributesJ.java +212 -0
- data/src/main/java/smile/xml/BaseJ.java +60 -0
- data/src/main/java/smile/xml/DocumentJ.java +435 -0
- data/src/main/java/smile/xml/EncodingJ.java +94 -0
- data/src/main/java/smile/xml/ErrorJ.java +162 -0
- data/src/main/java/smile/xml/NamespaceJ.java +67 -0
- data/src/main/java/smile/xml/NamespacesJ.java +62 -0
- data/src/main/java/smile/xml/NodeJ.java +1029 -0
- data/src/main/java/smile/xml/NodeSetJ.java +90 -0
- data/src/main/java/smile/xml/ParserContextJ.java +44 -0
- data/src/main/java/smile/xml/ParserJ.java +196 -0
- data/src/main/java/smile/xml/ParserOptionsJ.java +58 -0
- data/src/main/java/smile/xml/ReaderJ.java +34 -0
- data/src/main/java/smile/xml/SchemaJ.java +66 -0
- data/src/main/java/smile/xml/SmileXML.java +65 -0
- data/src/main/java/smile/xml/XmlJ.java +58 -0
- data/src/main/java/smile/xml/sax/CallbackHandler.java +113 -0
- data/src/main/java/smile/xml/sax/SaxParserCallbacksJ.java +71 -0
- data/src/main/java/smile/xml/sax/SaxParserJ.java +153 -0
- data/src/main/java/smile/xml/util/UtilJ.java +424 -0
- data/src/main/java/smile/xml/xpath/CustomNamespaceContext.java +59 -0
- data/src/main/java/smile/xml/xpath/XPathContextJ.java +154 -0
- data/src/main/java/smile/xml/xpath/XPathExpressionJ.java +62 -0
- data/src/main/java/smile/xml/xpath/XPathJ.java +36 -0
- data/src/main/java/smile/xml/xpath/XPathObjectJ.java +196 -0
- data/src/main/java/smile/xml/xpath/XPointerJ.java +32 -0
- data/src/main/ruby/xml/libxml.rb +1 -0
- data/src/main/ruby/xml.rb +5 -0
- data/src/test/ruby/etc_doc_to_s.rb +21 -0
- data/src/test/ruby/ets_doc_file.rb +17 -0
- data/src/test/ruby/ets_doc_to_s.rb +23 -0
- data/src/test/ruby/ets_gpx.rb +28 -0
- data/src/test/ruby/ets_node_gc.rb +23 -0
- data/src/test/ruby/ets_test.xml +2 -0
- data/src/test/ruby/ets_tsr.rb +11 -0
- data/src/test/ruby/model/atom.xml +13 -0
- data/src/test/ruby/model/bands.iso-8859-1.xml +5 -0
- data/src/test/ruby/model/bands.utf-8.xml +5 -0
- data/src/test/ruby/model/bands.xml +5 -0
- data/src/test/ruby/model/books.xml +146 -0
- data/src/test/ruby/model/merge_bug_data.xml +58 -0
- data/src/test/ruby/model/ruby-lang.html +238 -0
- data/src/test/ruby/model/rubynet.xml +79 -0
- data/src/test/ruby/model/shiporder.rnc +28 -0
- data/src/test/ruby/model/shiporder.rng +86 -0
- data/src/test/ruby/model/shiporder.xml +23 -0
- data/src/test/ruby/model/shiporder.xsd +31 -0
- data/src/test/ruby/model/soap.xml +27 -0
- data/src/test/ruby/model/xinclude.xml +5 -0
- data/src/test/ruby/smile_xml_test.rb +64 -0
- data/src/test/ruby/tc_attr.rb +191 -0
- data/src/test/ruby/tc_attr_decl.rb +133 -0
- data/src/test/ruby/tc_attributes.rb +135 -0
- data/src/test/ruby/tc_deprecated_require.rb +13 -0
- data/src/test/ruby/tc_document.rb +162 -0
- data/src/test/ruby/tc_document_write.rb +212 -0
- data/src/test/ruby/tc_dtd.rb +125 -0
- data/src/test/ruby/tc_error.rb +150 -0
- data/src/test/ruby/tc_html_parser.rb +140 -0
- data/src/test/ruby/tc_namespace.rb +62 -0
- data/src/test/ruby/tc_namespaces.rb +210 -0
- data/src/test/ruby/tc_node.rb +273 -0
- data/src/test/ruby/tc_node_cdata.rb +51 -0
- data/src/test/ruby/tc_node_comment.rb +33 -0
- data/src/test/ruby/tc_node_copy.rb +42 -0
- data/src/test/ruby/tc_node_edit.rb +178 -0
- data/src/test/ruby/tc_node_text.rb +73 -0
- data/src/test/ruby/tc_node_write.rb +108 -0
- data/src/test/ruby/tc_node_xlink.rb +29 -0
- data/src/test/ruby/tc_parser.rb +371 -0
- data/src/test/ruby/tc_parser_context.rb +189 -0
- data/src/test/ruby/tc_properties.rb +40 -0
- data/src/test/ruby/tc_reader.rb +306 -0
- data/src/test/ruby/tc_relaxng.rb +54 -0
- data/src/test/ruby/tc_sax_parser.rb +340 -0
- data/src/test/ruby/tc_schema.rb +59 -0
- data/src/test/ruby/tc_traversal.rb +222 -0
- data/src/test/ruby/tc_xinclude.rb +21 -0
- data/src/test/ruby/tc_xml.rb +226 -0
- data/src/test/ruby/tc_xpath.rb +210 -0
- data/src/test/ruby/tc_xpath_context.rb +80 -0
- data/src/test/ruby/tc_xpath_expression.rb +38 -0
- data/src/test/ruby/tc_xpointer.rb +74 -0
- data/src/test/ruby/test_helper.rb +23 -0
- data/src/test/ruby/test_suite.rb +41 -0
- metadata +91 -5
@@ -0,0 +1,113 @@
|
|
1
|
+
package smile.xml.sax;
|
2
|
+
|
3
|
+
import java.util.HashMap;
|
4
|
+
import java.util.Map;
|
5
|
+
|
6
|
+
import org.jruby.RubyHash;
|
7
|
+
import org.jruby.RubyString;
|
8
|
+
import org.jruby.runtime.ThreadContext;
|
9
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
10
|
+
import org.xml.sax.Attributes;
|
11
|
+
import org.xml.sax.SAXException;
|
12
|
+
import org.xml.sax.SAXParseException;
|
13
|
+
import org.xml.sax.ext.DefaultHandler2;
|
14
|
+
|
15
|
+
import smile.xml.ErrorJ;
|
16
|
+
|
17
|
+
public class CallbackHandler extends DefaultHandler2 {
|
18
|
+
|
19
|
+
private final IRubyObject callback;
|
20
|
+
private final ThreadContext context;
|
21
|
+
private boolean cdata = false;
|
22
|
+
|
23
|
+
public CallbackHandler( ThreadContext context, IRubyObject callback ) {
|
24
|
+
this.context = context;
|
25
|
+
this.callback = callback;
|
26
|
+
}
|
27
|
+
|
28
|
+
private void call( String method, IRubyObject...args ) {
|
29
|
+
callback.callMethod( context, method, args );
|
30
|
+
}
|
31
|
+
|
32
|
+
private RubyString toString( String string ) {
|
33
|
+
return context.getRuntime().newString( string );
|
34
|
+
}
|
35
|
+
|
36
|
+
private RubyHash toHash( Map<?,?> map ) {
|
37
|
+
return RubyHash.newHash( context.getRuntime(), map, context.getRuntime().getNil() );
|
38
|
+
}
|
39
|
+
|
40
|
+
@Override
|
41
|
+
public void startDocument() throws SAXException {
|
42
|
+
call( "on_start_document" );
|
43
|
+
}
|
44
|
+
|
45
|
+
@Override
|
46
|
+
public void endDocument() throws SAXException {
|
47
|
+
call( "on_end_document" );
|
48
|
+
}
|
49
|
+
|
50
|
+
@Override
|
51
|
+
public void error(SAXParseException e) throws SAXException {
|
52
|
+
call( "on_error", ErrorJ.newInstance( context, e.getMessage()) );
|
53
|
+
}
|
54
|
+
|
55
|
+
@Override
|
56
|
+
public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
|
57
|
+
|
58
|
+
// System.out.println( uri );
|
59
|
+
// System.out.println( localName );
|
60
|
+
// System.out.println( qName );
|
61
|
+
// System.out.println("---------");
|
62
|
+
Map<IRubyObject, IRubyObject> map = new HashMap<IRubyObject,IRubyObject>();
|
63
|
+
for (int i = 0; i < atts.getLength(); i++)
|
64
|
+
map.put( toString( atts.getLocalName(i) ), toString( atts.getValue(i) ) );
|
65
|
+
|
66
|
+
call( "on_start_element", toString(qName), toHash(map) );
|
67
|
+
// if( localName.equals( qName ) ) {
|
68
|
+
//
|
69
|
+
// } else {
|
70
|
+
// System.err.println( "on_start_element_ns ");
|
71
|
+
// call( "on_start_element_ns", toString(localName), toHash(map), toString(""), toString(uri), context.getRuntime().getNil() );
|
72
|
+
// }
|
73
|
+
}
|
74
|
+
|
75
|
+
@Override
|
76
|
+
public void endElement(String uri, String localName, String qName) throws SAXException {
|
77
|
+
call( "on_end_element", toString( qName ) );
|
78
|
+
}
|
79
|
+
|
80
|
+
@Override
|
81
|
+
public void characters(char[] ch, int start, int length) throws SAXException {
|
82
|
+
|
83
|
+
RubyString string = toString( String.valueOf(ch, start, length) );
|
84
|
+
if (this.cdata) {
|
85
|
+
call( "on_cdata_block", string );
|
86
|
+
} else {
|
87
|
+
call( "on_characters", string );
|
88
|
+
}
|
89
|
+
}
|
90
|
+
|
91
|
+
@Override
|
92
|
+
public void processingInstruction(String target, String data) throws SAXException {
|
93
|
+
call( "on_processing_instruction", toString(target), toString(data));
|
94
|
+
}
|
95
|
+
|
96
|
+
@Override
|
97
|
+
public void startCDATA() {
|
98
|
+
this.cdata = true;
|
99
|
+
}
|
100
|
+
|
101
|
+
@Override
|
102
|
+
public void endCDATA() {
|
103
|
+
this.cdata = false;
|
104
|
+
}
|
105
|
+
|
106
|
+
@Override
|
107
|
+
public void comment(char[] ch, int start, int length) throws SAXException {
|
108
|
+
call( "on_comment", toString( String.valueOf(ch, start, length) ) );
|
109
|
+
}
|
110
|
+
|
111
|
+
}
|
112
|
+
|
113
|
+
|
@@ -0,0 +1,71 @@
|
|
1
|
+
package smile.xml.sax;
|
2
|
+
|
3
|
+
import org.jruby.Ruby;
|
4
|
+
import org.jruby.RubyModule;
|
5
|
+
import org.jruby.anno.JRubyMethod;
|
6
|
+
import org.jruby.anno.JRubyModule;
|
7
|
+
import org.jruby.runtime.ThreadContext;
|
8
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
9
|
+
|
10
|
+
import smile.xml.util.UtilJ;
|
11
|
+
|
12
|
+
@JRubyModule(name = "LibXML::XML::SaxParser::Callbacks")
|
13
|
+
public class SaxParserCallbacksJ {
|
14
|
+
public static RubyModule define(Ruby runtime) {
|
15
|
+
return UtilJ.defineModule(runtime, SaxParserCallbacksJ.class);
|
16
|
+
}
|
17
|
+
|
18
|
+
@JRubyMethod(name = "on_start_document")
|
19
|
+
public static void onStartDocument(ThreadContext context, IRubyObject self) {
|
20
|
+
}
|
21
|
+
|
22
|
+
@JRubyMethod(name = "on_start_element")
|
23
|
+
public static void onStartElement(ThreadContext context, IRubyObject self,
|
24
|
+
IRubyObject name, IRubyObject attr) {
|
25
|
+
}
|
26
|
+
|
27
|
+
@JRubyMethod(name = "on_characters")
|
28
|
+
public static void onCharacter(ThreadContext context, IRubyObject self,
|
29
|
+
IRubyObject arg) {
|
30
|
+
}
|
31
|
+
|
32
|
+
@JRubyMethod(name = "on_comment")
|
33
|
+
public static void onComment(ThreadContext context, IRubyObject self,
|
34
|
+
IRubyObject arg) {
|
35
|
+
}
|
36
|
+
|
37
|
+
@JRubyMethod(name = "on_processing_instruction")
|
38
|
+
public static void onProcessingInstruction(ThreadContext context,
|
39
|
+
IRubyObject self, IRubyObject target, IRubyObject data) {
|
40
|
+
}
|
41
|
+
|
42
|
+
@JRubyMethod(name = "on_cdata_block")
|
43
|
+
public static void onCDataBlock(ThreadContext context, IRubyObject self,
|
44
|
+
IRubyObject cdata) {
|
45
|
+
}
|
46
|
+
|
47
|
+
@JRubyMethod(name = "on_end_element")
|
48
|
+
public static void onEndElement(ThreadContext context, IRubyObject self,
|
49
|
+
IRubyObject name) {
|
50
|
+
}
|
51
|
+
|
52
|
+
@JRubyMethod(name = "on_end_document")
|
53
|
+
public static void onEndDocument(ThreadContext context, IRubyObject self) {
|
54
|
+
}
|
55
|
+
|
56
|
+
@JRubyMethod(name = "on_start_element_ns", rest = true)
|
57
|
+
public static void onStartElementNS(ThreadContext context,
|
58
|
+
IRubyObject self, IRubyObject[] args) {
|
59
|
+
}
|
60
|
+
|
61
|
+
@JRubyMethod(name = "on_end_element_ns")
|
62
|
+
public static void onEndElementNS(ThreadContext context, IRubyObject self,
|
63
|
+
IRubyObject name, IRubyObject prefix, IRubyObject uri) {
|
64
|
+
}
|
65
|
+
|
66
|
+
@JRubyMethod(name = "on_error")
|
67
|
+
public static void onError(ThreadContext context, IRubyObject self,
|
68
|
+
IRubyObject error) {
|
69
|
+
}
|
70
|
+
|
71
|
+
}
|
@@ -0,0 +1,153 @@
|
|
1
|
+
package smile.xml.sax;
|
2
|
+
|
3
|
+
import java.io.File;
|
4
|
+
import java.io.FileReader;
|
5
|
+
import java.io.IOException;
|
6
|
+
import java.io.StringReader;
|
7
|
+
|
8
|
+
import org.jruby.Ruby;
|
9
|
+
import org.jruby.RubyClass;
|
10
|
+
import org.jruby.RubyObject;
|
11
|
+
import org.jruby.RubyString;
|
12
|
+
import org.jruby.anno.JRubyClass;
|
13
|
+
import org.jruby.anno.JRubyMethod;
|
14
|
+
import org.jruby.runtime.ObjectAllocator;
|
15
|
+
import org.jruby.runtime.ThreadContext;
|
16
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
17
|
+
import org.xml.sax.EntityResolver;
|
18
|
+
import org.xml.sax.InputSource;
|
19
|
+
import org.xml.sax.SAXException;
|
20
|
+
import org.xml.sax.XMLReader;
|
21
|
+
import org.xml.sax.helpers.XMLReaderFactory;
|
22
|
+
|
23
|
+
import smile.xml.ErrorJ;
|
24
|
+
import smile.xml.ParserJ;
|
25
|
+
import smile.xml.util.UtilJ;
|
26
|
+
|
27
|
+
@JRubyClass(name="LibXML::XML::SaxParser")
|
28
|
+
public class SaxParserJ extends RubyObject {
|
29
|
+
|
30
|
+
private static final long serialVersionUID = -8712513236401964568L;
|
31
|
+
|
32
|
+
public static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
|
33
|
+
public IRubyObject allocate(Ruby runtime, RubyClass klass) {
|
34
|
+
return new SaxParserJ(runtime, klass);
|
35
|
+
}
|
36
|
+
};
|
37
|
+
|
38
|
+
public static RubyClass define(Ruby runtime) {
|
39
|
+
return UtilJ.defineClass( runtime, SaxParserJ.class, ALLOCATOR );
|
40
|
+
}
|
41
|
+
|
42
|
+
public static RubyClass getRubyClass(Ruby runtime) {
|
43
|
+
return UtilJ.getClass(runtime, SaxParserJ.class );
|
44
|
+
}
|
45
|
+
|
46
|
+
@JRubyMethod(name = { "string" }, module = true)
|
47
|
+
public static IRubyObject fromString(ThreadContext context, IRubyObject self, IRubyObject pString) {
|
48
|
+
|
49
|
+
if (pString.isNil())
|
50
|
+
throw context.getRuntime().newTypeError( "wrong argument type nil (expected String)" );
|
51
|
+
|
52
|
+
SaxParserJ parser = new SaxParserJ(context);
|
53
|
+
parser.string = ((RubyString) pString);
|
54
|
+
return parser;
|
55
|
+
}
|
56
|
+
|
57
|
+
@JRubyMethod(name = "file", module = true)
|
58
|
+
public static IRubyObject fromFile(ThreadContext context, IRubyObject self,
|
59
|
+
IRubyObject pFile) {
|
60
|
+
|
61
|
+
if (pFile.isNil())
|
62
|
+
throw context.getRuntime().newTypeError( "can't convert nil into String" );
|
63
|
+
|
64
|
+
if (new File(pFile.asJavaString()).exists() == false)
|
65
|
+
throw ErrorJ.newRaiseException( context, "Warning: failed to load external entity \"" + pFile.asJavaString() + "\".");
|
66
|
+
|
67
|
+
SaxParserJ parser = new SaxParserJ(context);
|
68
|
+
parser.fileName = ((RubyString) pFile);
|
69
|
+
return parser;
|
70
|
+
}
|
71
|
+
|
72
|
+
private RubyString string;
|
73
|
+
private RubyString fileName;
|
74
|
+
private IRubyObject callbacks;
|
75
|
+
|
76
|
+
@JRubyMethod(name = { "io" }, module = true)
|
77
|
+
public static IRubyObject fromIo(ThreadContext context, IRubyObject self, IRubyObject pIo) {
|
78
|
+
SaxParserJ parser = new SaxParserJ(context);
|
79
|
+
parser.string = ((RubyString) pIo.callMethod(context, "read"));
|
80
|
+
return parser;
|
81
|
+
}
|
82
|
+
|
83
|
+
public SaxParserJ(Ruby runtime, RubyClass metaClass) {
|
84
|
+
super(runtime, metaClass);
|
85
|
+
}
|
86
|
+
|
87
|
+
public SaxParserJ(ThreadContext context) {
|
88
|
+
this(context.getRuntime(), getRubyClass(context.getRuntime()));
|
89
|
+
}
|
90
|
+
|
91
|
+
@JRubyMethod(name = { "initialize" }, optional = 1)
|
92
|
+
public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
|
93
|
+
return this;
|
94
|
+
}
|
95
|
+
|
96
|
+
@JRubyMethod(name = { "filename=" })
|
97
|
+
public void setFilename(ThreadContext context, IRubyObject pFileName) {
|
98
|
+
this.fileName = ((RubyString) pFileName);
|
99
|
+
}
|
100
|
+
|
101
|
+
@JRubyMethod(name = { "string=" })
|
102
|
+
public void setString(ThreadContext context, IRubyObject pFileName) {
|
103
|
+
this.string = ((RubyString) pFileName);
|
104
|
+
}
|
105
|
+
|
106
|
+
@JRubyMethod(name = { "string" })
|
107
|
+
public IRubyObject getString(ThreadContext context) {
|
108
|
+
return this.string;
|
109
|
+
}
|
110
|
+
|
111
|
+
@JRubyMethod(name = { "callbacks=" })
|
112
|
+
public void setCallbacks(ThreadContext context, IRubyObject pCallbacks) {
|
113
|
+
this.callbacks = pCallbacks;
|
114
|
+
}
|
115
|
+
|
116
|
+
@JRubyMethod(name = { "callbacks" })
|
117
|
+
public IRubyObject getCallbacks(ThreadContext context) {
|
118
|
+
return this.callbacks;
|
119
|
+
}
|
120
|
+
|
121
|
+
@JRubyMethod(name = { "parse" })
|
122
|
+
public IRubyObject parse(ThreadContext context) throws SAXException,
|
123
|
+
IOException {
|
124
|
+
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
|
125
|
+
InputSource inputSource;
|
126
|
+
if (this.string != null) {
|
127
|
+
inputSource = new InputSource(new StringReader(
|
128
|
+
this.string.asJavaString()));
|
129
|
+
} else {
|
130
|
+
FileReader reader = new FileReader(this.fileName.asJavaString());
|
131
|
+
inputSource = new InputSource(reader);
|
132
|
+
}
|
133
|
+
|
134
|
+
xmlReader.setEntityResolver(new EntityResolver() {
|
135
|
+
public InputSource resolveEntity(String publicId, String systemId)
|
136
|
+
throws SAXException, IOException {
|
137
|
+
return new InputSource(new StringReader(""));
|
138
|
+
}
|
139
|
+
});
|
140
|
+
if (callbacks != null && callbacks.isNil() == false)
|
141
|
+
xmlReader.setContentHandler(new CallbackHandler(context, callbacks));
|
142
|
+
|
143
|
+
xmlReader.setProperty("http://xml.org/sax/properties/lexical-handler",xmlReader.getContentHandler());
|
144
|
+
try {
|
145
|
+
xmlReader.parse(inputSource);
|
146
|
+
} catch (SAXException e) {
|
147
|
+
throw ErrorJ.newRaiseException(context, e.getMessage());
|
148
|
+
}
|
149
|
+
|
150
|
+
return context.getRuntime().getTrue();
|
151
|
+
}
|
152
|
+
|
153
|
+
}
|