Subversion-Projekte lars-tiefland.php_share

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
 
3
/*
4
 * This file is part of SwiftMailer.
5
 * (c) 2004-2009 Chris Corbyn
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
 
11
//@require 'Swift/CharacterReaderFactory.php';
12
 
13
/**
14
 * Standard factory for creating CharacterReaders.
15
 * @package Swift
16
 * @subpackage Encoder
17
 * @author Chris Corbyn
18
 */
19
class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory
20
  implements Swift_CharacterReaderFactory
21
{
22
 
23
  /**
24
   * A map of charset patterns to their implementation classes.
25
   * @var array
26
   * @access private
27
   */
28
  private $_map = array();
29
 
30
  /**
31
   * Factories which have already been loaded.
32
   * @var Swift_CharacterReaderFactory[]
33
   * @access private
34
   */
35
  private $_loaded = array();
36
 
37
  /**
38
   * Creates a new CharacterReaderFactory.
39
   */
40
  public function __construct()
41
  {
42
    $prefix = 'Swift_CharacterReader_';
43
 
44
    $singleByte = array(
45
      'class' => $prefix . 'GenericFixedWidthReader',
46
      'constructor' => array(1)
47
      );
48
 
49
    $doubleByte = array(
50
      'class' => $prefix . 'GenericFixedWidthReader',
51
      'constructor' => array(2)
52
      );
53
 
54
    $fourBytes = array(
55
      'class' => $prefix . 'GenericFixedWidthReader',
56
      'constructor' => array(4)
57
      );
58
 
59
    //Utf-8
60
    $this->_map['utf-?8'] = array(
61
      'class' => $prefix . 'Utf8Reader',
62
      'constructor' => array()
63
      );
64
 
65
    //7-8 bit charsets
66
    $this->_map['(us-)?ascii'] = $singleByte;
67
    $this->_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte;
68
    $this->_map['windows-?125[0-9]'] = $singleByte;
69
    $this->_map['cp-?[0-9]+'] = $singleByte;
70
    $this->_map['ansi'] = $singleByte;
71
    $this->_map['macintosh'] = $singleByte;
72
    $this->_map['koi-?7'] = $singleByte;
73
    $this->_map['koi-?8-?.+'] = $singleByte;
74
    $this->_map['mik'] = $singleByte;
75
    $this->_map['(cork|t1)'] = $singleByte;
76
    $this->_map['v?iscii'] = $singleByte;
77
 
78
    //16 bits
79
    $this->_map['(ucs-?2|utf-?16)'] = $doubleByte;
80
 
81
    //32 bits
82
    $this->_map['(ucs-?4|utf-?32)'] = $fourBytes;
83
 
84
    //Fallback
85
    $this->_map['.*'] = $singleByte;
86
  }
87
 
88
  /**
89
   * Returns a CharacterReader suitable for the charset applied.
90
   * @param string $charset
91
   * @return Swift_CharacterReader
92
   */
93
  public function getReaderFor($charset)
94
  {
95
    $charset = trim(strtolower($charset));
96
    foreach ($this->_map as $pattern => $spec)
97
    {
98
      $re = '/^' . $pattern . '$/D';
99
      if (preg_match($re, $charset))
100
      {
101
        if (!array_key_exists($pattern, $this->_loaded))
102
        {
103
          $reflector = new ReflectionClass($spec['class']);
104
          if ($reflector->getConstructor())
105
          {
106
            $reader = $reflector->newInstanceArgs($spec['constructor']);
107
          }
108
          else
109
          {
110
            $reader = $reflector->newInstance();
111
          }
112
          $this->_loaded[$pattern] = $reader;
113
        }
114
        return $this->_loaded[$pattern];
115
      }
116
    }
117
  }
118
 
119
}