XOOPS RMCommon Utilities  2.1.8.91RC
 All Classes Namespaces Files Functions Variables
SimpleCharacterReaderFactory.php
Go to the documentation of this file.
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 
21 {
22 
28  private $_map = array();
29 
35  private $_loaded = array();
36 
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 
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 }