Merge "MapCacheLRU: Fix a typo in a comment"
[lhc/web/wiklou.git] / resources / lib / easy-deflate / easydeflate.js
index 342229e..0bb8e48 100644 (file)
-/**\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
+};
+
+})();