[ Index ] |
MailPress 544 |
[ Index ] [ Classes ] [ Functions ] [ Variables ] [ Constants ] [ Statistics ] |
[Summary view] [Print] [Text view]
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 /** 12 * Standard factory for creating CharacterReaders. 13 * 14 * @author Chris Corbyn 15 */ 16 class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory implements Swift_CharacterReaderFactory 17 { 18 /** 19 * A map of charset patterns to their implementation classes. 20 * 21 * @var array 22 */ 23 private static $_map = array(); 24 25 /** 26 * Factories which have already been loaded. 27 * 28 * @var Swift_CharacterReaderFactory[] 29 */ 30 private static $_loaded = array(); 31 32 /** 33 * Creates a new CharacterReaderFactory. 34 */ 35 public function __construct() 36 { 37 $this->init(); 38 } 39 40 public function __wakeup() 41 { 42 $this->init(); 43 } 44 45 public function init() 46 { 47 if (count(self::$_map) > 0) { 48 return; 49 } 50 51 $prefix = 'Swift_CharacterReader_'; 52 53 $singleByte = array( 54 'class' => $prefix.'GenericFixedWidthReader', 55 'constructor' => array(1), 56 ); 57 58 $doubleByte = array( 59 'class' => $prefix.'GenericFixedWidthReader', 60 'constructor' => array(2), 61 ); 62 63 $fourBytes = array( 64 'class' => $prefix.'GenericFixedWidthReader', 65 'constructor' => array(4), 66 ); 67 68 // Utf-8 69 self::$_map['utf-?8'] = array( 70 'class' => $prefix.'Utf8Reader', 71 'constructor' => array(), 72 ); 73 74 //7-8 bit charsets 75 self::$_map['(us-)?ascii'] = $singleByte; 76 self::$_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; 77 self::$_map['windows-?125[0-9]'] = $singleByte; 78 self::$_map['cp-?[0-9]+'] = $singleByte; 79 self::$_map['ansi'] = $singleByte; 80 self::$_map['macintosh'] = $singleByte; 81 self::$_map['koi-?7'] = $singleByte; 82 self::$_map['koi-?8-?.+'] = $singleByte; 83 self::$_map['mik'] = $singleByte; 84 self::$_map['(cork|t1)'] = $singleByte; 85 self::$_map['v?iscii'] = $singleByte; 86 87 //16 bits 88 self::$_map['(ucs-?2|utf-?16)'] = $doubleByte; 89 90 //32 bits 91 self::$_map['(ucs-?4|utf-?32)'] = $fourBytes; 92 93 // Fallback 94 self::$_map['.*'] = $singleByte; 95 } 96 97 /** 98 * Returns a CharacterReader suitable for the charset applied. 99 * 100 * @param string $charset 101 * 102 * @return Swift_CharacterReader 103 */ 104 public function getReaderFor($charset) 105 { 106 $charset = trim(strtolower($charset)); 107 foreach (self::$_map as $pattern => $spec) { 108 $re = '/^'.$pattern.'$/D'; 109 if (preg_match($re, $charset)) { 110 if (!array_key_exists($pattern, self::$_loaded)) { 111 $reflector = new ReflectionClass($spec['class']); 112 if ($reflector->getConstructor()) { 113 $reader = $reflector->newInstanceArgs($spec['constructor']); 114 } else { 115 $reader = $reflector->newInstance(); 116 } 117 self::$_loaded[$pattern] = $reader; 118 } 119 120 return self::$_loaded[$pattern]; 121 } 122 } 123 } 124 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Apr 28 18:38:52 2016 | Cross-referenced by PHPXref 0.7.1 |