mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-31 05:36:39 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			125 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /*
 | |
|  * This file is part of SwiftMailer.
 | |
|  * (c) 2004-2009 Chris Corbyn
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Standard factory for creating CharacterReaders.
 | |
|  *
 | |
|  * @author Chris Corbyn
 | |
|  */
 | |
| class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory implements Swift_CharacterReaderFactory
 | |
| {
 | |
|     /**
 | |
|      * A map of charset patterns to their implementation classes.
 | |
|      *
 | |
|      * @var array
 | |
|      */
 | |
|     private static $_map = array();
 | |
| 
 | |
|     /**
 | |
|      * Factories which have already been loaded.
 | |
|      *
 | |
|      * @var Swift_CharacterReaderFactory[]
 | |
|      */
 | |
|     private static $_loaded = array();
 | |
| 
 | |
|     /**
 | |
|      * Creates a new CharacterReaderFactory.
 | |
|      */
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->init();
 | |
|     }
 | |
| 
 | |
|     public function __wakeup()
 | |
|     {
 | |
|         $this->init();
 | |
|     }
 | |
| 
 | |
|     public function init()
 | |
|     {
 | |
|         if (count(self::$_map) > 0) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         $prefix = 'Swift_CharacterReader_';
 | |
| 
 | |
|         $singleByte = array(
 | |
|             'class' => $prefix.'GenericFixedWidthReader',
 | |
|             'constructor' => array(1),
 | |
|             );
 | |
| 
 | |
|         $doubleByte = array(
 | |
|             'class' => $prefix.'GenericFixedWidthReader',
 | |
|             'constructor' => array(2),
 | |
|             );
 | |
| 
 | |
|         $fourBytes = array(
 | |
|             'class' => $prefix.'GenericFixedWidthReader',
 | |
|             'constructor' => array(4),
 | |
|             );
 | |
| 
 | |
|         // Utf-8
 | |
|         self::$_map['utf-?8'] = array(
 | |
|             'class' => $prefix.'Utf8Reader',
 | |
|             'constructor' => array(),
 | |
|             );
 | |
| 
 | |
|         //7-8 bit charsets
 | |
|         self::$_map['(us-)?ascii'] = $singleByte;
 | |
|         self::$_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte;
 | |
|         self::$_map['windows-?125[0-9]'] = $singleByte;
 | |
|         self::$_map['cp-?[0-9]+'] = $singleByte;
 | |
|         self::$_map['ansi'] = $singleByte;
 | |
|         self::$_map['macintosh'] = $singleByte;
 | |
|         self::$_map['koi-?7'] = $singleByte;
 | |
|         self::$_map['koi-?8-?.+'] = $singleByte;
 | |
|         self::$_map['mik'] = $singleByte;
 | |
|         self::$_map['(cork|t1)'] = $singleByte;
 | |
|         self::$_map['v?iscii'] = $singleByte;
 | |
| 
 | |
|         //16 bits
 | |
|         self::$_map['(ucs-?2|utf-?16)'] = $doubleByte;
 | |
| 
 | |
|         //32 bits
 | |
|         self::$_map['(ucs-?4|utf-?32)'] = $fourBytes;
 | |
| 
 | |
|         // Fallback
 | |
|         self::$_map['.*'] = $singleByte;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Returns a CharacterReader suitable for the charset applied.
 | |
|      *
 | |
|      * @param string $charset
 | |
|      *
 | |
|      * @return Swift_CharacterReader
 | |
|      */
 | |
|     public function getReaderFor($charset)
 | |
|     {
 | |
|         $charset = trim(strtolower($charset));
 | |
|         foreach (self::$_map as $pattern => $spec) {
 | |
|             $re = '/^'.$pattern.'$/D';
 | |
|             if (preg_match($re, $charset)) {
 | |
|                 if (!array_key_exists($pattern, self::$_loaded)) {
 | |
|                     $reflector = new ReflectionClass($spec['class']);
 | |
|                     if ($reflector->getConstructor()) {
 | |
|                         $reader = $reflector->newInstanceArgs($spec['constructor']);
 | |
|                     } else {
 | |
|                         $reader = $reflector->newInstance();
 | |
|                     }
 | |
|                     self::$_loaded[$pattern] = $reader;
 | |
|                 }
 | |
| 
 | |
|                 return self::$_loaded[$pattern];
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |