Вход Регистрация
Файл: includes/classes/swiftmailer/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php
Строк: 71
<?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($patternself::$_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];
            }
        }
    }
}
Онлайн: 0
Реклама