Projet

Général

Profil

Paste
Télécharger (3,18 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / libraries / fpdi-version / filters / FilterASCII85.php @ 5a7e6170

1
<?php
2
//
3
//  FPDI - Version 1.4.4
4
//
5
//    Copyright 2004-2013 Setasign - Jan Slabon
6
//
7
//  Licensed under the Apache License, Version 2.0 (the "License");
8
//  you may not use this file except in compliance with the License.
9
//  You may obtain a copy of the License at
10
//
11
//      http://www.apache.org/licenses/LICENSE-2.0
12
//
13
//  Unless required by applicable law or agreed to in writing, software
14
//  distributed under the License is distributed on an "AS IS" BASIS,
15
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
//  See the License for the specific language governing permissions and
17
//  limitations under the License.
18
//
19

    
20
if (!defined('ORD_z'))
21
        define('ORD_z',ord('z'));
22
if (!defined('ORD_exclmark'))
23
        define('ORD_exclmark', ord('!'));
24
if (!defined('ORD_u'))        
25
        define('ORD_u', ord('u'));
26
if (!defined('ORD_tilde'))
27
        define('ORD_tilde', ord('~'));
28

    
29
if (!class_exists('FilterASCII85', false)) {
30

    
31
    class FilterASCII85 {
32
        
33
        function error($msg) {
34
            die($msg);
35
        }
36
        
37
        function decode($in) {
38
            $out = '';
39
            $state = 0;
40
            $chn = null;
41
            
42
            $l = strlen($in);
43
            
44
            for ($k = 0; $k < $l; ++$k) {
45
                $ch = ord($in[$k]) & 0xff;
46
                
47
                if ($ch == ORD_tilde) {
48
                    break;
49
                }
50
                if (preg_match('/^\s$/',chr($ch))) {
51
                    continue;
52
                }
53
                if ($ch == ORD_z && $state == 0) {
54
                    $out .= chr(0) . chr(0) . chr(0) . chr(0);
55
                    continue;
56
                }
57
                if ($ch < ORD_exclmark || $ch > ORD_u) {
58
                    return $this->error('Illegal character in ASCII85Decode.');
59
                }
60
                
61
                $chn[$state++] = $ch - ORD_exclmark;
62
                
63
                if ($state == 5) {
64
                    $state = 0;
65
                    $r = 0;
66
                    for ($j = 0; $j < 5; ++$j)
67
                        $r = $r * 85 + $chn[$j];
68
                    $out .= chr($r >> 24);
69
                    $out .= chr($r >> 16);
70
                    $out .= chr($r >> 8);
71
                    $out .= chr($r);
72
                }
73
            }
74
            $r = 0;
75
            
76
            if ($state == 1)
77
                return $this->error('Illegal length in ASCII85Decode.');
78
            if ($state == 2) {
79
                $r = $chn[0] * 85 * 85 * 85 * 85 + ($chn[1]+1) * 85 * 85 * 85;
80
                $out .= chr($r >> 24);
81
            }
82
            else if ($state == 3) {
83
                $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85  + ($chn[2]+1) * 85 * 85;
84
                $out .= chr($r >> 24);
85
                $out .= chr($r >> 16);
86
            }
87
            else if ($state == 4) {
88
                $r = $chn[0] * 85 * 85 * 85 * 85 + $chn[1] * 85 * 85 * 85  + $chn[2] * 85 * 85  + ($chn[3]+1) * 85 ;
89
                $out .= chr($r >> 24);
90
                $out .= chr($r >> 16);
91
                $out .= chr($r >> 8);
92
            }
93
    
94
            return $out;
95
        }
96
        
97
        function encode($in) {
98
            return $this->error("ASCII85 encoding not implemented.");
99
        }
100
    }
101
}