159 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
 | 
						|
namespace Zxing\Common;
 | 
						|
 | 
						|
/**
 | 
						|
 * Encapsulates a Character Set ECI, according to "Extended Channel
 | 
						|
 * Interpretations" 5.3.1.1 of ISO 18004.
 | 
						|
 */
 | 
						|
final class CharacterSetECI
 | 
						|
{
 | 
						|
    /**#@+
 | 
						|
     * Character set constants.
 | 
						|
     */
 | 
						|
    const CP437                = 0;
 | 
						|
    const ISO8859_1            = 1;
 | 
						|
    const ISO8859_2            = 4;
 | 
						|
    const ISO8859_3            = 5;
 | 
						|
    const ISO8859_4            = 6;
 | 
						|
    const ISO8859_5            = 7;
 | 
						|
    const ISO8859_6            = 8;
 | 
						|
    const ISO8859_7            = 9;
 | 
						|
    const ISO8859_8            = 10;
 | 
						|
    const ISO8859_9            = 11;
 | 
						|
    const ISO8859_10           = 12;
 | 
						|
    const ISO8859_11           = 13;
 | 
						|
    const ISO8859_12           = 14;
 | 
						|
    const ISO8859_13           = 15;
 | 
						|
    const ISO8859_14           = 16;
 | 
						|
    const ISO8859_15           = 17;
 | 
						|
    const ISO8859_16           = 18;
 | 
						|
    const SJIS                 = 20;
 | 
						|
    const CP1250               = 21;
 | 
						|
    const CP1251               = 22;
 | 
						|
    const CP1252               = 23;
 | 
						|
    const CP1256               = 24;
 | 
						|
    const UNICODE_BIG_UNMARKED = 25;
 | 
						|
    const UTF8                 = 26;
 | 
						|
    const ASCII                = 27;
 | 
						|
    const BIG5                 = 28;
 | 
						|
    const GB18030              = 29;
 | 
						|
    const EUC_KR               = 30;
 | 
						|
    /**
 | 
						|
     * Map between character names and their ECI values.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected static $nameToEci = [
 | 
						|
        'ISO-8859-1'   => self::ISO8859_1,
 | 
						|
        'ISO-8859-2'   => self::ISO8859_2,
 | 
						|
        'ISO-8859-3'   => self::ISO8859_3,
 | 
						|
        'ISO-8859-4'   => self::ISO8859_4,
 | 
						|
        'ISO-8859-5'   => self::ISO8859_5,
 | 
						|
        'ISO-8859-6'   => self::ISO8859_6,
 | 
						|
        'ISO-8859-7'   => self::ISO8859_7,
 | 
						|
        'ISO-8859-8'   => self::ISO8859_8,
 | 
						|
        'ISO-8859-9'   => self::ISO8859_9,
 | 
						|
        'ISO-8859-10'  => self::ISO8859_10,
 | 
						|
        'ISO-8859-11'  => self::ISO8859_11,
 | 
						|
        'ISO-8859-12'  => self::ISO8859_12,
 | 
						|
        'ISO-8859-13'  => self::ISO8859_13,
 | 
						|
        'ISO-8859-14'  => self::ISO8859_14,
 | 
						|
        'ISO-8859-15'  => self::ISO8859_15,
 | 
						|
        'ISO-8859-16'  => self::ISO8859_16,
 | 
						|
        'SHIFT-JIS'    => self::SJIS,
 | 
						|
        'WINDOWS-1250' => self::CP1250,
 | 
						|
        'WINDOWS-1251' => self::CP1251,
 | 
						|
        'WINDOWS-1252' => self::CP1252,
 | 
						|
        'WINDOWS-1256' => self::CP1256,
 | 
						|
        'UTF-16BE'     => self::UNICODE_BIG_UNMARKED,
 | 
						|
        'UTF-8'        => self::UTF8,
 | 
						|
        'ASCII'        => self::ASCII,
 | 
						|
        'GBK'          => self::GB18030,
 | 
						|
        'EUC-KR'       => self::EUC_KR,
 | 
						|
    ];
 | 
						|
    /**#@-*/
 | 
						|
    /**
 | 
						|
     * Additional possible values for character sets.
 | 
						|
     *
 | 
						|
     * @var array
 | 
						|
     */
 | 
						|
    protected static $additionalValues = [
 | 
						|
        self::CP437 => 2,
 | 
						|
        self::ASCII => 170,
 | 
						|
    ];
 | 
						|
    private static $name = null;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets character set ECI by value.
 | 
						|
     *
 | 
						|
     * @param  string $name
 | 
						|
     *
 | 
						|
     * @return CharacterSetEci|null
 | 
						|
     */
 | 
						|
    public static function getCharacterSetECIByValue($value)
 | 
						|
    {
 | 
						|
        if ($value < 0 || $value >= 900) {
 | 
						|
            throw new \InvalidArgumentException('Value must be between 0 and 900');
 | 
						|
        }
 | 
						|
        if (false !== ($key = array_search($value, self::$additionalValues))) {
 | 
						|
            $value = $key;
 | 
						|
        }
 | 
						|
        array_search($value, self::$nameToEci);
 | 
						|
        try {
 | 
						|
            self::setName($value);
 | 
						|
 | 
						|
            return new self($value);
 | 
						|
        } catch (\UnexpectedValueException $e) {
 | 
						|
            return null;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    private static function setName($value)
 | 
						|
    {
 | 
						|
        foreach (self::$nameToEci as $name => $key) {
 | 
						|
            if ($key == $value) {
 | 
						|
                self::$name = $name;
 | 
						|
 | 
						|
                return true;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (self::$name == null) {
 | 
						|
            foreach (self::$additionalValues as $name => $key) {
 | 
						|
                if ($key == $value) {
 | 
						|
                    self::$name = $name;
 | 
						|
 | 
						|
                    return true;
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets character set ECI name.
 | 
						|
     *
 | 
						|
     * @return character set ECI name|null
 | 
						|
     */
 | 
						|
    public static function name()
 | 
						|
    {
 | 
						|
        return self::$name;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets character set ECI by name.
 | 
						|
     *
 | 
						|
     * @param  string $name
 | 
						|
     *
 | 
						|
     * @return CharacterSetEci|null
 | 
						|
     */
 | 
						|
    public static function getCharacterSetECIByName($name)
 | 
						|
    {
 | 
						|
        $name = strtoupper($name);
 | 
						|
        if (isset(self::$nameToEci[$name])) {
 | 
						|
            return new self(self::$nameToEci[$name]);
 | 
						|
        }
 | 
						|
 | 
						|
        return null;
 | 
						|
    }
 | 
						|
}
 |