JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / swingjs / JSSAXParser.js
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
11 this.ver2 = false;\r
12 this.tempChars = null;\r
13 this.props = 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
18 });\r
19 Clazz.overrideMethod (c$, "setLocale", \r
20 function (locale) {\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
44 function (source) {\r
45 this.parseSource (source);\r
46 }, "org.xml.sax.InputSource");\r
47 Clazz.defineMethod (c$, "parseSource", \r
48  function (source) {\r
49 var rdr = source.getCharacterStream ();\r
50 var data =  new Array (1);\r
51 if (rdr == null) {\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
55 } else {\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
58 }try {\r
59 this.parseDocument (this.parseXML (data[0]));\r
60 } catch (e) {\r
61 if (Clazz.exceptionOf (e, Exception)) {\r
62 this.error (e);\r
63 } else {\r
64 throw e;\r
65 }\r
66 }\r
67 }, "org.xml.sax.InputSource");\r
68 Clazz.defineMethod (c$, "parse", \r
69 function (fileName) {\r
70 try {\r
71 this.parseDocument (this.parseXML (swingjs.JSToolkit.getFileContents (fileName)));\r
72 } catch (e) {\r
73 if (Clazz.exceptionOf (e, Exception)) {\r
74 this.error (e);\r
75 } else {\r
76 throw e;\r
77 }\r
78 }\r
79 }, "~S");\r
80 Clazz.defineMethod (c$, "parseXMLString", \r
81 function (data) {\r
82 try {\r
83 this.parseDocument (this.parseXML (data));\r
84 } catch (e) {\r
85 if (Clazz.exceptionOf (e, Exception)) {\r
86 this.error (e);\r
87 } else {\r
88 throw e;\r
89 }\r
90 }\r
91 }, "~S");\r
92 Clazz.defineMethod (c$, "parseXML", \r
93  function (data) {\r
94 return swingjs.JSToolkit.getJQuery ().parseXML (this.removeProcessing (data));\r
95 }, "~S");\r
96 Clazz.defineMethod (c$, "removeProcessing", \r
97  function (data) {\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
104 }}return data;\r
105 }, "~S");\r
106 Clazz.defineMethod (c$, "getUniqueSequence", \r
107  function (data) {\r
108 var s = "~";\r
109 while (data.indexOf ("<![CDATA[" + s) >= 0) s += "~";\r
110 \r
111 this.uniqueSeq = s;\r
112 }, "~S");\r
113 Clazz.defineMethod (c$, "error", \r
114  function (e) {\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
118 }, "Exception");\r
119 Clazz.defineMethod (c$, "parseDocument", \r
120  function (doc) {\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
143 \r
144 if (this.ver2) this.contentHandler.characters (ch, 0, len);\r
145  else this.docHandler.characters (ch, 0, len);\r
146 return;\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
161 }\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
167 function (name) {\r
168 return (this.getProperty ("\1" + name) != null);\r
169 }, "~S");\r
170 Clazz.overrideMethod (c$, "setFeature", \r
171 function (name, value) {\r
172 this.setProperty ("\1" + name, value ? Boolean.TRUE : null);\r
173 }, "~S,~B");\r
174 Clazz.overrideMethod (c$, "getProperty", \r
175 function (name) {\r
176 return (this.props == null ? null : this.props.get (name));\r
177 }, "~S");\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
182 return;\r
183 }if (this.props == null) this.props =  new java.util.Hashtable ();\r
184 this.props.put (name, value);\r
185 }, "~S,~O");\r
186 Clazz.overrideMethod (c$, "getEntityResolver", \r
187 function () {\r
188 return this.resolver;\r
189 });\r
190 Clazz.overrideMethod (c$, "getDTDHandler", \r
191 function () {\r
192 return this.dtdHandler;\r
193 });\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
199 function () {\r
200 return this.contentHandler;\r
201 });\r
202 Clazz.overrideMethod (c$, "getErrorHandler", \r
203 function () {\r
204 return this.errorHandler;\r
205 });\r
206 });\r