1 Clazz.declarePackage ("swingjs");
\r
2 Clazz.load (["javax.swing.text.DocumentFilter", "$.Element", "$.JSMinimalAbstractDocument"], "swingjs.JSAbstractDocument", ["java.lang.IllegalStateException", "java.util.HashMap", "JU.AU", "javax.swing.event.DocumentEvent", "$.DocumentListener", "$.EventListenerList", "javax.swing.text.BadLocationException", "swingjs.JSDocumentEvent"], function () {
\r
3 c$ = Clazz.decorateAsClass (function () {
\r
6 this.positions = null;
\r
7 this.listenerList = null;
\r
8 this.notifyingListeners = false;
\r
9 this.filterBypass = null;
\r
12 this.tempChar = null;
\r
14 if (!Clazz.isClassDefined ("swingjs.JSAbstractDocument.DefaultFilterBypass")) {
\r
15 swingjs.JSAbstractDocument.$JSAbstractDocument$DefaultFilterBypass$ ();
\r
17 if (!Clazz.isClassDefined ("swingjs.JSAbstractDocument.JSElement")) {
\r
18 swingjs.JSAbstractDocument.$JSAbstractDocument$JSElement$ ();
\r
20 Clazz.instantialize (this, arguments);
\r
21 }, swingjs, "JSAbstractDocument", null, javax.swing.text.JSMinimalAbstractDocument);
\r
22 Clazz.makeConstructor (c$,
\r
25 this.props = new java.util.HashMap ();
\r
27 Clazz.overrideMethod (c$, "getRootElements",
\r
29 return Clazz.newArray (-1, [this.root, null]);
\r
31 Clazz.defineMethod (c$, "checkLoc",
\r
32 function (start, end) {
\r
33 if (start < 0 || end > this.getLength ()) throw new javax.swing.text.BadLocationException ("JSAbstractDocument: out of range", (start < 0 ? start : end));
\r
35 Clazz.defineMethod (c$, "fixPositions",
\r
36 function (offset, length, isInsert) {
\r
37 if (this.positions == null || this.positions.isEmpty ()) return;
\r
39 for (var i, $i = this.positions.keySet ().iterator (); $i.hasNext () && ((i = $i.next ()) || true);) {
\r
40 var pos = i.intValue ();
\r
41 if (pos > offset) this.positions.get (i).pos += length;
\r
44 }for (var i, $i = this.positions.keySet ().iterator (); $i.hasNext () && ((i = $i.next ()) || true);) {
\r
45 var pos = i.intValue ();
\r
46 if (pos <= offset) continue;
\r
47 if (pos >= offset + length) this.positions.get (i).pos -= length;
\r
48 else this.positions.get (i).pos = offset;
\r
51 Clazz.defineMethod (c$, "getFilterBypass",
\r
53 if (this.filterBypass == null) {
\r
54 this.filterBypass = Clazz.innerTypeInstance (swingjs.JSAbstractDocument.DefaultFilterBypass, this, null);
\r
55 }return this.filterBypass;
\r
57 Clazz.overrideMethod (c$, "remove",
\r
58 function (offs, len) {
\r
59 var filter = this.getDocumentFilter ();
\r
60 if (filter == null) this.handleRemove (offs, len);
\r
61 else filter.remove (this.getFilterBypass (), offs, len);
\r
63 Clazz.overrideMethod (c$, "insertString",
\r
64 function (offset, str, a) {
\r
65 var filter = this.getDocumentFilter ();
\r
66 if (filter == null) this.handleInsertString (offset, str, a);
\r
67 else filter.insertString (this.getFilterBypass (), offset, str, a);
\r
68 }, "~N,~S,javax.swing.text.AttributeSet");
\r
69 Clazz.overrideMethod (c$, "replace",
\r
70 function (offset, length, text, attrs) {
\r
71 if (length == 0 && (text == null || text.length == 0)) return;
\r
72 var filter = this.getDocumentFilter ();
\r
73 if (filter != null) {
\r
74 filter.replace (this.getFilterBypass (), offset, length, text, attrs);
\r
76 if (length > 0) this.remove (offset, length);
\r
77 if (text != null && text.length > 0) this.insertString (offset, text, attrs);
\r
78 }}, "~N,~N,~S,javax.swing.text.AttributeSet");
\r
79 Clazz.defineMethod (c$, "taint",
\r
81 this.tempChar = null;
\r
83 Clazz.defineMethod (c$, "setLines",
\r
85 this.root = Clazz.innerTypeInstance (swingjs.JSAbstractDocument.JSElement, this, null);
\r
86 var s = this.sb.toString ();
\r
87 if (s.lastIndexOf ('\n') != s.length - 1) s += "\n";
\r
89 for (var i = 0; i < s.length; i++) {
\r
90 if (s.charAt (i) != '\n') continue;
\r
91 var e = Clazz.innerTypeInstance (swingjs.JSAbstractDocument.JSElement, this, null);
\r
95 this.root.addChild (e);
\r
98 Clazz.defineMethod (c$, "handleInsertString",
\r
99 function (offs, str, a) {
\r
100 if ((str == null) || (str.length == 0)) {
\r
102 }this.checkLoc (offs, offs);
\r
104 this.sb.insert (offs, str);
\r
105 this.fixPositions (offs, str.length, true);
\r
106 if (str.indexOf ('\n') >= 0) this.setLines ();
\r
107 var e = new swingjs.JSDocumentEvent (this, offs, str.length, javax.swing.event.DocumentEvent.EventType.INSERT);
\r
108 this.fireInsertUpdate (e);
\r
109 }, "~N,~S,javax.swing.text.AttributeSet");
\r
110 Clazz.defineMethod (c$, "handleRemove",
\r
111 function (offs, len) {
\r
112 this.checkLoc (offs, offs + len);
\r
114 var str = this.sb.substring2 (offs, offs + len);
\r
115 this.sb.replace (offs, offs + len, "");
\r
116 this.fixPositions (offs, offs + len, false);
\r
117 if (str.indexOf ('\n') >= 0) this.setLines ();
\r
119 var chng = new swingjs.JSDocumentEvent (this, offs, len, javax.swing.event.DocumentEvent.EventType.REMOVE);
\r
120 this.fireRemoveUpdate (chng);
\r
122 Clazz.defineMethod (c$, "fireInsertUpdate",
\r
124 if (this.listenerList == null) return;
\r
125 this.checkAlreadyNotifying ();
\r
126 this.notifyingListeners = true;
\r
128 var listeners = this.listenerList.getListenerList ();
\r
129 for (var i = listeners.length - 2; i >= 0; i -= 2) {
\r
130 if (listeners[i] === javax.swing.event.DocumentListener) {
\r
131 (listeners[i + 1]).insertUpdate (e);
\r
134 this.notifyingListeners = false;
\r
136 }, "javax.swing.event.DocumentEvent");
\r
137 Clazz.defineMethod (c$, "fireChangedUpdate",
\r
139 if (this.listenerList == null) return;
\r
140 this.checkAlreadyNotifying ();
\r
141 this.notifyingListeners = true;
\r
143 var listeners = this.listenerList.getListenerList ();
\r
144 for (var i = listeners.length - 2; i >= 0; i -= 2) {
\r
145 if (listeners[i] === javax.swing.event.DocumentListener) {
\r
146 (listeners[i + 1]).changedUpdate (e);
\r
149 this.notifyingListeners = false;
\r
151 }, "javax.swing.event.DocumentEvent");
\r
152 Clazz.defineMethod (c$, "fireRemoveUpdate",
\r
154 if (this.listenerList == null) return;
\r
155 this.checkAlreadyNotifying ();
\r
156 this.notifyingListeners = true;
\r
158 var listeners = this.listenerList.getListenerList ();
\r
159 for (var i = listeners.length - 2; i >= 0; i -= 2) {
\r
160 if (listeners[i] === javax.swing.event.DocumentListener) {
\r
161 (listeners[i + 1]).removeUpdate (e);
\r
164 this.notifyingListeners = false;
\r
166 }, "javax.swing.event.DocumentEvent");
\r
167 Clazz.defineMethod (c$, "checkAlreadyNotifying",
\r
169 if (this.notifyingListeners) throw new IllegalStateException ("One of the document listeners modifed the document. This is not allowed.");
\r
171 Clazz.overrideMethod (c$, "addDocumentListener",
\r
172 function (listener) {
\r
173 if (this.listenerList == null) this.listenerList = new javax.swing.event.EventListenerList ();
\r
174 this.listenerList.add (javax.swing.event.DocumentListener, listener);
\r
175 }, "javax.swing.event.DocumentListener");
\r
176 Clazz.overrideMethod (c$, "removeDocumentListener",
\r
177 function (listener) {
\r
178 if (this.listenerList != null) this.listenerList.remove (javax.swing.event.DocumentListener, listener);
\r
179 }, "javax.swing.event.DocumentListener");
\r
180 Clazz.overrideMethod (c$, "addUndoableEditListener",
\r
181 function (listener) {
\r
182 }, "javax.swing.event.UndoableEditListener");
\r
183 Clazz.overrideMethod (c$, "removeUndoableEditListener",
\r
184 function (listener) {
\r
185 }, "javax.swing.event.UndoableEditListener");
\r
186 Clazz.overrideMethod (c$, "getProperty",
\r
188 return this.props.get (key);
\r
190 Clazz.overrideMethod (c$, "putProperty",
\r
191 function (key, value) {
\r
192 this.props.put (key, value);
\r
194 Clazz.overrideMethod (c$, "getAsynchronousLoadPriority",
\r
198 Clazz.overrideMethod (c$, "setDocumentFilter",
\r
199 function (filter) {
\r
200 this.filter = filter;
\r
201 }, "javax.swing.text.DocumentFilter");
\r
202 Clazz.defineMethod (c$, "getDocumentFilter",
\r
204 return this.filter;
\r
206 c$.$JSAbstractDocument$DefaultFilterBypass$ = function () {
\r
207 Clazz.pu$h(self.c$);
\r
208 c$ = Clazz.decorateAsClass (function () {
\r
209 Clazz.prepareCallback (this, arguments);
\r
210 Clazz.instantialize (this, arguments);
\r
211 }, swingjs.JSAbstractDocument, "DefaultFilterBypass", javax.swing.text.DocumentFilter.FilterBypass);
\r
212 Clazz.overrideMethod (c$, "getDocument",
\r
214 return this.b$["swingjs.JSAbstractDocument"].me;
\r
216 Clazz.overrideMethod (c$, "remove",
\r
218 this.b$["swingjs.JSAbstractDocument"].handleRemove (a, b);
\r
220 Clazz.overrideMethod (c$, "insertString",
\r
221 function (a, b, c) {
\r
222 this.b$["swingjs.JSAbstractDocument"].handleInsertString (a, b, c);
\r
223 }, "~N,~S,javax.swing.text.AttributeSet");
\r
224 Clazz.overrideMethod (c$, "replace",
\r
225 function (a, b, c, d) {
\r
226 this.b$["swingjs.JSAbstractDocument"].handleRemove (a, b);
\r
227 this.b$["swingjs.JSAbstractDocument"].handleInsertString (a, c, d);
\r
228 }, "~N,~N,~S,javax.swing.text.AttributeSet");
\r
231 c$.$JSAbstractDocument$JSElement$ = function () {
\r
232 Clazz.pu$h(self.c$);
\r
233 c$ = Clazz.decorateAsClass (function () {
\r
234 Clazz.prepareCallback (this, arguments);
\r
235 this.parent = null;
\r
236 this.attributeSet = null;
\r
239 this.nchildren = 0;
\r
240 this.children = null;
\r
241 this.lastIndex = 0;
\r
242 Clazz.instantialize (this, arguments);
\r
243 }, swingjs.JSAbstractDocument, "JSElement", null, javax.swing.text.Element);
\r
244 Clazz.makeConstructor (c$,
\r
246 this.children = null;
\r
247 this.nchildren = 0;
\r
248 this.lastIndex = -1;
\r
250 Clazz.defineMethod (c$, "addChild",
\r
252 if (this.children == null) this.children = new Array (10);
\r
253 else if (this.nchildren == this.children.length) this.children = JU.AU.doubleLength (this.children);
\r
254 this.children[this.nchildren++] = a;
\r
255 }, "swingjs.JSAbstractDocument.JSElement");
\r
256 Clazz.overrideMethod (c$, "getDocument",
\r
258 return this.b$["swingjs.JSAbstractDocument"].me;
\r
260 Clazz.overrideMethod (c$, "getParentElement",
\r
262 return this.parent;
\r
264 Clazz.overrideMethod (c$, "getName",
\r
266 return this.getName ();
\r
268 Clazz.overrideMethod (c$, "getAttributes",
\r
270 return this.attributeSet;
\r
272 Clazz.defineMethod (c$, "getStartOffset",
\r
276 Clazz.defineMethod (c$, "getEndOffset",
\r
280 Clazz.overrideMethod (c$, "getElementIndex",
\r
284 var d = this.nchildren - 1;
\r
286 var f = this.getStartOffset ();
\r
288 if (this.nchildren == 0) {
\r
290 }if (a >= this.getEndOffset ()) {
\r
291 return this.nchildren - 1;
\r
292 }if ((this.lastIndex >= c) && (this.lastIndex <= d)) {
\r
293 var h = this.children[this.lastIndex];
\r
294 f = h.getStartOffset ();
\r
295 g = h.getEndOffset ();
\r
296 if ((a >= f) && (a < g)) {
\r
297 return this.lastIndex;
\r
299 d = this.lastIndex;
\r
301 c = this.lastIndex;
\r
303 e = c + (Clazz.doubleToInt ((d - c) / 2));
\r
304 var h = this.children[e];
\r
305 f = h.getStartOffset ();
\r
306 g = h.getEndOffset ();
\r
307 if ((a >= f) && (a < g)) {
\r
309 this.lastIndex = b;
\r
311 } else if (a < f) {
\r
320 }this.lastIndex = b;
\r
323 Clazz.overrideMethod (c$, "getElementCount",
\r
325 return this.nchildren;
\r
327 Clazz.overrideMethod (c$, "getElement",
\r
329 return (a >= this.nchildren ? null : this.children[a]);
\r
331 Clazz.overrideMethod (c$, "isLeaf",
\r
333 return (this.parent != null);
\r
337 Clazz.defineStatics (c$,
\r
338 "ParagraphElementName", "paragraph",
\r
339 "ContentElementName", "content");
\r