diff --git a/LZCompressor/LZContext.php b/LZCompressor/LZContext.php deleted file mode 100644 index 413bb8b..0000000 --- a/LZCompressor/LZContext.php +++ /dev/null @@ -1,91 +0,0 @@ -data = new LZData; - } - - // Helper - - /** - * @param string $val - * @return bool - */ - public function dictionaryContains($val) { - return array_key_exists($val, $this->dictionary); - } - - /** - * @param $val - */ - public function addToDictionary($val) { - $this->dictionary[$val] = $this->dictSize++; - } - - /** - * @param string $val - * @return bool - */ - public function dictionaryToCreateContains($val) { - return array_key_exists($val, $this->dictionaryToCreate); - } - - /** - * decrements enlargeIn and extends numbits in case enlargeIn drops to 0 - */ - public function enlargeIn() { - $this->enlargeIn--; - if($this->enlargeIn==0) { - $this->enlargeIn = pow(2, $this->numBits); - $this->numBits++; - } - } -} diff --git a/LZCompressor/LZData.php b/LZCompressor/LZData.php deleted file mode 100644 index b536ce1..0000000 --- a/LZCompressor/LZData.php +++ /dev/null @@ -1,29 +0,0 @@ -str .= $str; - } -} diff --git a/LZCompressor/LZReverseDictionary.php b/LZCompressor/LZReverseDictionary.php deleted file mode 100644 index 54780f2..0000000 --- a/LZCompressor/LZReverseDictionary.php +++ /dev/null @@ -1,33 +0,0 @@ -entries); - } - - public function hasEntry($index) { - return array_key_exists($index, $this->entries); - } - - public function getEntry($index) { - return $this->entries[$index]; - } - - public function addEntry($char) { - $this->entries[] = $char; - } - -} \ No newline at end of file diff --git a/LZCompressor/LZString.php b/LZCompressor/LZString.php deleted file mode 100644 index 5045ab5..0000000 --- a/LZCompressor/LZString.php +++ /dev/null @@ -1,298 +0,0 @@ -c = LZUtil::utf8_charAt($uncompressed, $ii); - if(!$context->dictionaryContains($context->c)) { - $context->addToDictionary($context->c); - $context->dictionaryToCreate[$context->c] = true; - } - $context->wc = $context->w . $context->c; - if($context->dictionaryContains($context->wc)) { - $context->w = $context->wc; - } else { - self::produceW($context, $bitsPerChar, $getCharFromInt); - } - } - if($context->w !== '') { - self::produceW($context, $bitsPerChar, $getCharFromInt); - } - - $value = 2; - for($i=0; $i<$context->numBits; $i++) { - self::writeBit($value&1, $context->data, $bitsPerChar, $getCharFromInt); - $value = $value >> 1; - } - - while (true) { - $context->data->val = $context->data->val << 1; - if ($context->data->position == ($bitsPerChar-1)) { - $context->data->append($getCharFromInt($context->data->val)); - break; - } - $context->data->position++; - } - - return $context->data->str; - } - - /** - * @param LZContext $context - * @param integer $bitsPerChar - * @param callable $getCharFromInt - * - * @return LZContext - */ - private static function produceW(LZContext $context, $bitsPerChar, $getCharFromInt) - { - if($context->dictionaryToCreateContains($context->w)) { - if(LZUtil::charCodeAt($context->w)<256) { - for ($i=0; $i<$context->numBits; $i++) { - self::writeBit(null, $context->data, $bitsPerChar, $getCharFromInt); - } - $value = LZUtil::charCodeAt($context->w); - for ($i=0; $i<8; $i++) { - self::writeBit($value&1, $context->data, $bitsPerChar, $getCharFromInt); - $value = $value >> 1; - } - } else { - $value = 1; - for ($i=0; $i<$context->numBits; $i++) { - self::writeBit($value, $context->data, $bitsPerChar, $getCharFromInt); - $value = 0; - } - $value = LZUtil::charCodeAt($context->w); - for ($i=0; $i<16; $i++) { - self::writeBit($value&1, $context->data, $bitsPerChar, $getCharFromInt); - $value = $value >> 1; - } - } - $context->enlargeIn(); - unset($context->dictionaryToCreate[$context->w]); - } else { - $value = $context->dictionary[$context->w]; - for ($i=0; $i<$context->numBits; $i++) { - self::writeBit($value&1, $context->data, $bitsPerChar, $getCharFromInt); - $value = $value >> 1; - } - } - $context->enlargeIn(); - $context->addToDictionary($context->wc); - $context->w = $context->c.''; - } - - /** - * @param string $value - * @param LZData $data - * @param integer $bitsPerChar - * @param callable $getCharFromInt - */ - private static function writeBit($value, LZData $data, $bitsPerChar, $getCharFromInt) - { - if(null !== $value) { - $data->val = ($data->val << 1) | $value; - } else { - $data->val = ($data->val << 1); - } - if ($data->position == ($bitsPerChar-1)) { - $data->position = 0; - $data->append($getCharFromInt($data->val)); - $data->val = 0; - } else { - $data->position++; - } - } - - /** - * @param LZData $data - * @param integer $resetValue - * @param callable $getNextValue - * @param integer $exponent - * @param string $feed - * @return integer - */ - private static function readBits(LZData $data, $resetValue, $getNextValue, $feed, $exponent) - { - $bits = 0; - $maxPower = pow(2, $exponent); - $power=1; - while($power != $maxPower) { - $resb = $data->val & $data->position; - $data->position >>= 1; - if ($data->position == 0) { - $data->position = $resetValue; - $data->val = $getNextValue($feed, $data->index++); - } - $bits |= (($resb>0 ? 1 : 0) * $power); - $power <<= 1; - } - return $bits; - } - - /** - * @param string $compressed - * @param integer $resetValue - * @param callable $getNextValue - * @return string - */ - private static function _decompress($compressed, $resetValue, $getNextValue) - { - if(!is_string($compressed) || strlen($compressed) === 0) { - return ''; - } - - $length = LZUtil::utf8_strlen($compressed); - $entry = null; - $enlargeIn = 4; - $numBits = 3; - $result = ''; - - $dictionary = new LZReverseDictionary(); - - $data = new LZData(); - $data->str = $compressed; - $data->val = $getNextValue($compressed, 0); - $data->position = $resetValue; - $data->index = 1; - - $next = self::readBits($data, $resetValue, $getNextValue, $compressed, 2); - - if($next < 0 || $next > 1) { - return ''; - } - - $exponent = ($next == 0) ? 8 : 16; - $bits = self::readBits($data, $resetValue, $getNextValue, $compressed, $exponent); - - $c = LZUtil::fromCharCode($bits); - $dictionary->addEntry($c); - $w = $c; - - $result .= $c; - - while(true) { - if($data->index > $length) { - return ''; - } - $bits = self::readBits($data, $resetValue, $getNextValue, $compressed, $numBits); - - $c = $bits; - - switch($c) { - case 0: - $bits = self::readBits($data, $resetValue, $getNextValue, $compressed, 8); - $c = $dictionary->size(); - $dictionary->addEntry(LZUtil::fromCharCode($bits)); - $enlargeIn--; - break; - case 1: - $bits = self::readBits($data, $resetValue, $getNextValue, $compressed, 16); - $c = $dictionary->size(); - $dictionary->addEntry(LZUtil::fromCharCode($bits)); - $enlargeIn--; - break; - case 2: - return $result; - break; - } - - if($enlargeIn == 0) { - $enlargeIn = pow(2, $numBits); - $numBits++; - } - - if($dictionary->hasEntry($c)) { - $entry = $dictionary->getEntry($c); - } - else { - if ($c == $dictionary->size()) { - $entry = $w . $w{0}; - } else { - return null; - } - } - - $result .= $entry; - $dictionary->addEntry($w . LZUtil::utf8_charAt($entry, 0)); - $w = $entry; - - $enlargeIn--; - if($enlargeIn == 0) { - $enlargeIn = pow(2, $numBits); - $numBits++; - } - } - } -} diff --git a/LZCompressor/LZUtil.php b/LZCompressor/LZUtil.php deleted file mode 100644 index a0599b2..0000000 --- a/LZCompressor/LZUtil.php +++ /dev/null @@ -1,110 +0,0 @@ - 1) return ($h & 0x1F) << 6 | (ord($ch{1}) & 0x3F); - if ($h <= 0xEF && $len > 2) return ($h & 0x0F) << 12 | (ord($ch{1}) & 0x3F) << 6 | (ord($ch{2}) & 0x3F); - if ($h <= 0xF4 && $len > 3) - return ($h & 0x0F) << 18 | (ord($ch{1}) & 0x3F) << 12 | (ord($ch{2}) & 0x3F) << 6 | (ord($ch{3}) & 0x3F); - return -2; - } - - /** - * @param string $str - * @param integer $num - * - * @return string - */ - public static function utf8_charAt($str, $num) - { - return mb_substr($str, $num, 1, 'UTF-8'); - } - - /** - * @param string $str - * @return integer - */ - public static function utf8_strlen($str) { - return mb_strlen($str, 'UTF-8'); - } -} \ No newline at end of file diff --git a/LZCompressor/LZUtil16.php b/LZCompressor/LZUtil16.php deleted file mode 100644 index b38ac24..0000000 --- a/LZCompressor/LZUtil16.php +++ /dev/null @@ -1,90 +0,0 @@ -e;e++){var s=r.charCodeAt(e);n[2*e]=s>>>8,n[2*e+1]=s%256}return n},decompressFromUint8Array:function(o){if(null===o||void 0===o)return i.decompress(o);for(var n=new Array(o.length/2),e=0,t=n.length;t>e;e++)n[e]=256*o[2*e]+o[2*e+1];var s=[];return n.forEach(function(o){s.push(r(o))}),i.decompress(s.join(""))},compressToEncodedURIComponent:function(o){return null==o?"":i._compress(o,6,function(o){return e.charAt(o)})},decompressFromEncodedURIComponent:function(r){return null==r?"":""==r?null:(r=r.replace(/ /g,"+"),i._decompress(r.length,32,function(n){return o(e,r.charAt(n))}))},compress:function(o){return i._compress(o,16,function(o){return r(o)})},_compress:function(o,r,n){if(null==o)return"";var e,t,i,s={},p={},u="",c="",a="",l=2,f=3,h=2,d=[],m=0,v=0;for(i=0;ie;e++)m<<=1,v==r-1?(v=0,d.push(n(m)),m=0):v++;for(t=a.charCodeAt(0),e=0;8>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;h>e;e++)m=m<<1|t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=a.charCodeAt(0),e=0;16>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}l--,0==l&&(l=Math.pow(2,h),h++),delete p[a]}else for(t=s[a],e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;l--,0==l&&(l=Math.pow(2,h),h++),s[c]=f++,a=String(u)}if(""!==a){if(Object.prototype.hasOwnProperty.call(p,a)){if(a.charCodeAt(0)<256){for(e=0;h>e;e++)m<<=1,v==r-1?(v=0,d.push(n(m)),m=0):v++;for(t=a.charCodeAt(0),e=0;8>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}else{for(t=1,e=0;h>e;e++)m=m<<1|t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t=0;for(t=a.charCodeAt(0),e=0;16>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1}l--,0==l&&(l=Math.pow(2,h),h++),delete p[a]}else for(t=s[a],e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;l--,0==l&&(l=Math.pow(2,h),h++)}for(t=2,e=0;h>e;e++)m=m<<1|1&t,v==r-1?(v=0,d.push(n(m)),m=0):v++,t>>=1;for(;;){if(m<<=1,v==r-1){d.push(n(m));break}v++}return d.join("")},decompress:function(o){return null==o?"":""==o?null:i._decompress(o.length,32768,function(r){return o.charCodeAt(r)})},_decompress:function(o,n,e){var t,i,s,p,u,c,a,l,f=[],h=4,d=4,m=3,v="",w=[],A={val:e(0),position:n,index:1};for(i=0;3>i;i+=1)f[i]=i;for(p=0,c=Math.pow(2,2),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;switch(t=p){case 0:for(p=0,c=Math.pow(2,8),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;l=r(p);break;case 1:for(p=0,c=Math.pow(2,16),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;l=r(p);break;case 2:return""}for(f[3]=l,s=l,w.push(l);;){if(A.index>o)return"";for(p=0,c=Math.pow(2,m),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;switch(l=p){case 0:for(p=0,c=Math.pow(2,8),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;f[d++]=r(p),l=d-1,h--;break;case 1:for(p=0,c=Math.pow(2,16),a=1;a!=c;)u=A.val&A.position,A.position>>=1,0==A.position&&(A.position=n,A.val=e(A.index++)),p|=(u>0?1:0)*a,a<<=1;f[d++]=r(p),l=d-1,h--;break;case 2:return w.join("")}if(0==h&&(h=Math.pow(2,m),m++),f[l])v=f[l];else{if(l!==d)return null;v=s+s.charAt(0)}w.push(v),f[d++]=s+v.charAt(0),h--,s=v,0==h&&(h=Math.pow(2,m),m++)}}};return i}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module&&(module.exports=LZString); \ No newline at end of file