--- /dev/null
+<?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;
+ }
+}
+
+?>
\ No newline at end of file