X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=site%2Fj2s%2Fjava%2Flang%2FEncoding.js;h=10423e2d36ae6cda9d3c668202b59fedc391cae9;hp=1a64ca3e03b5e563a4fe03373af449fbc674da37;hb=b9b7a352eee79b7764c3b09c9d19663075061d8c;hpb=7301a2415adab88038b291fc54caeeb3a5a47a44 diff --git a/site/j2s/java/lang/Encoding.js b/site/j2s/java/lang/Encoding.js index 1a64ca3..10423e2 100644 --- a/site/j2s/java/lang/Encoding.js +++ b/site/j2s/java/lang/Encoding.js @@ -1,151 +1,151 @@ -Encoding = new Object(); -Encoding.UTF8 = "utf-8"; -Encoding.UTF16 = "utf-16"; -Encoding.ASCII = "ascii"; - -/* protected */ -Encoding.guessEncoding = function (str) { - if (str.charCodeAt(0) == 0xEF && str.charCodeAt(1) == 0xBB && str.charCodeAt(2) == 0xBF) { - return Encoding.UTF8; - } else if (str.charCodeAt(0) == 0xFF && str.charCodeAt(1) == 0xFE) { - return Encoding.UTF16; - } else { - return Encoding.ASCII; - } -}; -/* public */ -Encoding.readUTF8 = function (str) { - var encoding = this.guessEncoding(str); - var startIdx = 0; - if (encoding == Encoding.UTF8) { - startIdx = 3; - } else if (encoding == Encoding.UTF16) { - startIdx = 2; - } - var arrs = new Array(); - for (var i = startIdx; i < str.length; i++) { - var charCode = str.charCodeAt(i); - if (charCode < 0x80) { - arrs[arrs.length] = str.charAt(i); - } else if (charCode > 0xc0 && charCode < 0xe0) { - var c1 = charCode & 0x1f; - i++; - var c2 = str.charCodeAt(i) & 0x3f; - var c = (c1 << 6) + c2; - arrs[arrs.length] = String.fromCharCode(c); - } else if (charCode >= 0xe0) { - var c1 = charCode & 0x0f; - i++; - var c2 = str.charCodeAt(i) & 0x3f; - i++; - var c3 = str.charCodeAt(i) & 0x3f; - var c = (c1 << 12) + (c2 << 6) + c3; - arrs[arrs.length] = String.fromCharCode(c); - } - } - return arrs.join (''); -}; -/* public */ -Encoding.convert2UTF8 = function (str) { - var encoding = this.guessEncoding(str); - var startIdx = 0; - if (encoding == Encoding.UTF8) { - return str; - } else if (encoding == Encoding.UTF16) { - startIdx = 2; - } - - var offset = 0; - var arrs = new Array(offset + str.length - startIdx); - /* - arrs[0] = String.fromCharCode(0xEF).charAt(0); - arrs[1] = String.fromCharCode(0xBB).charAt(0); - arrs[2] = String.fromCharCode(0xBF).charAt(0); - */ - for (var i = startIdx; i < str.length; i++) { - var charCode = str.charCodeAt(i); - if (charCode < 0x80) { - arrs[offset + i - startIdx] = str.charAt(i); - } else if (charCode <= 0x07ff) { //(charCode > 0xc0 && charCode < 0xe0) { - var c1 = 0xc0 + ((charCode & 0x07c0) >> 6); - var c2 = 0x80 + (charCode & 0x003f); - arrs[offset + i - startIdx] = String.fromCharCode(c1) + String.fromCharCode(c2); - } else { - var c1 = 0xe0 + ((charCode & 0xf000) >> 12); - var c2 = 0x80 + ((charCode & 0x0fc0) >> 6); - var c3 = 0x80 + (charCode & 0x003f); - arrs[offset + i - startIdx] = String.fromCharCode(c1) + String.fromCharCode(c2) + String.fromCharCode(c3); - } - } - return arrs.join (''); -}; -Encoding.base64Chars = new Array( - 'A','B','C','D','E','F','G','H', - 'I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X', - 'Y','Z','a','b','c','d','e','f', - 'g','h','i','j','k','l','m','n', - 'o','p','q','r','s','t','u','v', - 'w','x','y','z','0','1','2','3', - '4','5','6','7','8','9','+','/' -); -Encoding.encodeBase64 = function (str) { - if (str == null || str.length == 0) return str; - var b64 = Encoding.base64Chars; - var length = str.length; - var index = 0; - var buf = []; - var c0, c1, c2; - while (index < length) { - c0 = str.charCodeAt (index++); - buf[buf.length] = b64[c0 >> 2]; - if (index < length) { - c1 = str.charCodeAt (index++); - buf[buf.length] = b64[((c0 << 4 ) & 0x30) | (c1 >> 4)]; - if (index < length){ - c2 = str.charCodeAt (index++); - buf[buf.length] = b64[((c1 << 2) & 0x3c) | (c2 >> 6)]; - buf[buf.length] = b64[c2 & 0x3F]; - } else { - buf[buf.length] = b64[((c1 << 2) & 0x3c)]; - buf[buf.length] = '='; - } - } else { - buf[buf.length] = b64[(c0 << 4) & 0x30]; - buf[buf.length] = '='; - buf[buf.length] = '='; - } - } - return buf.join (''); -}; -Encoding.decodeBase64 = function (str) { - if (str == null || str.length == 0) return str; - var b64 = Encoding.base64Chars; - var xb64 = Encoding.xBase64Chars; - if (Encoding.xBase64Chars == null) { - xb64 = new Object(); - for (var i = 0; i < b64.length; i++){ - xb64[b64[i]] = i; - } - Encoding.xBase64Chars = xb64; - } - var length = str.length; - var index = 0; - var buf = []; - var c0, c1, c2, c3; - var c = 0; - while (index < length && c++ < 60000) { - c0 = xb64[str.charAt (index++)]; - c1 = xb64[str.charAt (index++)]; - c2 = xb64[str.charAt (index++)]; - c3 = xb64[str.charAt (index++)]; - buf[buf.length] = String.fromCharCode(((c0 << 2) & 0xff) | c1 >> 4); - if (c2 != null) { - buf[buf.length] = String.fromCharCode(((c1 << 4) & 0xff) | c2 >> 2); - if (c3 != null) { - buf[buf.length] = String.fromCharCode(((c2 << 6) & 0xff) | c3); - } - } - } - return buf.join (''); -}; +Encoding = new Object(); +Encoding.UTF8 = "utf-8"; +Encoding.UTF16 = "utf-16"; +Encoding.ASCII = "ascii"; + +/* protected */ +Encoding.guessEncoding = function (str) { + if (str.charCodeAt(0) == 0xEF && str.charCodeAt(1) == 0xBB && str.charCodeAt(2) == 0xBF) { + return Encoding.UTF8; + } else if (str.charCodeAt(0) == 0xFF && str.charCodeAt(1) == 0xFE) { + return Encoding.UTF16; + } else { + return Encoding.ASCII; + } +}; +/* public */ +Encoding.readUTF8 = function (str) { + var encoding = this.guessEncoding(str); + var startIdx = 0; + if (encoding == Encoding.UTF8) { + startIdx = 3; + } else if (encoding == Encoding.UTF16) { + startIdx = 2; + } + var arrs = new Array(); + for (var i = startIdx; i < str.length; i++) { + var charCode = str.charCodeAt(i); + if (charCode < 0x80) { + arrs[arrs.length] = str.charAt(i); + } else if (charCode > 0xc0 && charCode < 0xe0) { + var c1 = charCode & 0x1f; + i++; + var c2 = str.charCodeAt(i) & 0x3f; + var c = (c1 << 6) + c2; + arrs[arrs.length] = String.fromCharCode(c); + } else if (charCode >= 0xe0) { + var c1 = charCode & 0x0f; + i++; + var c2 = str.charCodeAt(i) & 0x3f; + i++; + var c3 = str.charCodeAt(i) & 0x3f; + var c = (c1 << 12) + (c2 << 6) + c3; + arrs[arrs.length] = String.fromCharCode(c); + } + } + return arrs.join (''); +}; +/* public */ +Encoding.convert2UTF8 = function (str) { + var encoding = this.guessEncoding(str); + var startIdx = 0; + if (encoding == Encoding.UTF8) { + return str; + } else if (encoding == Encoding.UTF16) { + startIdx = 2; + } + + var offset = 0; + var arrs = new Array(offset + str.length - startIdx); + /* + arrs[0] = String.fromCharCode(0xEF).charAt(0); + arrs[1] = String.fromCharCode(0xBB).charAt(0); + arrs[2] = String.fromCharCode(0xBF).charAt(0); + */ + for (var i = startIdx; i < str.length; i++) { + var charCode = str.charCodeAt(i); + if (charCode < 0x80) { + arrs[offset + i - startIdx] = str.charAt(i); + } else if (charCode <= 0x07ff) { //(charCode > 0xc0 && charCode < 0xe0) { + var c1 = 0xc0 + ((charCode & 0x07c0) >> 6); + var c2 = 0x80 + (charCode & 0x003f); + arrs[offset + i - startIdx] = String.fromCharCode(c1) + String.fromCharCode(c2); + } else { + var c1 = 0xe0 + ((charCode & 0xf000) >> 12); + var c2 = 0x80 + ((charCode & 0x0fc0) >> 6); + var c3 = 0x80 + (charCode & 0x003f); + arrs[offset + i - startIdx] = String.fromCharCode(c1) + String.fromCharCode(c2) + String.fromCharCode(c3); + } + } + return arrs.join (''); +}; +Encoding.base64Chars = new Array( + 'A','B','C','D','E','F','G','H', + 'I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X', + 'Y','Z','a','b','c','d','e','f', + 'g','h','i','j','k','l','m','n', + 'o','p','q','r','s','t','u','v', + 'w','x','y','z','0','1','2','3', + '4','5','6','7','8','9','+','/' +); +Encoding.encodeBase64 = function (str) { + if (str == null || str.length == 0) return str; + var b64 = Encoding.base64Chars; + var length = str.length; + var index = 0; + var buf = []; + var c0, c1, c2; + while (index < length) { + c0 = str.charCodeAt (index++); + buf[buf.length] = b64[c0 >> 2]; + if (index < length) { + c1 = str.charCodeAt (index++); + buf[buf.length] = b64[((c0 << 4 ) & 0x30) | (c1 >> 4)]; + if (index < length){ + c2 = str.charCodeAt (index++); + buf[buf.length] = b64[((c1 << 2) & 0x3c) | (c2 >> 6)]; + buf[buf.length] = b64[c2 & 0x3F]; + } else { + buf[buf.length] = b64[((c1 << 2) & 0x3c)]; + buf[buf.length] = '='; + } + } else { + buf[buf.length] = b64[(c0 << 4) & 0x30]; + buf[buf.length] = '='; + buf[buf.length] = '='; + } + } + return buf.join (''); +}; +Encoding.decodeBase64 = function (str) { + if (str == null || str.length == 0) return str; + var b64 = Encoding.base64Chars; + var xb64 = Encoding.xBase64Chars; + if (Encoding.xBase64Chars == null) { + xb64 = new Object(); + for (var i = 0; i < b64.length; i++){ + xb64[b64[i]] = i; + } + Encoding.xBase64Chars = xb64; + } + var length = str.length; + var index = 0; + var buf = []; + var c0, c1, c2, c3; + var c = 0; + while (index < length && c++ < 60000) { + c0 = xb64[str.charAt (index++)]; + c1 = xb64[str.charAt (index++)]; + c2 = xb64[str.charAt (index++)]; + c3 = xb64[str.charAt (index++)]; + buf[buf.length] = String.fromCharCode(((c0 << 2) & 0xff) | c1 >> 4); + if (c2 != null) { + buf[buf.length] = String.fromCharCode(((c1 << 4) & 0xff) | c2 >> 2); + if (c3 != null) { + buf[buf.length] = String.fromCharCode(((c2 << 6) & 0xff) | c3); + } + } + } + return buf.join (''); +};