| Clazz.load (["java.io.Reader"], "java.io.InputStreamReader", ["java.lang.NullPointerException"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.$in = null; | |
| this.isOpen = true; | |
| this.charsetName = null; | |
| this.isUTF8 = false; | |
| this.bytearr = null; | |
| this.pos = 0; | |
| Clazz.instantialize (this, arguments); | |
| }, java.io, "InputStreamReader", java.io.Reader); | |
| Clazz.makeConstructor (c$, | |
| function ($in, charsetName) { | |
| Clazz.superConstructor (this, java.io.InputStreamReader, [$in]); | |
| this.$in = $in; | |
| this.charsetName = charsetName; | |
| if (!(this.isUTF8 = "UTF-8".equals (charsetName)) && !"ISO-8859-1".equals (charsetName)) throw new NullPointerException ("charsetName"); | |
| }, "java.io.InputStream,~S"); | |
| Clazz.defineMethod (c$, "getEncoding", | |
| function () { | |
| return this.charsetName; | |
| }); | |
| Clazz.overrideMethod (c$, "read", | |
| function (cbuf, offset, length) { | |
| if (this.bytearr == null || this.bytearr.length < length) this.bytearr = Clazz.newByteArray (length, 0); | |
| var c; | |
| var char2; | |
| var char3; | |
| var byteCount = 0; | |
| var charCount = offset; | |
| var byteLen = this.$in.read (this.bytearr, this.pos, length - this.pos); | |
| var nAvail = this.$in.available (); | |
| if (byteLen < 0) return -1; | |
| var nMax = byteLen; | |
| while (byteCount < nMax) { | |
| c = this.bytearr[byteCount] & 0xff; | |
| if (this.isUTF8) switch (c >> 4) { | |
| case 0xC: | |
| case 0xD: | |
| if (byteCount + 1 >= byteLen) { | |
| if (nAvail >= 1) { | |
| nMax = byteCount; | |
| continue; | |
| }} else if (((char2 = this.bytearr[byteCount + 1]) & 0xC0) == 0x80) { | |
| cbuf[charCount++] = String.fromCharCode (((c & 0x1F) << 6) | (char2 & 0x3F)); | |
| byteCount += 2; | |
| continue; | |
| }this.isUTF8 = false; | |
| break; | |
| case 0xE: | |
| if (byteCount + 2 >= byteLen) { | |
| if (nAvail >= 2) { | |
| nMax = byteCount; | |
| continue; | |
| }} else if (((char2 = this.bytearr[byteCount + 1]) & 0xC0) == 0x80 && ((char3 = this.bytearr[byteCount + 2]) & 0xC0) == 0x80) { | |
| cbuf[charCount++] = String.fromCharCode (((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | (char3 & 0x3F)); | |
| byteCount += 3; | |
| continue; | |
| }this.isUTF8 = false; | |
| break; | |
| } | |
| byteCount++; | |
| cbuf[charCount++] = String.fromCharCode (c); | |
| } | |
| this.pos = byteLen - byteCount; | |
| for (var i = 0; i < this.pos; i++) { | |
| this.bytearr[i] = this.bytearr[byteCount++]; | |
| } | |
| return charCount - offset; | |
| }, "~A,~N,~N"); | |
| Clazz.overrideMethod (c$, "ready", | |
| function () { | |
| return this.isOpen; | |
| }); | |
| Clazz.overrideMethod (c$, "close", | |
| function () { | |
| this.$in.close (); | |
| this.isOpen = false; | |
| }); | |
| }); | |