1 Clazz.declarePackage ("swingjs");
\r
2 Clazz.load (["org.xml.sax.Parser", "$.XMLReader"], "swingjs.JSSAXParser", ["java.io.BufferedInputStream", "$.BufferedReader", "java.lang.Boolean", "java.util.Hashtable", "JU.AU", "$.PT", "$.Rdr", "org.xml.sax.SAXParseException", "swingjs.JSSAXAttributes", "$.JSSAXContentHandler", "$.JSToolkit", "swingjs.api.DOMNode"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
4 this.resolver = null;
\r
5 this.dtdHandler = null;
\r
6 this.docHandler = null;
\r
7 this.contentHandler = null;
\r
8 this.errorHandler = null;
\r
9 this.havePre = false;
\r
10 this.uniqueSeq = null;
\r
12 this.tempChars = null;
\r
14 Clazz.instantialize (this, arguments);
\r
15 }, swingjs, "JSSAXParser", null, [org.xml.sax.Parser, org.xml.sax.XMLReader]);
\r
16 Clazz.prepareFields (c$, function () {
\r
17 this.tempChars = Clazz.newCharArray (1024, '\0');
\r
19 Clazz.overrideMethod (c$, "setLocale",
\r
21 }, "java.util.Locale");
\r
22 Clazz.overrideMethod (c$, "setEntityResolver",
\r
23 function (resolver) {
\r
24 this.resolver = resolver;
\r
25 }, "org.xml.sax.EntityResolver");
\r
26 Clazz.overrideMethod (c$, "setDTDHandler",
\r
27 function (handler) {
\r
28 this.dtdHandler = handler;
\r
29 }, "org.xml.sax.DTDHandler");
\r
30 Clazz.overrideMethod (c$, "setDocumentHandler",
\r
31 function (handler) {
\r
32 this.docHandler = handler;
\r
33 }, "org.xml.sax.DocumentHandler");
\r
34 Clazz.overrideMethod (c$, "setErrorHandler",
\r
35 function (handler) {
\r
36 this.errorHandler = handler;
\r
37 }, "org.xml.sax.ErrorHandler");
\r
38 Clazz.defineMethod (c$, "parse",
\r
39 function (source, handler) {
\r
40 this.setContentHandler (handler);
\r
41 this.parseSource (source);
\r
42 }, "org.xml.sax.InputSource,swingjs.JSSAXContentHandler");
\r
43 Clazz.defineMethod (c$, "parse",
\r
45 this.parseSource (source);
\r
46 }, "org.xml.sax.InputSource");
\r
47 Clazz.defineMethod (c$, "parseSource",
\r
49 var rdr = source.getCharacterStream ();
\r
50 var data = new Array (1);
\r
52 var bs = source.getByteStream ();
\r
53 if (!(Clazz.instanceOf (bs, java.io.BufferedInputStream))) bs = new java.io.BufferedInputStream (bs);
\r
54 data[0] = JU.Rdr.fixUTF (JU.Rdr.getStreamAsBytes (bs, null));
\r
56 if (!(Clazz.instanceOf (rdr, java.io.BufferedReader))) rdr = new java.io.BufferedReader (rdr);
\r
57 JU.Rdr.readAllAsString (rdr, -1, false, data, 0);
\r
59 this.parseDocument (this.parseXML (data[0]));
\r
61 if (Clazz.exceptionOf (e, Exception)) {
\r
67 }, "org.xml.sax.InputSource");
\r
68 Clazz.defineMethod (c$, "parse",
\r
69 function (fileName) {
\r
71 this.parseDocument (this.parseXML (swingjs.JSToolkit.getFileContents (fileName)));
\r
73 if (Clazz.exceptionOf (e, Exception)) {
\r
80 Clazz.defineMethod (c$, "parseXMLString",
\r
83 this.parseDocument (this.parseXML (data));
\r
85 if (Clazz.exceptionOf (e, Exception)) {
\r
92 Clazz.defineMethod (c$, "parseXML",
\r
94 return swingjs.JSToolkit.getJQuery ().parseXML (this.removeProcessing (data));
\r
96 Clazz.defineMethod (c$, "removeProcessing",
\r
98 if (data.indexOf ("<?") >= 0) {
\r
99 this.getUniqueSequence (data);
\r
100 data = JU.PT.rep (JU.PT.rep (data, "<?", "<![CDATA[" + this.uniqueSeq), "?>", "]]>");
\r
101 if (data.startsWith ("<!")) {
\r
102 data = "<pre>" + data + "</pre>";
\r
103 this.havePre = true;
\r
106 Clazz.defineMethod (c$, "getUniqueSequence",
\r
109 while (data.indexOf ("<![CDATA[" + s) >= 0) s += "~";
\r
111 this.uniqueSeq = s;
\r
113 Clazz.defineMethod (c$, "error",
\r
115 var ee = new org.xml.sax.SAXParseException ("Invalid Document", null);
\r
116 if (this.errorHandler == null) throw (ee);
\r
117 else this.errorHandler.fatalError (ee);
\r
119 Clazz.defineMethod (c$, "parseDocument",
\r
121 if (this.docHandler == null && this.contentHandler == null) this.contentHandler = new swingjs.JSSAXContentHandler ();
\r
122 this.ver2 = (this.contentHandler != null);
\r
123 if (this.ver2) this.contentHandler.startDocument ();
\r
124 else this.docHandler.startDocument ();
\r
125 this.walkDOMTree (swingjs.api.DOMNode.getAttr (doc, "firstChild"), this.havePre);
\r
126 if (this.ver2) this.contentHandler.endDocument ();
\r
127 else this.docHandler.endDocument ();
\r
128 }, "swingjs.api.DOMNode");
\r
129 Clazz.defineMethod (c$, "walkDOMTree",
\r
130 function (node, skipTag) {
\r
131 var localName = (swingjs.api.DOMNode.getAttr (node, "localName"));
\r
132 var qName = swingjs.api.DOMNode.getAttr (node, "nodeName");
\r
133 var uri = swingjs.api.DOMNode.getAttr (node, "namespaceURI");
\r
134 if (localName == null) {
\r
135 var isText = "#text".equals (qName);
\r
136 if (isText || "#cdata-section".equals (qName)) {
\r
137 var data = swingjs.api.DOMNode.getAttr (node, "textContent");
\r
138 if (isText || this.uniqueSeq == null || !data.startsWith (this.uniqueSeq)) {
\r
139 var len = data.length;
\r
140 var ch = this.tempChars;
\r
141 if (len > ch.length) ch = this.tempChars = JU.AU.ensureLength (ch, len * 2);
\r
142 for (var i = len; --i >= 0; ) ch[i] = data.charAt (i);
\r
144 if (this.ver2) this.contentHandler.characters (ch, 0, len);
\r
145 else this.docHandler.characters (ch, 0, len);
\r
147 }data = data.substring (this.uniqueSeq.length);
\r
148 var target = data + " ";
\r
149 target = target.substring (0, target.indexOf (" "));
\r
150 data = data.substring (target.length).trim ();
\r
151 if (this.ver2) this.contentHandler.processingInstruction (target, data);
\r
152 else this.docHandler.processingInstruction (target, data);
\r
153 }} else if (!skipTag) {
\r
154 var atts = new swingjs.JSSAXAttributes (node);
\r
155 if (this.ver2) this.contentHandler.startElement (uri, localName, qName, atts);
\r
156 else this.docHandler.startElement (localName, atts);
\r
157 }node = swingjs.api.DOMNode.getAttr (node, "firstChild");
\r
158 while (node != null) {
\r
159 this.walkDOMTree (node, false);
\r
160 node = swingjs.api.DOMNode.getAttr (node, "nextSibling");
\r
162 if (localName == null || skipTag) return;
\r
163 if (this.ver2) this.contentHandler.endElement (uri, localName, qName);
\r
164 else this.docHandler.endElement (localName);
\r
165 }, "swingjs.api.DOMNode,~B");
\r
166 Clazz.overrideMethod (c$, "getFeature",
\r
168 return (this.getProperty ("\1" + name) != null);
\r
170 Clazz.overrideMethod (c$, "setFeature",
\r
171 function (name, value) {
\r
172 this.setProperty ("\1" + name, value ? Boolean.TRUE : null);
\r
174 Clazz.overrideMethod (c$, "getProperty",
\r
176 return (this.props == null ? null : this.props.get (name));
\r
178 Clazz.overrideMethod (c$, "setProperty",
\r
179 function (name, value) {
\r
180 if (value == null) {
\r
181 if (this.props != null) this.props.remove (name);
\r
183 }if (this.props == null) this.props = new java.util.Hashtable ();
\r
184 this.props.put (name, value);
\r
186 Clazz.overrideMethod (c$, "getEntityResolver",
\r
188 return this.resolver;
\r
190 Clazz.overrideMethod (c$, "getDTDHandler",
\r
192 return this.dtdHandler;
\r
194 Clazz.overrideMethod (c$, "setContentHandler",
\r
195 function (handler) {
\r
196 this.contentHandler = handler;
\r
197 }, "org.xml.sax.ContentHandler");
\r
198 Clazz.overrideMethod (c$, "getContentHandler",
\r
200 return this.contentHandler;
\r
202 Clazz.overrideMethod (c$, "getErrorHandler",
\r
204 return this.errorHandler;
\r