123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?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;
- }
- }
|