97 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| //
 | |
| //  FPDI - Version 1.1
 | |
| //
 | |
| //    Copyright 2004,2005 Setasign - Jan Slabon
 | |
| //
 | |
| //  Licensed under the Apache License, Version 2.0 (the "License");
 | |
| //  you may not use this file except in compliance with the License.
 | |
| //  You may obtain a copy of the License at
 | |
| //
 | |
| //      http://www.apache.org/licenses/LICENSE-2.0
 | |
| //
 | |
| //  Unless required by applicable law or agreed to in writing, software
 | |
| //  distributed under the License is distributed on an "AS IS" BASIS,
 | |
| //  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
| //  See the License for the specific language governing permissions and
 | |
| //  limitations under the License.
 | |
| //
 | |
| 
 | |
| if (!defined("ORD_z"))
 | |
| 	define("ORD_z",ord('z'));
 | |
| if (!defined("ORD_!"))
 | |
| 	define("ORD_exclmark", ord('!'));
 | |
| if (!defined("ORD_u"))	
 | |
| 	define("ORD_u", ord("u"));
 | |
| if (!defined("ORD_tilde"))
 | |
| 	define("ORD_tilde", ord('~'));
 | |
| 
 | |
| class ASCII85Decode {
 | |
| 
 | |
|     function ASCII85Decode(&$fpdi) {
 | |
|         $this->fpdi =& $fpdi;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     function decode($in) {
 | |
|         $out = "";
 | |
|         $state = 0;
 | |
|         $chn = null;
 | |
|         
 | |
|         $l = strlen($in);
 | |
|         
 | |
|         for ($k = 0; $k < $l; ++$k) {
 | |
|             $ch = ord($in[$k]) & 0xff;
 | |
|             
 | |
|             if ($ch == ORD_tilde) {
 | |
|                 break;
 | |
|             }
 | |
|             if (preg_match("/^\s$/",chr($ch))) {
 | |
|                 continue;
 | |
|             }
 | |
|             if ($ch == ORD_z && $state == 0) {
 | |
|                 $out .= chr(0).chr(0).chr(0).chr(0);
 | |
|                 continue;
 | |
|             }
 | |
|             if ($ch < ORD_exclmark || $ch > ORD_u) {
 | |
|                 $this->fpdi->error("Illegal character in ASCII85Decode.");
 | |
|             }
 | |
|             
 | |
|             $chn[$state++] = $ch - ORD_exclmark;
 | |
|             
 | |
|             if ($state == 5) {
 | |
|                 $state = 0;
 | |
|                 $r = 0;
 | |
|                 for ($j = 0; $j < 5; ++$j)
 | |
|                     $r = $r * 85 + $chn[$j];
 | |
|                 $out .= chr($r >> 24);
 | |
|                 $out .= chr($r >> 16);
 | |
|                 $out .= chr($r >> 8);
 | |
|                 $out .= chr($r);
 | |
|             }
 | |
|         }
 | |
|         $r = 0;
 | |
|         
 | |
|         if ($state == 1)
 | |
|             $this->fpdi->error("Illegal length in ASCII85Decode.");
 | |
|         if ($state == 2) {
 | |
|             $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85;
 | |
|             $out .= chr($r >> 24);
 | |
|         }
 | |
|         else if ($state == 3) {
 | |
|             $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85  + ($chn[2]+1) * 85 * 85;
 | |
|             $out .= chr($r >> 24);
 | |
|             $out .= chr($r >> 16);
 | |
|         }
 | |
|         else if ($state == 4) {
 | |
|             $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85  + $chn[2] * 85 * 85  + ($chn[3]+1) * 85 ;
 | |
|             $out .= chr($r >> 24);
 | |
|             $out .= chr($r >> 16);
 | |
|             $out .= chr($r >> 8);
 | |
|         }
 | |
| 
 | |
|         return $out;
 | |
|     }
 | |
| }
 | |
| 
 | |
| ?>
 |