-/**\r
-Copyright (c) 2013, Specialisterne.\r
-http://specialisterne.com/dk/\r
-All rights reserved.\r
-Authors:\r
-Jacob Christian Munch-Andersen\r
-\r
-Redistribution and use in source and binary forms, with or without\r
-modification, are permitted provided that the following conditions are met:\r
-\r
-1. Redistributions of source code must retain the above copyright notice, this\r
- list of conditions and the following disclaimer.\r
-2. Redistributions in binary form must reproduce the above copyright notice,\r
- this list of conditions and the following disclaimer in the documentation\r
- and/or other materials provided with the distribution.\r
-\r
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR\r
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
-**/\r
-// For information and latest version see: https://github.com/Jacob-Christian-Munch-Andersen/Easy-Deflate\r
-(function(){\r
-\r
-var zip={};\r
-function UTF8encode(str){\r
- var out=[];\r
- var a;\r
- var c,c2;\r
- for(a=0;a<str.length;a++){\r
- c=str.charCodeAt(a);\r
- if(c<128){\r
- out.push(c);\r
- }\r
- else if(c<2048){\r
- out.push((c >> 6)+192);\r
- out.push((c & 63)+128);\r
- }\r
- else if(c<65536){\r
- if(c>=0xD800 && c<0xDC00){\r
- a++;\r
- if(a>=str.length){\r
- return null;\r
- }\r
- c2=str.charCodeAt(a);\r
- if(c2>=0xDC00 && c2<0xE000){\r
- c=65536+(c-0xD800)*1024+c2-0xDC00;\r
- out.push((c >> 18)+240);\r
- out.push(((c >> 12) & 63)+128);\r
- out.push(((c >> 6) & 63)+128);\r
- out.push((c & 63)+128);\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- else if(c>=0xDC00 && c<0xE000){\r
- return null;\r
- }\r
- else{\r
- out.push((c >> 12)+224);\r
- out.push(((c >> 6) & 63)+128);\r
- out.push((c & 63)+128);\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- return new Uint8Array(out);\r
-}\r
-function UTF8decodeA(arrarr){\r
- var result="";\r
- var intermediate;\r
- var minvalue;\r
- var missing=0;\r
- var a,b;\r
- var arr;\r
- var c;\r
- var lower,upper;\r
- for(a=0;a<arrarr.length;a++){\r
- arr=arrarr[a];\r
- for(b=0;b<arr.length;b++){\r
- c=arr[b];\r
- if(missing){\r
- if(c>127 && c<192){\r
- intermediate=intermediate*64+c-128;\r
- missing--;\r
- if(!missing){\r
- if(intermediate>=minvalue){\r
- if(intermediate>=65536){\r
- if(intermediate>0x10FFFF){\r
- return null;\r
- }\r
- upper=(intermediate-65536)>>10;\r
- lower=intermediate%1024;\r
- result+=String.fromCharCode(upper+0xD800,lower+0xDC00);\r
- }\r
- else{\r
- result+=String.fromCharCode(intermediate);\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- else if(c<128){\r
- result+=String.fromCharCode(c);\r
- }\r
- else if(c>191 && c<248){\r
- if(c<224){\r
- intermediate=c-192;\r
- minvalue=128;\r
- missing=1;\r
- }\r
- else if(c<240){\r
- intermediate=c-224;\r
- minvalue=2048;\r
- missing=2;\r
- }\r
- else{\r
- intermediate=c-240;\r
- minvalue=65536;\r
- missing=3;\r
- }\r
- }\r
- else{\r
- return null;\r
- }\r
- }\r
- }\r
- if(missing){\r
- return null;\r
- }\r
- return result;\r
-}\r
-function deflate(str){\r
- var a,c;\r
- var readlen=50000;\r
- var resulta=[];\r
- var results="";\r
- var b,d;\r
- var zipper=new zip.Deflater(9);\r
- for(a=0;a<str.length;a+=readlen){\r
- d=UTF8encode(str.substr(a,readlen));\r
- if(d===null){ //This error may be due to a 4 byte charachter being split, retry with a string that is 1 longer to fix it.\r
- d=UTF8encode(str.substr(a,readlen+1));\r
- a+=1;\r
- if(d===null){\r
- return null;\r
- }\r
- }\r
- b=zipper.append(d);\r
- if(b.length!==0){\r
- resulta.push(b);\r
- }\r
- }\r
- b=zipper.flush();\r
- if(b.length!==0){\r
- resulta.push(b);\r
- }\r
- for(a=0;a<resulta.length;a++){\r
- for(c=0;c<resulta[a].length;c++){\r
- results+=String.fromCharCode(resulta[a][c]);\r
- }\r
- }\r
- return "rawdeflate,"+btoa(results);\r
-}\r
-function inflate(dfl){\r
- var unzipper=new zip.Inflater();\r
- var resulta=[];\r
- var dfls;\r
- var a,c;\r
- var b,d;\r
- if(dfl.slice(0,11)!="rawdeflate,"){\r
- return null;\r
- }\r
- try{\r
- dfls=atob(dfl.slice(11));\r
- }\r
- catch(e){\r
- return null;\r
- }\r
- try{\r
- for(a=0;a<dfls.length;a+=50000){\r
- b=new Uint8Array(Math.min(50000,dfls.length-a));\r
- for(c=0;c<b.length;c++){\r
- b[c]=dfls.charCodeAt(c+a);\r
- }\r
- d=unzipper.append(b);\r
- if(d.length){\r
- resulta.push(d);\r
- }\r
- }\r
- return UTF8decodeA(resulta);\r
- }\r
- catch(e){\r
- return null;\r
- }\r
-}\r
-\r
-window.EasyDeflate = {\r
- 'zip': zip,\r
- 'inflate': inflate,\r
- 'deflate': deflate\r
-};\r
-\r
-})();
\ No newline at end of file
+/**
+Copyright (c) 2013, Specialisterne.
+http://specialisterne.com/dk/
+All rights reserved.
+Authors:
+Jacob Christian Munch-Andersen
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**/
+// For information and latest version see: https://github.com/Jacob-Christian-Munch-Andersen/Easy-Deflate
+(function(){
+
+var zip={};
+function UTF8encode(str){
+ var out=[];
+ var a;
+ var c,c2;
+ for(a=0;a<str.length;a++){
+ c=str.charCodeAt(a);
+ if(c<128){
+ out.push(c);
+ }
+ else if(c<2048){
+ out.push((c >> 6)+192);
+ out.push((c & 63)+128);
+ }
+ else if(c<65536){
+ if(c>=0xD800 && c<0xDC00){
+ a++;
+ if(a>=str.length){
+ return null;
+ }
+ c2=str.charCodeAt(a);
+ if(c2>=0xDC00 && c2<0xE000){
+ c=65536+(c-0xD800)*1024+c2-0xDC00;
+ out.push((c >> 18)+240);
+ out.push(((c >> 12) & 63)+128);
+ out.push(((c >> 6) & 63)+128);
+ out.push((c & 63)+128);
+ }
+ else{
+ return null;
+ }
+ }
+ else if(c>=0xDC00 && c<0xE000){
+ return null;
+ }
+ else{
+ out.push((c >> 12)+224);
+ out.push(((c >> 6) & 63)+128);
+ out.push((c & 63)+128);
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ return new Uint8Array(out);
+}
+function UTF8decodeA(arrarr){
+ var result="";
+ var intermediate;
+ var minvalue;
+ var missing=0;
+ var a,b;
+ var arr;
+ var c;
+ var lower,upper;
+ for(a=0;a<arrarr.length;a++){
+ arr=arrarr[a];
+ for(b=0;b<arr.length;b++){
+ c=arr[b];
+ if(missing){
+ if(c>127 && c<192){
+ intermediate=intermediate*64+c-128;
+ missing--;
+ if(!missing){
+ if(intermediate>=minvalue){
+ if(intermediate>=65536){
+ if(intermediate>0x10FFFF){
+ return null;
+ }
+ upper=(intermediate-65536)>>10;
+ lower=intermediate%1024;
+ result+=String.fromCharCode(upper+0xD800,lower+0xDC00);
+ }
+ else{
+ result+=String.fromCharCode(intermediate);
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ else if(c<128){
+ result+=String.fromCharCode(c);
+ }
+ else if(c>191 && c<248){
+ if(c<224){
+ intermediate=c-192;
+ minvalue=128;
+ missing=1;
+ }
+ else if(c<240){
+ intermediate=c-224;
+ minvalue=2048;
+ missing=2;
+ }
+ else{
+ intermediate=c-240;
+ minvalue=65536;
+ missing=3;
+ }
+ }
+ else{
+ return null;
+ }
+ }
+ }
+ if(missing){
+ return null;
+ }
+ return result;
+}
+function deflate(str){
+ var a,c;
+ var readlen=50000;
+ var resulta=[];
+ var results="";
+ var b,d;
+ var zipper=new zip.Deflater(9);
+ for(a=0;a<str.length;a+=readlen){
+ d=UTF8encode(str.substr(a,readlen));
+ if(d===null){ //This error may be due to a 4 byte charachter being split, retry with a string that is 1 longer to fix it.
+ d=UTF8encode(str.substr(a,readlen+1));
+ a+=1;
+ if(d===null){
+ return null;
+ }
+ }
+ b=zipper.append(d);
+ if(b.length!==0){
+ resulta.push(b);
+ }
+ }
+ b=zipper.flush();
+ if(b.length!==0){
+ resulta.push(b);
+ }
+ for(a=0;a<resulta.length;a++){
+ for(c=0;c<resulta[a].length;c++){
+ results+=String.fromCharCode(resulta[a][c]);
+ }
+ }
+ return "rawdeflate,"+btoa(results);
+}
+function inflate(dfl){
+ var unzipper=new zip.Inflater();
+ var resulta=[];
+ var dfls;
+ var a,c;
+ var b,d;
+ if(dfl.slice(0,11)!="rawdeflate,"){
+ return null;
+ }
+ try{
+ dfls=atob(dfl.slice(11));
+ }
+ catch(e){
+ return null;
+ }
+ try{
+ for(a=0;a<dfls.length;a+=50000){
+ b=new Uint8Array(Math.min(50000,dfls.length-a));
+ for(c=0;c<b.length;c++){
+ b[c]=dfls.charCodeAt(c+a);
+ }
+ d=unzipper.append(b);
+ if(d.length){
+ resulta.push(d);
+ }
+ }
+ return UTF8decodeA(resulta);
+ }
+ catch(e){
+ return null;
+ }
+}
+
+window.EasyDeflate = {
+ 'zip': zip,
+ 'inflate': inflate,
+ 'deflate': deflate
+};
+
+})();