├── src └── FontLib │ ├── Exception │ └── FontNotFoundException.php │ ├── OpenType │ ├── File.php │ └── TableDirectoryEntry.php │ ├── Table │ ├── Type │ │ ├── cvt.php │ │ ├── fpgm.php │ │ ├── prep.php │ │ ├── hhea.php │ │ ├── maxp.php │ │ ├── nameRecord.php │ │ ├── head.php │ │ ├── os2.php │ │ ├── hmtx.php │ │ ├── loca.php │ │ ├── kern.php │ │ ├── post.php │ │ ├── glyf.php │ │ └── name.php │ ├── Table.php │ └── DirectoryEntry.php │ ├── Glyph │ ├── OutlineComponent.php │ ├── Outline.php │ ├── OutlineComposite.php │ └── OutlineSimple.php │ ├── Header.php │ ├── TrueType │ ├── Header.php │ ├── TableDirectoryEntry.php │ └── Collection.php │ ├── WOFF │ ├── TableDirectoryEntry.php │ ├── Header.php │ └── File.php │ ├── EncodingMap.php │ ├── Font.php │ ├── EOT │ ├── Header.php │ └── File.php │ └── AdobeFontMetrics.php ├── AUTHORS.md ├── phpunit.xml ├── composer.json ├── README.md └── maps ├── cp874.map ├── cp1253.map ├── cp1255.map ├── cp1257.map ├── iso-8859-7.map ├── cp1258.map ├── cp1254.map ├── cp1252.map ├── cp1250.map ├── iso-8859-2.map ├── iso-8859-15.map ├── iso-8859-4.map ├── iso-8859-1.map ├── iso-8859-9.map ├── iso-8859-16.map ├── iso-8859-11.map ├── iso-8859-5.map ├── koi8-r.map ├── koi8-u.map ├── cp1251.map └── adobe-standard-encoding.map /src/FontLib/Exception/FontNotFoundException.php: -------------------------------------------------------------------------------- 1 | message = 'Font not found in: ' . $fontPath; 10 | } 11 | } -------------------------------------------------------------------------------- /AUTHORS.md: -------------------------------------------------------------------------------- 1 | FontLib was designed and developed by Fabien Ménager. 2 | 3 | ### Current Team 4 | 5 | * **Brian Sweeney** (maintainer) 6 | 7 | ### Alumni 8 | 9 | * **Fabien Ménager** (creator) 10 | 11 | ### Contributors 12 | * **mondrake** 13 | * [and many more...](https://github.com/dompdf/php-font-lib/graphs/contributors) 14 | 15 | ### Thanks 16 | 17 | FontLib would not have been possible without strong community support. 18 | -------------------------------------------------------------------------------- /src/FontLib/OpenType/File.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | 14 | ./tests/FontLib/ 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/FontLib/Table/Type/cvt.php: -------------------------------------------------------------------------------- 1 | getFont(); 20 | $font->seek($this->entry->offset); 21 | $this->rawData = $font->read($this->entry->length); 22 | } 23 | function _encode() { 24 | return $this->getFont()->write($this->rawData, $this->entry->length); 25 | } 26 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/fpgm.php: -------------------------------------------------------------------------------- 1 | getFont(); 20 | $font->seek($this->entry->offset); 21 | $this->rawData = $font->read($this->entry->length); 22 | } 23 | function _encode() { 24 | return $this->getFont()->write($this->rawData, $this->entry->length); 25 | } 26 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/prep.php: -------------------------------------------------------------------------------- 1 | getFont(); 23 | $font->seek($this->entry->offset); 24 | $this->rawData = $font->read($this->entry->length); 25 | } 26 | function _encode() { 27 | return $this->getFont()->write($this->rawData, $this->entry->length); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/FontLib/Glyph/OutlineComponent.php: -------------------------------------------------------------------------------- 1 | a, $this->b, 26 | $this->c, $this->d, 27 | $this->e, $this->f, 28 | ); 29 | } 30 | } -------------------------------------------------------------------------------- /src/FontLib/Header.php: -------------------------------------------------------------------------------- 1 | font = $font; 27 | } 28 | 29 | public function encode() { 30 | return $this->font->pack($this->def, $this->data); 31 | } 32 | 33 | public function parse() { 34 | $this->data = $this->font->unpack($this->def); 35 | } 36 | } -------------------------------------------------------------------------------- /src/FontLib/TrueType/Header.php: -------------------------------------------------------------------------------- 1 | self::uint32, 18 | "numTables" => self::uint16, 19 | "searchRange" => self::uint16, 20 | "entrySelector" => self::uint16, 21 | "rangeShift" => self::uint16, 22 | ); 23 | 24 | public function parse() { 25 | parent::parse(); 26 | 27 | $format = $this->data["format"]; 28 | $this->data["formatText"] = $this->convertUInt32ToStr($format); 29 | } 30 | } -------------------------------------------------------------------------------- /src/FontLib/TrueType/TableDirectoryEntry.php: -------------------------------------------------------------------------------- 1 | font; 26 | $this->checksum = $font->readUInt32(); 27 | $this->offset = $font->readUInt32(); 28 | $this->length = $font->readUInt32(); 29 | $this->entryLength += 12; 30 | } 31 | } 32 | 33 | -------------------------------------------------------------------------------- /src/FontLib/WOFF/TableDirectoryEntry.php: -------------------------------------------------------------------------------- 1 | font; 28 | $this->offset = $font->readUInt32(); 29 | $this->length = $font->readUInt32(); 30 | $this->origLength = $font->readUInt32(); 31 | $this->checksum = $font->readUInt32(); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dompdf/php-font-lib", 3 | "type": "library", 4 | "description": "A library to read, parse, export and make subsets of different types of font files.", 5 | "homepage": "https://github.com/dompdf/php-font-lib", 6 | "license": "LGPL-2.1-or-later", 7 | "authors": [ 8 | { 9 | "name": "The FontLib Community", 10 | "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md" 11 | } 12 | ], 13 | "autoload": { 14 | "psr-4": { 15 | "FontLib\\": "src/FontLib" 16 | } 17 | }, 18 | "autoload-dev": { 19 | "psr-4": { 20 | "FontLib\\Tests\\": "tests/FontLib" 21 | } 22 | }, 23 | "require": { 24 | "php": "^7.1 || ^8.0", 25 | "ext-mbstring": "*" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/FontLib/EncodingMap.php: -------------------------------------------------------------------------------- 1 | f = fopen($file, "r"); 20 | } 21 | 22 | function parse() { 23 | $map = array(); 24 | 25 | while ($line = fgets($this->f)) { 26 | if (preg_match('/^[\!\=]([0-9A-F]{2,})\s+U\+([0-9A-F]{2})([0-9A-F]{2})\s+([^\s]+)/', $line, $matches)) { 27 | $unicode = (hexdec($matches[2]) << 8) + hexdec($matches[3]); 28 | $map[hexdec($matches[1])] = array($unicode, $matches[4]); 29 | } 30 | } 31 | 32 | ksort($map); 33 | 34 | return $map; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/FontLib/WOFF/Header.php: -------------------------------------------------------------------------------- 1 | self::uint32, 18 | "flavor" => self::uint32, 19 | "length" => self::uint32, 20 | "numTables" => self::uint16, 21 | self::uint16, 22 | "totalSfntSize" => self::uint32, 23 | "majorVersion" => self::uint16, 24 | "minorVersion" => self::uint16, 25 | "metaOffset" => self::uint32, 26 | "metaLength" => self::uint32, 27 | "metaOrigLength" => self::uint32, 28 | "privOffset" => self::uint32, 29 | "privLength" => self::uint32, 30 | ); 31 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/hhea.php: -------------------------------------------------------------------------------- 1 | self::Fixed, 19 | "ascent" => self::FWord, 20 | "descent" => self::FWord, 21 | "lineGap" => self::FWord, 22 | "advanceWidthMax" => self::uFWord, 23 | "minLeftSideBearing" => self::FWord, 24 | "minRightSideBearing" => self::FWord, 25 | "xMaxExtent" => self::FWord, 26 | "caretSlopeRise" => self::int16, 27 | "caretSlopeRun" => self::int16, 28 | "caretOffset" => self::FWord, 29 | self::int16, 30 | self::int16, 31 | self::int16, 32 | self::int16, 33 | "metricDataFormat" => self::int16, 34 | "numOfLongHorMetrics" => self::uint16, 35 | ); 36 | 37 | function _encode() { 38 | $font = $this->getFont(); 39 | $this->data["numOfLongHorMetrics"] = count($font->getSubset()); 40 | 41 | return parent::_encode(); 42 | } 43 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/maxp.php: -------------------------------------------------------------------------------- 1 | self::Fixed, 19 | "numGlyphs" => self::uint16, 20 | "maxPoints" => self::uint16, 21 | "maxContours" => self::uint16, 22 | "maxComponentPoints" => self::uint16, 23 | "maxComponentContours" => self::uint16, 24 | "maxZones" => self::uint16, 25 | "maxTwilightPoints" => self::uint16, 26 | "maxStorage" => self::uint16, 27 | "maxFunctionDefs" => self::uint16, 28 | "maxInstructionDefs" => self::uint16, 29 | "maxStackElements" => self::uint16, 30 | "maxSizeOfInstructions" => self::uint16, 31 | "maxComponentElements" => self::uint16, 32 | "maxComponentDepth" => self::uint16, 33 | ); 34 | 35 | function _encode() { 36 | $font = $this->getFont(); 37 | $this->data["numGlyphs"] = count($font->getSubset()); 38 | 39 | return parent::_encode(); 40 | } 41 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/nameRecord.php: -------------------------------------------------------------------------------- 1 | self::uint16, 29 | "platformSpecificID" => self::uint16, 30 | "languageID" => self::uint16, 31 | "nameID" => self::uint16, 32 | "length" => self::uint16, 33 | "offset" => self::uint16, 34 | ); 35 | 36 | public function map($data) { 37 | foreach ($data as $key => $value) { 38 | $this->$key = $value; 39 | } 40 | } 41 | 42 | public function getUTF8() { 43 | return $this->string; 44 | } 45 | 46 | public function getUTF16() { 47 | return Font::UTF8ToUTF16($this->string); 48 | } 49 | 50 | function __toString() { 51 | return $this->string; 52 | } 53 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/head.php: -------------------------------------------------------------------------------- 1 | self::Fixed, 20 | "fontRevision" => self::Fixed, 21 | "checkSumAdjustment" => self::uint32, 22 | "magicNumber" => self::uint32, 23 | "flags" => self::uint16, 24 | "unitsPerEm" => self::uint16, 25 | "created" => self::longDateTime, 26 | "modified" => self::longDateTime, 27 | "xMin" => self::FWord, 28 | "yMin" => self::FWord, 29 | "xMax" => self::FWord, 30 | "yMax" => self::FWord, 31 | "macStyle" => self::uint16, 32 | "lowestRecPPEM" => self::uint16, 33 | "fontDirectionHint" => self::int16, 34 | "indexToLocFormat" => self::int16, 35 | "glyphDataFormat" => self::int16, 36 | ); 37 | 38 | protected function _parse() { 39 | parent::_parse(); 40 | 41 | if ($this->data["magicNumber"] != 0x5F0F3CF5) { 42 | throw new Exception("Incorrect magic number (" . dechex($this->data["magicNumber"]) . ")"); 43 | } 44 | } 45 | 46 | function _encode() { 47 | $this->data["checkSumAdjustment"] = 0; 48 | return parent::_encode(); 49 | } 50 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/os2.php: -------------------------------------------------------------------------------- 1 | self::uint16, 19 | "xAvgCharWidth" => self::int16, 20 | "usWeightClass" => self::uint16, 21 | "usWidthClass" => self::uint16, 22 | "fsType" => self::int16, 23 | "ySubscriptXSize" => self::int16, 24 | "ySubscriptYSize" => self::int16, 25 | "ySubscriptXOffset" => self::int16, 26 | "ySubscriptYOffset" => self::int16, 27 | "ySuperscriptXSize" => self::int16, 28 | "ySuperscriptYSize" => self::int16, 29 | "ySuperscriptXOffset" => self::int16, 30 | "ySuperscriptYOffset" => self::int16, 31 | "yStrikeoutSize" => self::int16, 32 | "yStrikeoutPosition" => self::int16, 33 | "sFamilyClass" => self::int16, 34 | "panose" => array(self::uint8, 10), 35 | "ulCharRange" => array(self::uint32, 4), 36 | "achVendID" => array(self::char, 4), 37 | "fsSelection" => self::uint16, 38 | "fsFirstCharIndex" => self::uint16, 39 | "fsLastCharIndex" => self::uint16, 40 | "typoAscender" => self::int16, 41 | "typoDescender" => self::int16, 42 | "typoLineGap" => self::int16, 43 | "winAscent" => self::int16, 44 | "winDescent" => self::int16, 45 | ); 46 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![PHPUnit tests](https://github.com/dompdf/php-font-lib/actions/workflows/phpunit.yml/badge.svg)](https://github.com/dompdf/php-font-lib/actions/workflows/phpunit.yml) 2 | 3 | # PHP Font Lib 4 | 5 | This library can be used to: 6 | * Read TrueType, OpenType (with TrueType glyphs), WOFF font files 7 | * Extract basic info (name, style, etc) 8 | * Extract advanced info (horizontal metrics, glyph names, glyph shapes, etc) 9 | * Make an Adobe Font Metrics (AFM) file from a font 10 | 11 | This project was initiated by the need to read font files in the [DOMPDF project](https://github.com/dompdf/dompdf). 12 | 13 | Usage Example 14 | ------------- 15 | 16 | ### Base font information 17 | 18 | ```php 19 | $font = \FontLib\Font::load('fontfile.ttf'); 20 | $font->parse(); // for getFontWeight() to work this call must be done first! 21 | echo $font->getFontName() .'
'; 22 | echo $font->getFontSubfamily() .'
'; 23 | echo $font->getFontSubfamilyID() .'
'; 24 | echo $font->getFontFullName() .'
'; 25 | echo $font->getFontVersion() .'
'; 26 | echo $font->getFontWeight() .'
'; 27 | echo $font->getFontPostscriptName() .'
'; 28 | $font->close(); 29 | ``` 30 | 31 | ### Font Metrics Generation 32 | 33 | ```php 34 | $font = FontLib\Font::load('fontfile.ttf'); 35 | $font->parse(); 36 | $font->saveAdobeFontMetrics('fontfile.ufm'); 37 | ``` 38 | 39 | ### Create a font subset 40 | 41 | ```php 42 | $font = FontLib\Font::load('fontfile.ttf'); 43 | $font->parse(); 44 | $font->setSubset("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ.:,;' (!?)+-*/== 1234567890"); // characters to include 45 | $font->reduce(); 46 | touch('fontfile.subset.ttf'); 47 | $font->open('fontfile.subset.ttf', FontLib\BinaryStream::modeReadWrite); 48 | $font->encode(array("OS/2")); 49 | $font->close(); 50 | ``` 51 | -------------------------------------------------------------------------------- /src/FontLib/Table/Type/hmtx.php: -------------------------------------------------------------------------------- 1 | getFont(); 19 | $offset = $font->pos(); 20 | 21 | $numOfLongHorMetrics = $font->getData("hhea", "numOfLongHorMetrics"); 22 | $numGlyphs = $font->getData("maxp", "numGlyphs"); 23 | 24 | $font->seek($offset); 25 | 26 | $data = array(); 27 | $metrics = $font->readUInt16Many($numOfLongHorMetrics * 2); 28 | for ($gid = 0, $mid = 0; $gid < $numOfLongHorMetrics; $gid++) { 29 | $advanceWidth = isset($metrics[$mid]) ? $metrics[$mid] : 0; 30 | $mid += 1; 31 | $leftSideBearing = isset($metrics[$mid]) ? $metrics[$mid] : 0; 32 | $mid += 1; 33 | $data[$gid] = array($advanceWidth, $leftSideBearing); 34 | } 35 | 36 | if ($numOfLongHorMetrics < $numGlyphs) { 37 | $lastWidth = end($data)[0]; 38 | $numLeft = $numGlyphs - $numOfLongHorMetrics; 39 | $metrics = $font->readUInt16Many($numLeft); 40 | for($i = 0; $i < $numLeft; $i++) { 41 | $gid = $numOfLongHorMetrics + $i; 42 | $leftSideBearing = isset($metrics[$i]) ? $metrics[$i] : 0; 43 | $data[$gid] = array($lastWidth, $leftSideBearing); 44 | } 45 | } 46 | 47 | $this->data = $data; 48 | } 49 | 50 | protected function _encode() { 51 | $font = $this->getFont(); 52 | $subset = $font->getSubset(); 53 | $data = $this->data; 54 | 55 | $length = 0; 56 | 57 | foreach ($subset as $gid) { 58 | $length += $font->writeUInt16($data[$gid][0]); 59 | $length += $font->writeUInt16($data[$gid][1]); 60 | } 61 | 62 | return $length; 63 | } 64 | } -------------------------------------------------------------------------------- /src/FontLib/Font.php: -------------------------------------------------------------------------------- 1 | load($file); 67 | 68 | return $obj; 69 | } 70 | 71 | return null; 72 | } 73 | 74 | static function d($str) { 75 | if (!self::$debug) { 76 | return; 77 | } 78 | echo "$str\n"; 79 | } 80 | 81 | static function UTF16ToUTF8($str) { 82 | return mb_convert_encoding($str, "utf-8", "utf-16"); 83 | } 84 | 85 | static function UTF8ToUTF16($str) { 86 | return mb_convert_encoding($str, "utf-16", "utf-8"); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/FontLib/Table/Type/loca.php: -------------------------------------------------------------------------------- 1 | getFont(); 19 | $offset = $font->pos(); 20 | 21 | $indexToLocFormat = $font->getData("head", "indexToLocFormat"); 22 | $numGlyphs = $font->getData("maxp", "numGlyphs"); 23 | 24 | $font->seek($offset); 25 | 26 | $data = array(); 27 | 28 | // 2 bytes 29 | if ($indexToLocFormat == 0) { 30 | $d = $font->read(($numGlyphs + 1) * 2); 31 | $loc = unpack("n*", $d); 32 | 33 | for ($i = 0; $i <= $numGlyphs; $i++) { 34 | $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] * 2 : 0; 35 | } 36 | } 37 | 38 | // 4 bytes 39 | else { 40 | if ($indexToLocFormat == 1) { 41 | $d = $font->read(($numGlyphs + 1) * 4); 42 | $loc = unpack("N*", $d); 43 | 44 | for ($i = 0; $i <= $numGlyphs; $i++) { 45 | $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] : 0; 46 | } 47 | } 48 | } 49 | 50 | $this->data = $data; 51 | } 52 | 53 | function _encode() { 54 | $font = $this->getFont(); 55 | $data = $this->data; 56 | 57 | $indexToLocFormat = $font->getData("head", "indexToLocFormat"); 58 | $numGlyphs = $font->getData("maxp", "numGlyphs"); 59 | $length = 0; 60 | 61 | // 2 bytes 62 | if ($indexToLocFormat == 0) { 63 | for ($i = 0; $i <= $numGlyphs; $i++) { 64 | $length += $font->writeUInt16($data[$i] / 2); 65 | } 66 | } 67 | 68 | // 4 bytes 69 | else { 70 | if ($indexToLocFormat == 1) { 71 | for ($i = 0; $i <= $numGlyphs; $i++) { 72 | $length += $font->writeUInt32($data[$i]); 73 | } 74 | } 75 | } 76 | 77 | return $length; 78 | } 79 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/kern.php: -------------------------------------------------------------------------------- 1 | getFont(); 19 | 20 | $data = $font->unpack(array( 21 | "version" => self::uint16, 22 | "nTables" => self::uint16, 23 | 24 | // only the first subtable will be parsed 25 | "subtableVersion" => self::uint16, 26 | "length" => self::uint16, 27 | "coverage" => self::uint16, 28 | )); 29 | 30 | $data["format"] = ($data["coverage"] >> 8); 31 | 32 | $subtable = array(); 33 | 34 | switch ($data["format"]) { 35 | case 0: 36 | $subtable = $font->unpack(array( 37 | "nPairs" => self::uint16, 38 | "searchRange" => self::uint16, 39 | "entrySelector" => self::uint16, 40 | "rangeShift" => self::uint16, 41 | )); 42 | 43 | $pairs = array(); 44 | $tree = array(); 45 | 46 | $values = $font->readUInt16Many($subtable["nPairs"] * 3); 47 | for ($i = 0, $idx = 0; $i < $subtable["nPairs"]; $i++) { 48 | $left = $values[$idx++]; 49 | $right = $values[$idx++]; 50 | $value = $values[$idx++]; 51 | 52 | if ($value >= 0x8000) { 53 | $value -= 0x10000; 54 | } 55 | 56 | $pairs[] = array( 57 | "left" => $left, 58 | "right" => $right, 59 | "value" => $value, 60 | ); 61 | 62 | $tree[$left][$right] = $value; 63 | } 64 | 65 | //$subtable["pairs"] = $pairs; 66 | $subtable["tree"] = $tree; 67 | break; 68 | 69 | case 1: 70 | case 2: 71 | case 3: 72 | break; 73 | } 74 | 75 | $data["subtable"] = $subtable; 76 | 77 | $this->data = $data; 78 | } 79 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Table.php: -------------------------------------------------------------------------------- 1 | entry = $entry; 29 | $entry->setTable($this); 30 | } 31 | 32 | /** 33 | * @return File 34 | */ 35 | public function getFont() { 36 | return $this->entry->getFont(); 37 | } 38 | 39 | protected function _encode() { 40 | if (empty($this->data)) { 41 | Font::d(" >> Table is empty"); 42 | 43 | return 0; 44 | } 45 | 46 | return $this->getFont()->pack($this->def, $this->data); 47 | } 48 | 49 | protected function _parse() { 50 | $this->data = $this->getFont()->unpack($this->def); 51 | } 52 | 53 | protected function _parseRaw() { 54 | $this->data = $this->getFont()->read($this->entry->length); 55 | } 56 | 57 | protected function _encodeRaw() { 58 | return $this->getFont()->write($this->data, $this->entry->length); 59 | } 60 | 61 | public function toHTML() { 62 | return "
" . var_export($this->data, true) . "
"; 63 | } 64 | 65 | final public function encode() { 66 | $this->entry->startWrite(); 67 | 68 | if (false && empty($this->def)) { 69 | $length = $this->_encodeRaw(); 70 | } 71 | else { 72 | $length = $this->_encode(); 73 | } 74 | 75 | $this->entry->endWrite(); 76 | 77 | return $length; 78 | } 79 | 80 | final public function parse() { 81 | $this->entry->startRead(); 82 | 83 | if (false && empty($this->def)) { 84 | $this->_parseRaw(); 85 | } 86 | else { 87 | $this->_parse(); 88 | } 89 | 90 | $this->entry->endRead(); 91 | } 92 | } -------------------------------------------------------------------------------- /src/FontLib/WOFF/File.php: -------------------------------------------------------------------------------- 1 | header)) { 22 | return; 23 | } 24 | 25 | $this->header = new Header($this); 26 | $this->header->parse(); 27 | } 28 | 29 | public function load($file) { 30 | parent::load($file); 31 | 32 | $this->parseTableEntries(); 33 | $dataOffset = $this->pos() + count($this->directory) * 20; 34 | 35 | $fw = $this->getTempFile(false); 36 | $fr = $this->f; 37 | 38 | $this->f = $fw; 39 | $offset = $this->header->encode(); 40 | 41 | foreach ($this->directory as $entry) { 42 | // Read ... 43 | $this->f = $fr; 44 | $this->seek($entry->offset); 45 | $data = $this->read($entry->length); 46 | 47 | if ($entry->length < $entry->origLength) { 48 | $data = (string) gzuncompress($data); 49 | } 50 | 51 | // Prepare data ... 52 | $length = mb_strlen($data, '8bit'); 53 | $entry->length = $entry->origLength = $length; 54 | $entry->offset = $dataOffset; 55 | 56 | // Write ... 57 | $this->f = $fw; 58 | 59 | // Woff Entry 60 | $this->seek($offset); 61 | $offset += $this->write($entry->tag, 4); // tag 62 | $offset += $this->writeUInt32($dataOffset); // offset 63 | $offset += $this->writeUInt32($length); // length 64 | $offset += $this->writeUInt32($length); // origLength 65 | $offset += $this->writeUInt32(DirectoryEntry::computeChecksum($data)); // checksum 66 | 67 | // Data 68 | $this->seek($dataOffset); 69 | $dataOffset += $this->write($data, $length); 70 | } 71 | 72 | $this->f = $fw; 73 | $this->seek(0); 74 | 75 | // Need to re-parse this, don't know why 76 | $this->header = null; 77 | $this->directory = array(); 78 | $this->parseTableEntries(); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/FontLib/TrueType/Collection.php: -------------------------------------------------------------------------------- 1 | numFonts)) { 35 | return; 36 | } 37 | 38 | $this->read(4); // tag name 39 | 40 | $this->version = $this->readFixed(); 41 | $this->numFonts = $this->readUInt32(); 42 | 43 | for ($i = 0; $i < $this->numFonts; $i++) { 44 | $this->collectionOffsets[] = $this->readUInt32(); 45 | } 46 | } 47 | 48 | /** 49 | * @param int $fontId 50 | * 51 | * @throws OutOfBoundsException 52 | * @return File 53 | */ 54 | function getFont($fontId) { 55 | $this->parse(); 56 | 57 | if (!isset($this->collectionOffsets[$fontId])) { 58 | throw new OutOfBoundsException(); 59 | } 60 | 61 | if (isset($this->collection[$fontId])) { 62 | return $this->collection[$fontId]; 63 | } 64 | 65 | $font = new File(); 66 | $font->f = $this->f; 67 | $font->setTableOffset($this->collectionOffsets[$fontId]); 68 | 69 | return $this->collection[$fontId] = $font; 70 | } 71 | 72 | function current() { 73 | return $this->getFont($this->position); 74 | } 75 | 76 | function key() { 77 | return $this->position; 78 | } 79 | 80 | function next() { 81 | return ++$this->position; 82 | } 83 | 84 | function rewind() { 85 | $this->position = 0; 86 | } 87 | 88 | function valid() { 89 | $this->parse(); 90 | 91 | return isset($this->collectionOffsets[$this->position]); 92 | } 93 | 94 | function count() { 95 | $this->parse(); 96 | 97 | return $this->numFonts; 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /src/FontLib/Glyph/Outline.php: -------------------------------------------------------------------------------- 1 | seek($offset); 49 | 50 | if ($size === 0 || $font->readInt16() > -1) { 51 | /** @var OutlineSimple $glyph */ 52 | $glyph = new OutlineSimple($table, $offset, $size); 53 | } 54 | else { 55 | /** @var OutlineComposite $glyph */ 56 | $glyph = new OutlineComposite($table, $offset, $size); 57 | } 58 | 59 | $glyph->parse($font); 60 | 61 | return $glyph; 62 | } 63 | 64 | /** 65 | * @return File 66 | */ 67 | function getFont() { 68 | return $this->table->getFont(); 69 | } 70 | 71 | function __construct(glyf $table, $offset = null, $size = null) { 72 | $this->table = $table; 73 | $this->offset = $offset; 74 | $this->size = $size; 75 | } 76 | 77 | function parse(BinaryStream $font) { 78 | $font->seek($this->offset); 79 | 80 | $this->raw = $font->read($this->size); 81 | } 82 | 83 | function parseData() { 84 | $font = $this->getFont(); 85 | $font->seek($this->offset); 86 | 87 | $this->numberOfContours = $font->readInt16(); 88 | $this->xMin = $font->readFWord(); 89 | $this->yMin = $font->readFWord(); 90 | $this->xMax = $font->readFWord(); 91 | $this->yMax = $font->readFWord(); 92 | } 93 | 94 | function encode() { 95 | $font = $this->getFont(); 96 | 97 | return $font->write($this->raw, mb_strlen((string) $this->raw, '8bit')); 98 | } 99 | 100 | function getSVGContours() { 101 | // Inherit 102 | } 103 | 104 | function getGlyphIDs() { 105 | return array(); 106 | } 107 | } 108 | 109 | -------------------------------------------------------------------------------- /src/FontLib/Table/DirectoryEntry.php: -------------------------------------------------------------------------------- 1 | font = $font; 57 | $this->f = $font->f; 58 | } 59 | 60 | function parse() { 61 | $this->tag = $this->font->read(4); 62 | } 63 | 64 | function open($filename, $mode = self::modeRead) { 65 | // void 66 | } 67 | 68 | function setTable(Table $font_table) { 69 | $this->font_table = $font_table; 70 | } 71 | 72 | function encode($entry_offset) { 73 | Font::d("\n==== $this->tag ===="); 74 | //Font::d("Entry offset = $entry_offset"); 75 | 76 | $data = $this->font_table; 77 | $font = $this->font; 78 | 79 | $table_offset = $font->pos(); 80 | $this->offset = $table_offset; 81 | $table_length = $data->encode(); 82 | 83 | $font->seek($table_offset + $table_length); 84 | $pad = 0; 85 | $mod = $table_length % 4; 86 | if ($mod != 0) { 87 | $pad = 4 - $mod; 88 | $font->write(str_pad("", $pad, "\0"), $pad); 89 | } 90 | 91 | $font->seek($table_offset); 92 | $table_data = $font->read($table_length); 93 | 94 | $font->seek($entry_offset); 95 | 96 | $font->write($this->tag, 4); 97 | $font->writeUInt32(self::computeChecksum($table_data)); 98 | $font->writeUInt32($table_offset); 99 | $font->writeUInt32($table_length); 100 | 101 | Font::d("Bytes written = $table_length"); 102 | 103 | $font->seek($table_offset + $table_length + $pad); 104 | } 105 | 106 | /** 107 | * @return File 108 | */ 109 | function getFont() { 110 | return $this->font; 111 | } 112 | 113 | function startRead() { 114 | $this->font->seek($this->offset); 115 | } 116 | 117 | function endRead() { 118 | // 119 | } 120 | 121 | function startWrite() { 122 | $this->font->seek($this->offset); 123 | } 124 | 125 | function endWrite() { 126 | // 127 | } 128 | } 129 | 130 | -------------------------------------------------------------------------------- /src/FontLib/EOT/Header.php: -------------------------------------------------------------------------------- 1 | self::uint32, 23 | "numTables" => self::uint16, 24 | "searchRange" => self::uint16, 25 | "entrySelector" => self::uint16, 26 | "rangeShift" => self::uint16, 27 | ); 28 | 29 | public function parse() { 30 | $font = $this->font; 31 | 32 | $this->data = $font->unpack(array( 33 | "EOTSize" => self::uint32, 34 | "FontDataSize" => self::uint32, 35 | "Version" => self::uint32, 36 | "Flags" => self::uint32, 37 | "FontPANOSE" => array(self::uint8, 10), 38 | "Charset" => self::uint8, 39 | "Italic" => self::uint8, 40 | "Weight" => self::uint32, 41 | "fsType" => self::uint16, 42 | "MagicNumber" => self::uint16, 43 | "UnicodeRange1" => self::uint32, 44 | "UnicodeRange2" => self::uint32, 45 | "UnicodeRange3" => self::uint32, 46 | "UnicodeRange4" => self::uint32, 47 | "CodePageRange1" => self::uint32, 48 | "CodePageRange2" => self::uint32, 49 | "CheckSumAdjustment" => self::uint32, 50 | "Reserved1" => self::uint32, 51 | "Reserved2" => self::uint32, 52 | "Reserved3" => self::uint32, 53 | "Reserved4" => self::uint32, 54 | )); 55 | 56 | $this->data["Padding1"] = $font->readUInt16(); 57 | $this->readString("FamilyName"); 58 | 59 | $this->data["Padding2"] = $font->readUInt16(); 60 | $this->readString("StyleName"); 61 | 62 | $this->data["Padding3"] = $font->readUInt16(); 63 | $this->readString("VersionName"); 64 | 65 | $this->data["Padding4"] = $font->readUInt16(); 66 | $this->readString("FullName"); 67 | 68 | switch ($this->data["Version"]) { 69 | default: 70 | throw new Exception("Unknown EOT version " . $this->data["Version"]); 71 | 72 | case 0x00010000: 73 | // Nothing to do more 74 | break; 75 | 76 | case 0x00020001: 77 | $this->data["Padding5"] = $font->readUInt16(); 78 | $this->readString("RootString"); 79 | break; 80 | 81 | case 0x00020002: 82 | $this->data["Padding5"] = $font->readUInt16(); 83 | $this->readString("RootString"); 84 | 85 | $this->data["RootStringCheckSum"] = $font->readUInt32(); 86 | $this->data["EUDCCodePage"] = $font->readUInt32(); 87 | 88 | $this->data["Padding6"] = $font->readUInt16(); 89 | $this->readString("Signature"); 90 | 91 | $this->data["EUDCFlags"] = $font->readUInt32(); 92 | $this->data["EUDCFontSize"] = $font->readUInt32(); 93 | break; 94 | } 95 | 96 | if (!empty($this->data["RootString"])) { 97 | $this->data["RootString"] = explode("\0", $this->data["RootString"]); 98 | } 99 | } 100 | 101 | private function readString($name) { 102 | $font = $this->font; 103 | $size = $font->readUInt16(); 104 | 105 | $this->data["{$name}Size"] = $size; 106 | $this->data[$name] = Font::UTF16ToUTF8($font->read($size)); 107 | } 108 | 109 | public function encode() { 110 | //return $this->font->pack($this->def, $this->data); 111 | } 112 | } -------------------------------------------------------------------------------- /src/FontLib/Table/Type/post.php: -------------------------------------------------------------------------------- 1 | self::Fixed, 20 | "italicAngle" => self::Fixed, 21 | "underlinePosition" => self::FWord, 22 | "underlineThickness" => self::FWord, 23 | "isFixedPitch" => self::uint32, 24 | "minMemType42" => self::uint32, 25 | "maxMemType42" => self::uint32, 26 | "minMemType1" => self::uint32, 27 | "maxMemType1" => self::uint32, 28 | ); 29 | 30 | protected function _parse() { 31 | $font = $this->getFont(); 32 | $data = $font->unpack($this->def); 33 | 34 | $names = array(); 35 | 36 | switch ($data["format"]) { 37 | case 1: 38 | $names = File::$macCharNames; 39 | break; 40 | 41 | case 2: 42 | $data["numberOfGlyphs"] = $font->readUInt16(); 43 | 44 | $glyphNameIndex = $font->readUInt16Many($data["numberOfGlyphs"]); 45 | 46 | $data["glyphNameIndex"] = $glyphNameIndex; 47 | 48 | $namesPascal = array(); 49 | for ($i = 0; $i < $data["numberOfGlyphs"]; $i++) { 50 | $len = $font->readUInt8(); 51 | $namesPascal[] = $font->read($len); 52 | } 53 | 54 | foreach ($glyphNameIndex as $g => $index) { 55 | if ($index < 258) { 56 | $names[$g] = File::$macCharNames[$index]; 57 | } 58 | else { 59 | if (array_key_exists($index - 258, $namesPascal)) { 60 | $names[$g] = $namesPascal[$index - 258]; 61 | } 62 | } 63 | } 64 | 65 | break; 66 | 67 | case 2.5: 68 | // TODO 69 | break; 70 | 71 | case 3: 72 | // nothing 73 | break; 74 | 75 | case 4: 76 | // TODO 77 | break; 78 | } 79 | 80 | $data["names"] = $names; 81 | 82 | $this->data = $data; 83 | } 84 | 85 | function _encode() { 86 | $font = $this->getFont(); 87 | $data = $this->data; 88 | $data["format"] = 3; 89 | 90 | $length = $font->pack($this->def, $data); 91 | 92 | return $length; 93 | /* 94 | $subset = $font->getSubset(); 95 | 96 | switch($data["format"]) { 97 | case 1: 98 | // nothing to do 99 | break; 100 | 101 | case 2: 102 | $old_names = $data["names"]; 103 | 104 | $glyphNameIndex = range(0, count($subset)); 105 | 106 | $names = array(); 107 | foreach($subset as $gid) { 108 | $names[] = $data["names"][$data["glyphNameIndex"][$gid]]; 109 | } 110 | 111 | $numberOfGlyphs = count($names); 112 | $length += $font->writeUInt16($numberOfGlyphs); 113 | 114 | foreach($glyphNameIndex as $gni) { 115 | $length += $font->writeUInt16($gni); 116 | } 117 | 118 | //$names = array_slice($names, 257); 119 | foreach($names as $name) { 120 | $len = strlen($name); 121 | $length += $font->writeUInt8($len); 122 | $length += $font->write($name, $len); 123 | } 124 | 125 | break; 126 | 127 | case 2.5: 128 | // TODO 129 | break; 130 | 131 | case 3: 132 | // nothing 133 | break; 134 | 135 | case 4: 136 | // TODO 137 | break; 138 | } 139 | 140 | return $length;*/ 141 | } 142 | } -------------------------------------------------------------------------------- /src/FontLib/EOT/File.php: -------------------------------------------------------------------------------- 1 | header)) { 31 | return; 32 | } 33 | 34 | $this->header = new Header($this); 35 | $this->header->parse(); 36 | } 37 | 38 | function parse() { 39 | $this->parseHeader(); 40 | 41 | $flags = $this->header->data["Flags"]; 42 | 43 | if ($flags & self::TTEMBED_TTCOMPRESSED) { 44 | $mtx_version = $this->readUInt8(); 45 | $mtx_copy_limit = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8(); 46 | $mtx_offset_1 = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8(); 47 | $mtx_offset_2 = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8(); 48 | /* 49 | var_dump("$mtx_version $mtx_copy_limit $mtx_offset_1 $mtx_offset_2"); 50 | 51 | $pos = $this->pos(); 52 | $size = $mtx_offset_1 - $pos; 53 | var_dump("pos: $pos"); 54 | var_dump("size: $size");*/ 55 | } 56 | 57 | if ($flags & self::TTEMBED_XORENCRYPTDATA) { 58 | // Process XOR 59 | } 60 | // TODO Read font data ... 61 | } 62 | 63 | /** 64 | * Little endian version of the read method 65 | * 66 | * @param int $n The number of bytes to read 67 | * 68 | * @return string 69 | */ 70 | public function read($n) { 71 | if ($n < 1) { 72 | return ""; 73 | } 74 | 75 | $string = (string) fread($this->f, $n); 76 | $chunks = mb_str_split($string, 2, '8bit'); 77 | $chunks = array_map("strrev", $chunks); 78 | return implode("", $chunks); 79 | } 80 | 81 | public function readUInt32() { 82 | $uint32 = parent::readUInt32(); 83 | 84 | return $uint32 >> 16 & 0x0000FFFF | $uint32 << 16 & 0xFFFF0000; 85 | } 86 | 87 | /** 88 | * Get font copyright 89 | * 90 | * @return string|null 91 | */ 92 | function getFontCopyright() { 93 | return null; 94 | } 95 | 96 | /** 97 | * Get font name 98 | * 99 | * @return string|null 100 | */ 101 | function getFontName() { 102 | return $this->header->data["FamilyName"]; 103 | } 104 | 105 | /** 106 | * Get font subfamily 107 | * 108 | * @return string|null 109 | */ 110 | function getFontSubfamily() { 111 | return $this->header->data["StyleName"]; 112 | } 113 | 114 | /** 115 | * Get font subfamily ID 116 | * 117 | * @return string|null 118 | */ 119 | function getFontSubfamilyID() { 120 | return $this->header->data["StyleName"]; 121 | } 122 | 123 | /** 124 | * Get font full name 125 | * 126 | * @return string|null 127 | */ 128 | function getFontFullName() { 129 | return $this->header->data["FullName"]; 130 | } 131 | 132 | /** 133 | * Get font version 134 | * 135 | * @return string|null 136 | */ 137 | function getFontVersion() { 138 | return $this->header->data["VersionName"]; 139 | } 140 | 141 | /** 142 | * Get font weight 143 | * 144 | * @return string|null 145 | */ 146 | function getFontWeight() { 147 | return $this->header->data["Weight"]; 148 | } 149 | 150 | /** 151 | * Get font Postscript name 152 | * 153 | * @return string|null 154 | */ 155 | function getFontPostscriptName() { 156 | return null; 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /src/FontLib/Table/Type/glyf.php: -------------------------------------------------------------------------------- 1 | getFont(); 23 | $offset = $font->pos(); 24 | 25 | $loca = $font->getData("loca"); 26 | $real_loca = array_slice($loca, 0, -1); // Not the last dummy loca entry 27 | 28 | $data = array(); 29 | 30 | foreach ($real_loca as $gid => $location) { 31 | $_offset = $offset + $loca[$gid]; 32 | $_size = $loca[$gid + 1] - $loca[$gid]; 33 | $data[$gid] = Outline::init($this, $_offset, $_size, $font); 34 | } 35 | 36 | $this->data = $data; 37 | } 38 | 39 | public function getGlyphIDs($gids = array()) { 40 | $glyphIDs = array(); 41 | 42 | foreach ($gids as $_gid) { 43 | $_glyph = $this->data[$_gid]; 44 | $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs()); 45 | } 46 | 47 | return array_unique(array_merge($gids, $glyphIDs)); 48 | } 49 | 50 | public function toHTML($n = 500) { 51 | $max = 160; 52 | $font = $this->getFont(); 53 | 54 | $head = $font->getData("head"); 55 | $head_json = json_encode($head); 56 | 57 | $os2 = $font->getData("OS/2"); 58 | $os2_json = json_encode($os2); 59 | 60 | $hmtx = $font->getData("hmtx"); 61 | $hmtx_json = json_encode($hmtx); 62 | 63 | $names = $font->getData("post", "names"); 64 | $glyphIndexArray = array_flip($font->getUnicodeCharMap()); 65 | 66 | $width = (abs($head["xMin"]) + $head["xMax"]); 67 | $height = (abs($head["yMin"]) + $head["yMax"]); 68 | 69 | $ratio = 1; 70 | if ($width > $max || $height > $max) { 71 | $ratio = max($width, $height) / $max; 72 | $width = round($width / $ratio); 73 | $height = round($height / $ratio); 74 | } 75 | 76 | $s = "

" . "Only the first $n simple glyphs are shown (" . count($this->data) . " total) 77 |
Simple glyph
78 |
Composite glyph
79 | Zoom: 80 |

81 | "; 89 | 90 | foreach ($this->data as $g => $glyph) { 91 | if ($n-- <= 0) { 92 | break; 93 | } 94 | 95 | $glyph->parseData(); 96 | 97 | $shape = array( 98 | "SVGContours" => $glyph->getSVGContours(), 99 | "xMin" => $glyph->xMin, 100 | "yMin" => $glyph->yMin, 101 | "xMax" => $glyph->xMax, 102 | "yMax" => $glyph->yMax, 103 | ); 104 | $shape_json = json_encode($shape); 105 | 106 | $type = ($glyph instanceof OutlineSimple ? "simple" : "composite"); 107 | $char = isset($glyphIndexArray[$g]) ? $glyphIndexArray[$g] : 0; 108 | $name = isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $char); 109 | $char = $char ? "&#{$glyphIndexArray[$g]};" : ""; 110 | 111 | if ($char === "" && empty($shape["SVGContours"])) { 112 | $n++; 113 | continue; 114 | } 115 | 116 | $s .= "
117 | $g 118 | $char 119 | $name 120 | "; 121 | 122 | if ($type == "composite") { 123 | foreach ($glyph->getGlyphIDs() as $_id) { 124 | $s .= "$_id "; 125 | } 126 | } 127 | 128 | $s .= "
129 | 130 |
131 | "; 132 | } 133 | 134 | return $s; 135 | } 136 | 137 | 138 | protected function _encode() { 139 | $font = $this->getFont(); 140 | $subset = $font->getSubset(); 141 | $data = $this->data; 142 | 143 | $loca = array(); 144 | 145 | $length = 0; 146 | foreach ($subset as $gid) { 147 | $loca[] = $length; 148 | 149 | $bytes = $data[$gid]->encode(); 150 | 151 | $pad = 0; 152 | $mod = $bytes % 4; 153 | if ($mod != 0) { 154 | $pad = 4 - $mod; 155 | $font->write(str_pad("", $pad, "\0"), $pad); 156 | } 157 | $length += $bytes + $pad; 158 | } 159 | 160 | $loca[] = $length; // dummy loca 161 | $font->getTableObject("loca")->data = $loca; 162 | 163 | return $length; 164 | } 165 | } -------------------------------------------------------------------------------- /maps/cp874.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !85 U+2026 ellipsis 131 | !91 U+2018 quoteleft 132 | !92 U+2019 quoteright 133 | !93 U+201C quotedblleft 134 | !94 U+201D quotedblright 135 | !95 U+2022 bullet 136 | !96 U+2013 endash 137 | !97 U+2014 emdash 138 | !A0 U+00A0 space 139 | !A1 U+0E01 kokaithai 140 | !A2 U+0E02 khokhaithai 141 | !A3 U+0E03 khokhuatthai 142 | !A4 U+0E04 khokhwaithai 143 | !A5 U+0E05 khokhonthai 144 | !A6 U+0E06 khorakhangthai 145 | !A7 U+0E07 ngonguthai 146 | !A8 U+0E08 chochanthai 147 | !A9 U+0E09 chochingthai 148 | !AA U+0E0A chochangthai 149 | !AB U+0E0B sosothai 150 | !AC U+0E0C chochoethai 151 | !AD U+0E0D yoyingthai 152 | !AE U+0E0E dochadathai 153 | !AF U+0E0F topatakthai 154 | !B0 U+0E10 thothanthai 155 | !B1 U+0E11 thonangmonthothai 156 | !B2 U+0E12 thophuthaothai 157 | !B3 U+0E13 nonenthai 158 | !B4 U+0E14 dodekthai 159 | !B5 U+0E15 totaothai 160 | !B6 U+0E16 thothungthai 161 | !B7 U+0E17 thothahanthai 162 | !B8 U+0E18 thothongthai 163 | !B9 U+0E19 nonuthai 164 | !BA U+0E1A bobaimaithai 165 | !BB U+0E1B poplathai 166 | !BC U+0E1C phophungthai 167 | !BD U+0E1D fofathai 168 | !BE U+0E1E phophanthai 169 | !BF U+0E1F fofanthai 170 | !C0 U+0E20 phosamphaothai 171 | !C1 U+0E21 momathai 172 | !C2 U+0E22 yoyakthai 173 | !C3 U+0E23 roruathai 174 | !C4 U+0E24 ruthai 175 | !C5 U+0E25 lolingthai 176 | !C6 U+0E26 luthai 177 | !C7 U+0E27 wowaenthai 178 | !C8 U+0E28 sosalathai 179 | !C9 U+0E29 sorusithai 180 | !CA U+0E2A sosuathai 181 | !CB U+0E2B hohipthai 182 | !CC U+0E2C lochulathai 183 | !CD U+0E2D oangthai 184 | !CE U+0E2E honokhukthai 185 | !CF U+0E2F paiyannoithai 186 | !D0 U+0E30 saraathai 187 | !D1 U+0E31 maihanakatthai 188 | !D2 U+0E32 saraaathai 189 | !D3 U+0E33 saraamthai 190 | !D4 U+0E34 saraithai 191 | !D5 U+0E35 saraiithai 192 | !D6 U+0E36 sarauethai 193 | !D7 U+0E37 saraueethai 194 | !D8 U+0E38 sarauthai 195 | !D9 U+0E39 sarauuthai 196 | !DA U+0E3A phinthuthai 197 | !DF U+0E3F bahtthai 198 | !E0 U+0E40 saraethai 199 | !E1 U+0E41 saraaethai 200 | !E2 U+0E42 saraothai 201 | !E3 U+0E43 saraaimaimuanthai 202 | !E4 U+0E44 saraaimaimalaithai 203 | !E5 U+0E45 lakkhangyaothai 204 | !E6 U+0E46 maiyamokthai 205 | !E7 U+0E47 maitaikhuthai 206 | !E8 U+0E48 maiekthai 207 | !E9 U+0E49 maithothai 208 | !EA U+0E4A maitrithai 209 | !EB U+0E4B maichattawathai 210 | !EC U+0E4C thanthakhatthai 211 | !ED U+0E4D nikhahitthai 212 | !EE U+0E4E yamakkanthai 213 | !EF U+0E4F fongmanthai 214 | !F0 U+0E50 zerothai 215 | !F1 U+0E51 onethai 216 | !F2 U+0E52 twothai 217 | !F3 U+0E53 threethai 218 | !F4 U+0E54 fourthai 219 | !F5 U+0E55 fivethai 220 | !F6 U+0E56 sixthai 221 | !F7 U+0E57 seventhai 222 | !F8 U+0E58 eightthai 223 | !F9 U+0E59 ninethai 224 | !FA U+0E5A angkhankhuthai 225 | !FB U+0E5B khomutthai 226 | -------------------------------------------------------------------------------- /maps/cp1253.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !83 U+0192 florin 132 | !84 U+201E quotedblbase 133 | !85 U+2026 ellipsis 134 | !86 U+2020 dagger 135 | !87 U+2021 daggerdbl 136 | !89 U+2030 perthousand 137 | !8B U+2039 guilsinglleft 138 | !91 U+2018 quoteleft 139 | !92 U+2019 quoteright 140 | !93 U+201C quotedblleft 141 | !94 U+201D quotedblright 142 | !95 U+2022 bullet 143 | !96 U+2013 endash 144 | !97 U+2014 emdash 145 | !99 U+2122 trademark 146 | !9B U+203A guilsinglright 147 | !A0 U+00A0 space 148 | !A1 U+0385 dieresistonos 149 | !A2 U+0386 Alphatonos 150 | !A3 U+00A3 sterling 151 | !A4 U+00A4 currency 152 | !A5 U+00A5 yen 153 | !A6 U+00A6 brokenbar 154 | !A7 U+00A7 section 155 | !A8 U+00A8 dieresis 156 | !A9 U+00A9 copyright 157 | !AB U+00AB guillemotleft 158 | !AC U+00AC logicalnot 159 | !AD U+00AD hyphen 160 | !AE U+00AE registered 161 | !AF U+2015 afii00208 162 | !B0 U+00B0 degree 163 | !B1 U+00B1 plusminus 164 | !B2 U+00B2 twosuperior 165 | !B3 U+00B3 threesuperior 166 | !B4 U+0384 tonos 167 | !B5 U+00B5 mu 168 | !B6 U+00B6 paragraph 169 | !B7 U+00B7 periodcentered 170 | !B8 U+0388 Epsilontonos 171 | !B9 U+0389 Etatonos 172 | !BA U+038A Iotatonos 173 | !BB U+00BB guillemotright 174 | !BC U+038C Omicrontonos 175 | !BD U+00BD onehalf 176 | !BE U+038E Upsilontonos 177 | !BF U+038F Omegatonos 178 | !C0 U+0390 iotadieresistonos 179 | !C1 U+0391 Alpha 180 | !C2 U+0392 Beta 181 | !C3 U+0393 Gamma 182 | !C4 U+0394 Delta 183 | !C5 U+0395 Epsilon 184 | !C6 U+0396 Zeta 185 | !C7 U+0397 Eta 186 | !C8 U+0398 Theta 187 | !C9 U+0399 Iota 188 | !CA U+039A Kappa 189 | !CB U+039B Lambda 190 | !CC U+039C Mu 191 | !CD U+039D Nu 192 | !CE U+039E Xi 193 | !CF U+039F Omicron 194 | !D0 U+03A0 Pi 195 | !D1 U+03A1 Rho 196 | !D3 U+03A3 Sigma 197 | !D4 U+03A4 Tau 198 | !D5 U+03A5 Upsilon 199 | !D6 U+03A6 Phi 200 | !D7 U+03A7 Chi 201 | !D8 U+03A8 Psi 202 | !D9 U+03A9 Omega 203 | !DA U+03AA Iotadieresis 204 | !DB U+03AB Upsilondieresis 205 | !DC U+03AC alphatonos 206 | !DD U+03AD epsilontonos 207 | !DE U+03AE etatonos 208 | !DF U+03AF iotatonos 209 | !E0 U+03B0 upsilondieresistonos 210 | !E1 U+03B1 alpha 211 | !E2 U+03B2 beta 212 | !E3 U+03B3 gamma 213 | !E4 U+03B4 delta 214 | !E5 U+03B5 epsilon 215 | !E6 U+03B6 zeta 216 | !E7 U+03B7 eta 217 | !E8 U+03B8 theta 218 | !E9 U+03B9 iota 219 | !EA U+03BA kappa 220 | !EB U+03BB lambda 221 | !EC U+03BC mu 222 | !ED U+03BD nu 223 | !EE U+03BE xi 224 | !EF U+03BF omicron 225 | !F0 U+03C0 pi 226 | !F1 U+03C1 rho 227 | !F2 U+03C2 sigma1 228 | !F3 U+03C3 sigma 229 | !F4 U+03C4 tau 230 | !F5 U+03C5 upsilon 231 | !F6 U+03C6 phi 232 | !F7 U+03C7 chi 233 | !F8 U+03C8 psi 234 | !F9 U+03C9 omega 235 | !FA U+03CA iotadieresis 236 | !FB U+03CB upsilondieresis 237 | !FC U+03CC omicrontonos 238 | !FD U+03CD upsilontonos 239 | !FE U+03CE omegatonos 240 | -------------------------------------------------------------------------------- /maps/cp1255.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !83 U+0192 florin 132 | !84 U+201E quotedblbase 133 | !85 U+2026 ellipsis 134 | !86 U+2020 dagger 135 | !87 U+2021 daggerdbl 136 | !88 U+02C6 circumflex 137 | !89 U+2030 perthousand 138 | !8B U+2039 guilsinglleft 139 | !91 U+2018 quoteleft 140 | !92 U+2019 quoteright 141 | !93 U+201C quotedblleft 142 | !94 U+201D quotedblright 143 | !95 U+2022 bullet 144 | !96 U+2013 endash 145 | !97 U+2014 emdash 146 | !98 U+02DC tilde 147 | !99 U+2122 trademark 148 | !9B U+203A guilsinglright 149 | !A0 U+00A0 space 150 | !A1 U+00A1 exclamdown 151 | !A2 U+00A2 cent 152 | !A3 U+00A3 sterling 153 | !A4 U+20AA afii57636 154 | !A5 U+00A5 yen 155 | !A6 U+00A6 brokenbar 156 | !A7 U+00A7 section 157 | !A8 U+00A8 dieresis 158 | !A9 U+00A9 copyright 159 | !AA U+00D7 multiply 160 | !AB U+00AB guillemotleft 161 | !AC U+00AC logicalnot 162 | !AD U+00AD sfthyphen 163 | !AE U+00AE registered 164 | !AF U+00AF macron 165 | !B0 U+00B0 degree 166 | !B1 U+00B1 plusminus 167 | !B2 U+00B2 twosuperior 168 | !B3 U+00B3 threesuperior 169 | !B4 U+00B4 acute 170 | !B5 U+00B5 mu 171 | !B6 U+00B6 paragraph 172 | !B7 U+00B7 middot 173 | !B8 U+00B8 cedilla 174 | !B9 U+00B9 onesuperior 175 | !BA U+00F7 divide 176 | !BB U+00BB guillemotright 177 | !BC U+00BC onequarter 178 | !BD U+00BD onehalf 179 | !BE U+00BE threequarters 180 | !BF U+00BF questiondown 181 | !C0 U+05B0 afii57799 182 | !C1 U+05B1 afii57801 183 | !C2 U+05B2 afii57800 184 | !C3 U+05B3 afii57802 185 | !C4 U+05B4 afii57793 186 | !C5 U+05B5 afii57794 187 | !C6 U+05B6 afii57795 188 | !C7 U+05B7 afii57798 189 | !C8 U+05B8 afii57797 190 | !C9 U+05B9 afii57806 191 | !CB U+05BB afii57796 192 | !CC U+05BC afii57807 193 | !CD U+05BD afii57839 194 | !CE U+05BE afii57645 195 | !CF U+05BF afii57841 196 | !D0 U+05C0 afii57842 197 | !D1 U+05C1 afii57804 198 | !D2 U+05C2 afii57803 199 | !D3 U+05C3 afii57658 200 | !D4 U+05F0 afii57716 201 | !D5 U+05F1 afii57717 202 | !D6 U+05F2 afii57718 203 | !D7 U+05F3 gereshhebrew 204 | !D8 U+05F4 gershayimhebrew 205 | !E0 U+05D0 afii57664 206 | !E1 U+05D1 afii57665 207 | !E2 U+05D2 afii57666 208 | !E3 U+05D3 afii57667 209 | !E4 U+05D4 afii57668 210 | !E5 U+05D5 afii57669 211 | !E6 U+05D6 afii57670 212 | !E7 U+05D7 afii57671 213 | !E8 U+05D8 afii57672 214 | !E9 U+05D9 afii57673 215 | !EA U+05DA afii57674 216 | !EB U+05DB afii57675 217 | !EC U+05DC afii57676 218 | !ED U+05DD afii57677 219 | !EE U+05DE afii57678 220 | !EF U+05DF afii57679 221 | !F0 U+05E0 afii57680 222 | !F1 U+05E1 afii57681 223 | !F2 U+05E2 afii57682 224 | !F3 U+05E3 afii57683 225 | !F4 U+05E4 afii57684 226 | !F5 U+05E5 afii57685 227 | !F6 U+05E6 afii57686 228 | !F7 U+05E7 afii57687 229 | !F8 U+05E8 afii57688 230 | !F9 U+05E9 afii57689 231 | !FA U+05EA afii57690 232 | !FD U+200E afii299 233 | !FE U+200F afii300 234 | -------------------------------------------------------------------------------- /maps/cp1257.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !84 U+201E quotedblbase 132 | !85 U+2026 ellipsis 133 | !86 U+2020 dagger 134 | !87 U+2021 daggerdbl 135 | !89 U+2030 perthousand 136 | !8B U+2039 guilsinglleft 137 | !8D U+00A8 dieresis 138 | !8E U+02C7 caron 139 | !8F U+00B8 cedilla 140 | !91 U+2018 quoteleft 141 | !92 U+2019 quoteright 142 | !93 U+201C quotedblleft 143 | !94 U+201D quotedblright 144 | !95 U+2022 bullet 145 | !96 U+2013 endash 146 | !97 U+2014 emdash 147 | !99 U+2122 trademark 148 | !9B U+203A guilsinglright 149 | !9D U+00AF macron 150 | !9E U+02DB ogonek 151 | !A0 U+00A0 space 152 | !A2 U+00A2 cent 153 | !A3 U+00A3 sterling 154 | !A4 U+00A4 currency 155 | !A6 U+00A6 brokenbar 156 | !A7 U+00A7 section 157 | !A8 U+00D8 Oslash 158 | !A9 U+00A9 copyright 159 | !AA U+0156 Rcommaaccent 160 | !AB U+00AB guillemotleft 161 | !AC U+00AC logicalnot 162 | !AD U+00AD hyphen 163 | !AE U+00AE registered 164 | !AF U+00C6 AE 165 | !B0 U+00B0 degree 166 | !B1 U+00B1 plusminus 167 | !B2 U+00B2 twosuperior 168 | !B3 U+00B3 threesuperior 169 | !B4 U+00B4 acute 170 | !B5 U+00B5 mu 171 | !B6 U+00B6 paragraph 172 | !B7 U+00B7 periodcentered 173 | !B8 U+00F8 oslash 174 | !B9 U+00B9 onesuperior 175 | !BA U+0157 rcommaaccent 176 | !BB U+00BB guillemotright 177 | !BC U+00BC onequarter 178 | !BD U+00BD onehalf 179 | !BE U+00BE threequarters 180 | !BF U+00E6 ae 181 | !C0 U+0104 Aogonek 182 | !C1 U+012E Iogonek 183 | !C2 U+0100 Amacron 184 | !C3 U+0106 Cacute 185 | !C4 U+00C4 Adieresis 186 | !C5 U+00C5 Aring 187 | !C6 U+0118 Eogonek 188 | !C7 U+0112 Emacron 189 | !C8 U+010C Ccaron 190 | !C9 U+00C9 Eacute 191 | !CA U+0179 Zacute 192 | !CB U+0116 Edotaccent 193 | !CC U+0122 Gcommaaccent 194 | !CD U+0136 Kcommaaccent 195 | !CE U+012A Imacron 196 | !CF U+013B Lcommaaccent 197 | !D0 U+0160 Scaron 198 | !D1 U+0143 Nacute 199 | !D2 U+0145 Ncommaaccent 200 | !D3 U+00D3 Oacute 201 | !D4 U+014C Omacron 202 | !D5 U+00D5 Otilde 203 | !D6 U+00D6 Odieresis 204 | !D7 U+00D7 multiply 205 | !D8 U+0172 Uogonek 206 | !D9 U+0141 Lslash 207 | !DA U+015A Sacute 208 | !DB U+016A Umacron 209 | !DC U+00DC Udieresis 210 | !DD U+017B Zdotaccent 211 | !DE U+017D Zcaron 212 | !DF U+00DF germandbls 213 | !E0 U+0105 aogonek 214 | !E1 U+012F iogonek 215 | !E2 U+0101 amacron 216 | !E3 U+0107 cacute 217 | !E4 U+00E4 adieresis 218 | !E5 U+00E5 aring 219 | !E6 U+0119 eogonek 220 | !E7 U+0113 emacron 221 | !E8 U+010D ccaron 222 | !E9 U+00E9 eacute 223 | !EA U+017A zacute 224 | !EB U+0117 edotaccent 225 | !EC U+0123 gcommaaccent 226 | !ED U+0137 kcommaaccent 227 | !EE U+012B imacron 228 | !EF U+013C lcommaaccent 229 | !F0 U+0161 scaron 230 | !F1 U+0144 nacute 231 | !F2 U+0146 ncommaaccent 232 | !F3 U+00F3 oacute 233 | !F4 U+014D omacron 234 | !F5 U+00F5 otilde 235 | !F6 U+00F6 odieresis 236 | !F7 U+00F7 divide 237 | !F8 U+0173 uogonek 238 | !F9 U+0142 lslash 239 | !FA U+015B sacute 240 | !FB U+016B umacron 241 | !FC U+00FC udieresis 242 | !FD U+017C zdotaccent 243 | !FE U+017E zcaron 244 | !FF U+02D9 dotaccent 245 | -------------------------------------------------------------------------------- /maps/iso-8859-7.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+2018 quoteleft 163 | !A2 U+2019 quoteright 164 | !A3 U+00A3 sterling 165 | !A6 U+00A6 brokenbar 166 | !A7 U+00A7 section 167 | !A8 U+00A8 dieresis 168 | !A9 U+00A9 copyright 169 | !AB U+00AB guillemotleft 170 | !AC U+00AC logicalnot 171 | !AD U+00AD hyphen 172 | !AF U+2015 afii00208 173 | !B0 U+00B0 degree 174 | !B1 U+00B1 plusminus 175 | !B2 U+00B2 twosuperior 176 | !B3 U+00B3 threesuperior 177 | !B4 U+0384 tonos 178 | !B5 U+0385 dieresistonos 179 | !B6 U+0386 Alphatonos 180 | !B7 U+00B7 periodcentered 181 | !B8 U+0388 Epsilontonos 182 | !B9 U+0389 Etatonos 183 | !BA U+038A Iotatonos 184 | !BB U+00BB guillemotright 185 | !BC U+038C Omicrontonos 186 | !BD U+00BD onehalf 187 | !BE U+038E Upsilontonos 188 | !BF U+038F Omegatonos 189 | !C0 U+0390 iotadieresistonos 190 | !C1 U+0391 Alpha 191 | !C2 U+0392 Beta 192 | !C3 U+0393 Gamma 193 | !C4 U+0394 Delta 194 | !C5 U+0395 Epsilon 195 | !C6 U+0396 Zeta 196 | !C7 U+0397 Eta 197 | !C8 U+0398 Theta 198 | !C9 U+0399 Iota 199 | !CA U+039A Kappa 200 | !CB U+039B Lambda 201 | !CC U+039C Mu 202 | !CD U+039D Nu 203 | !CE U+039E Xi 204 | !CF U+039F Omicron 205 | !D0 U+03A0 Pi 206 | !D1 U+03A1 Rho 207 | !D3 U+03A3 Sigma 208 | !D4 U+03A4 Tau 209 | !D5 U+03A5 Upsilon 210 | !D6 U+03A6 Phi 211 | !D7 U+03A7 Chi 212 | !D8 U+03A8 Psi 213 | !D9 U+03A9 Omega 214 | !DA U+03AA Iotadieresis 215 | !DB U+03AB Upsilondieresis 216 | !DC U+03AC alphatonos 217 | !DD U+03AD epsilontonos 218 | !DE U+03AE etatonos 219 | !DF U+03AF iotatonos 220 | !E0 U+03B0 upsilondieresistonos 221 | !E1 U+03B1 alpha 222 | !E2 U+03B2 beta 223 | !E3 U+03B3 gamma 224 | !E4 U+03B4 delta 225 | !E5 U+03B5 epsilon 226 | !E6 U+03B6 zeta 227 | !E7 U+03B7 eta 228 | !E8 U+03B8 theta 229 | !E9 U+03B9 iota 230 | !EA U+03BA kappa 231 | !EB U+03BB lambda 232 | !EC U+03BC mu 233 | !ED U+03BD nu 234 | !EE U+03BE xi 235 | !EF U+03BF omicron 236 | !F0 U+03C0 pi 237 | !F1 U+03C1 rho 238 | !F2 U+03C2 sigma1 239 | !F3 U+03C3 sigma 240 | !F4 U+03C4 tau 241 | !F5 U+03C5 upsilon 242 | !F6 U+03C6 phi 243 | !F7 U+03C7 chi 244 | !F8 U+03C8 psi 245 | !F9 U+03C9 omega 246 | !FA U+03CA iotadieresis 247 | !FB U+03CB upsilondieresis 248 | !FC U+03CC omicrontonos 249 | !FD U+03CD upsilontonos 250 | !FE U+03CE omegatonos 251 | -------------------------------------------------------------------------------- /maps/cp1258.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !83 U+0192 florin 132 | !84 U+201E quotedblbase 133 | !85 U+2026 ellipsis 134 | !86 U+2020 dagger 135 | !87 U+2021 daggerdbl 136 | !88 U+02C6 circumflex 137 | !89 U+2030 perthousand 138 | !8B U+2039 guilsinglleft 139 | !8C U+0152 OE 140 | !91 U+2018 quoteleft 141 | !92 U+2019 quoteright 142 | !93 U+201C quotedblleft 143 | !94 U+201D quotedblright 144 | !95 U+2022 bullet 145 | !96 U+2013 endash 146 | !97 U+2014 emdash 147 | !98 U+02DC tilde 148 | !99 U+2122 trademark 149 | !9B U+203A guilsinglright 150 | !9C U+0153 oe 151 | !9F U+0178 Ydieresis 152 | !A0 U+00A0 space 153 | !A1 U+00A1 exclamdown 154 | !A2 U+00A2 cent 155 | !A3 U+00A3 sterling 156 | !A4 U+00A4 currency 157 | !A5 U+00A5 yen 158 | !A6 U+00A6 brokenbar 159 | !A7 U+00A7 section 160 | !A8 U+00A8 dieresis 161 | !A9 U+00A9 copyright 162 | !AA U+00AA ordfeminine 163 | !AB U+00AB guillemotleft 164 | !AC U+00AC logicalnot 165 | !AD U+00AD hyphen 166 | !AE U+00AE registered 167 | !AF U+00AF macron 168 | !B0 U+00B0 degree 169 | !B1 U+00B1 plusminus 170 | !B2 U+00B2 twosuperior 171 | !B3 U+00B3 threesuperior 172 | !B4 U+00B4 acute 173 | !B5 U+00B5 mu 174 | !B6 U+00B6 paragraph 175 | !B7 U+00B7 periodcentered 176 | !B8 U+00B8 cedilla 177 | !B9 U+00B9 onesuperior 178 | !BA U+00BA ordmasculine 179 | !BB U+00BB guillemotright 180 | !BC U+00BC onequarter 181 | !BD U+00BD onehalf 182 | !BE U+00BE threequarters 183 | !BF U+00BF questiondown 184 | !C0 U+00C0 Agrave 185 | !C1 U+00C1 Aacute 186 | !C2 U+00C2 Acircumflex 187 | !C3 U+0102 Abreve 188 | !C4 U+00C4 Adieresis 189 | !C5 U+00C5 Aring 190 | !C6 U+00C6 AE 191 | !C7 U+00C7 Ccedilla 192 | !C8 U+00C8 Egrave 193 | !C9 U+00C9 Eacute 194 | !CA U+00CA Ecircumflex 195 | !CB U+00CB Edieresis 196 | !CC U+0300 gravecomb 197 | !CD U+00CD Iacute 198 | !CE U+00CE Icircumflex 199 | !CF U+00CF Idieresis 200 | !D0 U+0110 Dcroat 201 | !D1 U+00D1 Ntilde 202 | !D2 U+0309 hookabovecomb 203 | !D3 U+00D3 Oacute 204 | !D4 U+00D4 Ocircumflex 205 | !D5 U+01A0 Ohorn 206 | !D6 U+00D6 Odieresis 207 | !D7 U+00D7 multiply 208 | !D8 U+00D8 Oslash 209 | !D9 U+00D9 Ugrave 210 | !DA U+00DA Uacute 211 | !DB U+00DB Ucircumflex 212 | !DC U+00DC Udieresis 213 | !DD U+01AF Uhorn 214 | !DE U+0303 tildecomb 215 | !DF U+00DF germandbls 216 | !E0 U+00E0 agrave 217 | !E1 U+00E1 aacute 218 | !E2 U+00E2 acircumflex 219 | !E3 U+0103 abreve 220 | !E4 U+00E4 adieresis 221 | !E5 U+00E5 aring 222 | !E6 U+00E6 ae 223 | !E7 U+00E7 ccedilla 224 | !E8 U+00E8 egrave 225 | !E9 U+00E9 eacute 226 | !EA U+00EA ecircumflex 227 | !EB U+00EB edieresis 228 | !EC U+0301 acutecomb 229 | !ED U+00ED iacute 230 | !EE U+00EE icircumflex 231 | !EF U+00EF idieresis 232 | !F0 U+0111 dcroat 233 | !F1 U+00F1 ntilde 234 | !F2 U+0323 dotbelowcomb 235 | !F3 U+00F3 oacute 236 | !F4 U+00F4 ocircumflex 237 | !F5 U+01A1 ohorn 238 | !F6 U+00F6 odieresis 239 | !F7 U+00F7 divide 240 | !F8 U+00F8 oslash 241 | !F9 U+00F9 ugrave 242 | !FA U+00FA uacute 243 | !FB U+00FB ucircumflex 244 | !FC U+00FC udieresis 245 | !FD U+01B0 uhorn 246 | !FE U+20AB dong 247 | !FF U+00FF ydieresis 248 | -------------------------------------------------------------------------------- /maps/cp1254.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !83 U+0192 florin 132 | !84 U+201E quotedblbase 133 | !85 U+2026 ellipsis 134 | !86 U+2020 dagger 135 | !87 U+2021 daggerdbl 136 | !88 U+02C6 circumflex 137 | !89 U+2030 perthousand 138 | !8A U+0160 Scaron 139 | !8B U+2039 guilsinglleft 140 | !8C U+0152 OE 141 | !91 U+2018 quoteleft 142 | !92 U+2019 quoteright 143 | !93 U+201C quotedblleft 144 | !94 U+201D quotedblright 145 | !95 U+2022 bullet 146 | !96 U+2013 endash 147 | !97 U+2014 emdash 148 | !98 U+02DC tilde 149 | !99 U+2122 trademark 150 | !9A U+0161 scaron 151 | !9B U+203A guilsinglright 152 | !9C U+0153 oe 153 | !9F U+0178 Ydieresis 154 | !A0 U+00A0 space 155 | !A1 U+00A1 exclamdown 156 | !A2 U+00A2 cent 157 | !A3 U+00A3 sterling 158 | !A4 U+00A4 currency 159 | !A5 U+00A5 yen 160 | !A6 U+00A6 brokenbar 161 | !A7 U+00A7 section 162 | !A8 U+00A8 dieresis 163 | !A9 U+00A9 copyright 164 | !AA U+00AA ordfeminine 165 | !AB U+00AB guillemotleft 166 | !AC U+00AC logicalnot 167 | !AD U+00AD hyphen 168 | !AE U+00AE registered 169 | !AF U+00AF macron 170 | !B0 U+00B0 degree 171 | !B1 U+00B1 plusminus 172 | !B2 U+00B2 twosuperior 173 | !B3 U+00B3 threesuperior 174 | !B4 U+00B4 acute 175 | !B5 U+00B5 mu 176 | !B6 U+00B6 paragraph 177 | !B7 U+00B7 periodcentered 178 | !B8 U+00B8 cedilla 179 | !B9 U+00B9 onesuperior 180 | !BA U+00BA ordmasculine 181 | !BB U+00BB guillemotright 182 | !BC U+00BC onequarter 183 | !BD U+00BD onehalf 184 | !BE U+00BE threequarters 185 | !BF U+00BF questiondown 186 | !C0 U+00C0 Agrave 187 | !C1 U+00C1 Aacute 188 | !C2 U+00C2 Acircumflex 189 | !C3 U+00C3 Atilde 190 | !C4 U+00C4 Adieresis 191 | !C5 U+00C5 Aring 192 | !C6 U+00C6 AE 193 | !C7 U+00C7 Ccedilla 194 | !C8 U+00C8 Egrave 195 | !C9 U+00C9 Eacute 196 | !CA U+00CA Ecircumflex 197 | !CB U+00CB Edieresis 198 | !CC U+00CC Igrave 199 | !CD U+00CD Iacute 200 | !CE U+00CE Icircumflex 201 | !CF U+00CF Idieresis 202 | !D0 U+011E Gbreve 203 | !D1 U+00D1 Ntilde 204 | !D2 U+00D2 Ograve 205 | !D3 U+00D3 Oacute 206 | !D4 U+00D4 Ocircumflex 207 | !D5 U+00D5 Otilde 208 | !D6 U+00D6 Odieresis 209 | !D7 U+00D7 multiply 210 | !D8 U+00D8 Oslash 211 | !D9 U+00D9 Ugrave 212 | !DA U+00DA Uacute 213 | !DB U+00DB Ucircumflex 214 | !DC U+00DC Udieresis 215 | !DD U+0130 Idotaccent 216 | !DE U+015E Scedilla 217 | !DF U+00DF germandbls 218 | !E0 U+00E0 agrave 219 | !E1 U+00E1 aacute 220 | !E2 U+00E2 acircumflex 221 | !E3 U+00E3 atilde 222 | !E4 U+00E4 adieresis 223 | !E5 U+00E5 aring 224 | !E6 U+00E6 ae 225 | !E7 U+00E7 ccedilla 226 | !E8 U+00E8 egrave 227 | !E9 U+00E9 eacute 228 | !EA U+00EA ecircumflex 229 | !EB U+00EB edieresis 230 | !EC U+00EC igrave 231 | !ED U+00ED iacute 232 | !EE U+00EE icircumflex 233 | !EF U+00EF idieresis 234 | !F0 U+011F gbreve 235 | !F1 U+00F1 ntilde 236 | !F2 U+00F2 ograve 237 | !F3 U+00F3 oacute 238 | !F4 U+00F4 ocircumflex 239 | !F5 U+00F5 otilde 240 | !F6 U+00F6 odieresis 241 | !F7 U+00F7 divide 242 | !F8 U+00F8 oslash 243 | !F9 U+00F9 ugrave 244 | !FA U+00FA uacute 245 | !FB U+00FB ucircumflex 246 | !FC U+00FC udieresis 247 | !FD U+0131 dotlessi 248 | !FE U+015F scedilla 249 | !FF U+00FF ydieresis 250 | -------------------------------------------------------------------------------- /maps/cp1252.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !83 U+0192 florin 132 | !84 U+201E quotedblbase 133 | !85 U+2026 ellipsis 134 | !86 U+2020 dagger 135 | !87 U+2021 daggerdbl 136 | !88 U+02C6 circumflex 137 | !89 U+2030 perthousand 138 | !8A U+0160 Scaron 139 | !8B U+2039 guilsinglleft 140 | !8C U+0152 OE 141 | !8E U+017D Zcaron 142 | !91 U+2018 quoteleft 143 | !92 U+2019 quoteright 144 | !93 U+201C quotedblleft 145 | !94 U+201D quotedblright 146 | !95 U+2022 bullet 147 | !96 U+2013 endash 148 | !97 U+2014 emdash 149 | !98 U+02DC tilde 150 | !99 U+2122 trademark 151 | !9A U+0161 scaron 152 | !9B U+203A guilsinglright 153 | !9C U+0153 oe 154 | !9E U+017E zcaron 155 | !9F U+0178 Ydieresis 156 | !A0 U+00A0 space 157 | !A1 U+00A1 exclamdown 158 | !A2 U+00A2 cent 159 | !A3 U+00A3 sterling 160 | !A4 U+00A4 currency 161 | !A5 U+00A5 yen 162 | !A6 U+00A6 brokenbar 163 | !A7 U+00A7 section 164 | !A8 U+00A8 dieresis 165 | !A9 U+00A9 copyright 166 | !AA U+00AA ordfeminine 167 | !AB U+00AB guillemotleft 168 | !AC U+00AC logicalnot 169 | !AD U+00AD hyphen 170 | !AE U+00AE registered 171 | !AF U+00AF macron 172 | !B0 U+00B0 degree 173 | !B1 U+00B1 plusminus 174 | !B2 U+00B2 twosuperior 175 | !B3 U+00B3 threesuperior 176 | !B4 U+00B4 acute 177 | !B5 U+00B5 mu 178 | !B6 U+00B6 paragraph 179 | !B7 U+00B7 periodcentered 180 | !B8 U+00B8 cedilla 181 | !B9 U+00B9 onesuperior 182 | !BA U+00BA ordmasculine 183 | !BB U+00BB guillemotright 184 | !BC U+00BC onequarter 185 | !BD U+00BD onehalf 186 | !BE U+00BE threequarters 187 | !BF U+00BF questiondown 188 | !C0 U+00C0 Agrave 189 | !C1 U+00C1 Aacute 190 | !C2 U+00C2 Acircumflex 191 | !C3 U+00C3 Atilde 192 | !C4 U+00C4 Adieresis 193 | !C5 U+00C5 Aring 194 | !C6 U+00C6 AE 195 | !C7 U+00C7 Ccedilla 196 | !C8 U+00C8 Egrave 197 | !C9 U+00C9 Eacute 198 | !CA U+00CA Ecircumflex 199 | !CB U+00CB Edieresis 200 | !CC U+00CC Igrave 201 | !CD U+00CD Iacute 202 | !CE U+00CE Icircumflex 203 | !CF U+00CF Idieresis 204 | !D0 U+00D0 Eth 205 | !D1 U+00D1 Ntilde 206 | !D2 U+00D2 Ograve 207 | !D3 U+00D3 Oacute 208 | !D4 U+00D4 Ocircumflex 209 | !D5 U+00D5 Otilde 210 | !D6 U+00D6 Odieresis 211 | !D7 U+00D7 multiply 212 | !D8 U+00D8 Oslash 213 | !D9 U+00D9 Ugrave 214 | !DA U+00DA Uacute 215 | !DB U+00DB Ucircumflex 216 | !DC U+00DC Udieresis 217 | !DD U+00DD Yacute 218 | !DE U+00DE Thorn 219 | !DF U+00DF germandbls 220 | !E0 U+00E0 agrave 221 | !E1 U+00E1 aacute 222 | !E2 U+00E2 acircumflex 223 | !E3 U+00E3 atilde 224 | !E4 U+00E4 adieresis 225 | !E5 U+00E5 aring 226 | !E6 U+00E6 ae 227 | !E7 U+00E7 ccedilla 228 | !E8 U+00E8 egrave 229 | !E9 U+00E9 eacute 230 | !EA U+00EA ecircumflex 231 | !EB U+00EB edieresis 232 | !EC U+00EC igrave 233 | !ED U+00ED iacute 234 | !EE U+00EE icircumflex 235 | !EF U+00EF idieresis 236 | !F0 U+00F0 eth 237 | !F1 U+00F1 ntilde 238 | !F2 U+00F2 ograve 239 | !F3 U+00F3 oacute 240 | !F4 U+00F4 ocircumflex 241 | !F5 U+00F5 otilde 242 | !F6 U+00F6 odieresis 243 | !F7 U+00F7 divide 244 | !F8 U+00F8 oslash 245 | !F9 U+00F9 ugrave 246 | !FA U+00FA uacute 247 | !FB U+00FB ucircumflex 248 | !FC U+00FC udieresis 249 | !FD U+00FD yacute 250 | !FE U+00FE thorn 251 | !FF U+00FF ydieresis 252 | -------------------------------------------------------------------------------- /maps/cp1250.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+20AC Euro 130 | !82 U+201A quotesinglbase 131 | !84 U+201E quotedblbase 132 | !85 U+2026 ellipsis 133 | !86 U+2020 dagger 134 | !87 U+2021 daggerdbl 135 | !89 U+2030 perthousand 136 | !8A U+0160 Scaron 137 | !8B U+2039 guilsinglleft 138 | !8C U+015A Sacute 139 | !8D U+0164 Tcaron 140 | !8E U+017D Zcaron 141 | !8F U+0179 Zacute 142 | !91 U+2018 quoteleft 143 | !92 U+2019 quoteright 144 | !93 U+201C quotedblleft 145 | !94 U+201D quotedblright 146 | !95 U+2022 bullet 147 | !96 U+2013 endash 148 | !97 U+2014 emdash 149 | !99 U+2122 trademark 150 | !9A U+0161 scaron 151 | !9B U+203A guilsinglright 152 | !9C U+015B sacute 153 | !9D U+0165 tcaron 154 | !9E U+017E zcaron 155 | !9F U+017A zacute 156 | !A0 U+00A0 space 157 | !A1 U+02C7 caron 158 | !A2 U+02D8 breve 159 | !A3 U+0141 Lslash 160 | !A4 U+00A4 currency 161 | !A5 U+0104 Aogonek 162 | !A6 U+00A6 brokenbar 163 | !A7 U+00A7 section 164 | !A8 U+00A8 dieresis 165 | !A9 U+00A9 copyright 166 | !AA U+015E Scedilla 167 | !AB U+00AB guillemotleft 168 | !AC U+00AC logicalnot 169 | !AD U+00AD hyphen 170 | !AE U+00AE registered 171 | !AF U+017B Zdotaccent 172 | !B0 U+00B0 degree 173 | !B1 U+00B1 plusminus 174 | !B2 U+02DB ogonek 175 | !B3 U+0142 lslash 176 | !B4 U+00B4 acute 177 | !B5 U+00B5 mu 178 | !B6 U+00B6 paragraph 179 | !B7 U+00B7 periodcentered 180 | !B8 U+00B8 cedilla 181 | !B9 U+0105 aogonek 182 | !BA U+015F scedilla 183 | !BB U+00BB guillemotright 184 | !BC U+013D Lcaron 185 | !BD U+02DD hungarumlaut 186 | !BE U+013E lcaron 187 | !BF U+017C zdotaccent 188 | !C0 U+0154 Racute 189 | !C1 U+00C1 Aacute 190 | !C2 U+00C2 Acircumflex 191 | !C3 U+0102 Abreve 192 | !C4 U+00C4 Adieresis 193 | !C5 U+0139 Lacute 194 | !C6 U+0106 Cacute 195 | !C7 U+00C7 Ccedilla 196 | !C8 U+010C Ccaron 197 | !C9 U+00C9 Eacute 198 | !CA U+0118 Eogonek 199 | !CB U+00CB Edieresis 200 | !CC U+011A Ecaron 201 | !CD U+00CD Iacute 202 | !CE U+00CE Icircumflex 203 | !CF U+010E Dcaron 204 | !D0 U+0110 Dcroat 205 | !D1 U+0143 Nacute 206 | !D2 U+0147 Ncaron 207 | !D3 U+00D3 Oacute 208 | !D4 U+00D4 Ocircumflex 209 | !D5 U+0150 Ohungarumlaut 210 | !D6 U+00D6 Odieresis 211 | !D7 U+00D7 multiply 212 | !D8 U+0158 Rcaron 213 | !D9 U+016E Uring 214 | !DA U+00DA Uacute 215 | !DB U+0170 Uhungarumlaut 216 | !DC U+00DC Udieresis 217 | !DD U+00DD Yacute 218 | !DE U+0162 Tcommaaccent 219 | !DF U+00DF germandbls 220 | !E0 U+0155 racute 221 | !E1 U+00E1 aacute 222 | !E2 U+00E2 acircumflex 223 | !E3 U+0103 abreve 224 | !E4 U+00E4 adieresis 225 | !E5 U+013A lacute 226 | !E6 U+0107 cacute 227 | !E7 U+00E7 ccedilla 228 | !E8 U+010D ccaron 229 | !E9 U+00E9 eacute 230 | !EA U+0119 eogonek 231 | !EB U+00EB edieresis 232 | !EC U+011B ecaron 233 | !ED U+00ED iacute 234 | !EE U+00EE icircumflex 235 | !EF U+010F dcaron 236 | !F0 U+0111 dcroat 237 | !F1 U+0144 nacute 238 | !F2 U+0148 ncaron 239 | !F3 U+00F3 oacute 240 | !F4 U+00F4 ocircumflex 241 | !F5 U+0151 ohungarumlaut 242 | !F6 U+00F6 odieresis 243 | !F7 U+00F7 divide 244 | !F8 U+0159 rcaron 245 | !F9 U+016F uring 246 | !FA U+00FA uacute 247 | !FB U+0171 uhungarumlaut 248 | !FC U+00FC udieresis 249 | !FD U+00FD yacute 250 | !FE U+0163 tcommaaccent 251 | !FF U+02D9 dotaccent 252 | -------------------------------------------------------------------------------- /maps/iso-8859-2.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+0104 Aogonek 163 | !A2 U+02D8 breve 164 | !A3 U+0141 Lslash 165 | !A4 U+00A4 currency 166 | !A5 U+013D Lcaron 167 | !A6 U+015A Sacute 168 | !A7 U+00A7 section 169 | !A8 U+00A8 dieresis 170 | !A9 U+0160 Scaron 171 | !AA U+015E Scedilla 172 | !AB U+0164 Tcaron 173 | !AC U+0179 Zacute 174 | !AD U+00AD hyphen 175 | !AE U+017D Zcaron 176 | !AF U+017B Zdotaccent 177 | !B0 U+00B0 degree 178 | !B1 U+0105 aogonek 179 | !B2 U+02DB ogonek 180 | !B3 U+0142 lslash 181 | !B4 U+00B4 acute 182 | !B5 U+013E lcaron 183 | !B6 U+015B sacute 184 | !B7 U+02C7 caron 185 | !B8 U+00B8 cedilla 186 | !B9 U+0161 scaron 187 | !BA U+015F scedilla 188 | !BB U+0165 tcaron 189 | !BC U+017A zacute 190 | !BD U+02DD hungarumlaut 191 | !BE U+017E zcaron 192 | !BF U+017C zdotaccent 193 | !C0 U+0154 Racute 194 | !C1 U+00C1 Aacute 195 | !C2 U+00C2 Acircumflex 196 | !C3 U+0102 Abreve 197 | !C4 U+00C4 Adieresis 198 | !C5 U+0139 Lacute 199 | !C6 U+0106 Cacute 200 | !C7 U+00C7 Ccedilla 201 | !C8 U+010C Ccaron 202 | !C9 U+00C9 Eacute 203 | !CA U+0118 Eogonek 204 | !CB U+00CB Edieresis 205 | !CC U+011A Ecaron 206 | !CD U+00CD Iacute 207 | !CE U+00CE Icircumflex 208 | !CF U+010E Dcaron 209 | !D0 U+0110 Dcroat 210 | !D1 U+0143 Nacute 211 | !D2 U+0147 Ncaron 212 | !D3 U+00D3 Oacute 213 | !D4 U+00D4 Ocircumflex 214 | !D5 U+0150 Ohungarumlaut 215 | !D6 U+00D6 Odieresis 216 | !D7 U+00D7 multiply 217 | !D8 U+0158 Rcaron 218 | !D9 U+016E Uring 219 | !DA U+00DA Uacute 220 | !DB U+0170 Uhungarumlaut 221 | !DC U+00DC Udieresis 222 | !DD U+00DD Yacute 223 | !DE U+0162 Tcommaaccent 224 | !DF U+00DF germandbls 225 | !E0 U+0155 racute 226 | !E1 U+00E1 aacute 227 | !E2 U+00E2 acircumflex 228 | !E3 U+0103 abreve 229 | !E4 U+00E4 adieresis 230 | !E5 U+013A lacute 231 | !E6 U+0107 cacute 232 | !E7 U+00E7 ccedilla 233 | !E8 U+010D ccaron 234 | !E9 U+00E9 eacute 235 | !EA U+0119 eogonek 236 | !EB U+00EB edieresis 237 | !EC U+011B ecaron 238 | !ED U+00ED iacute 239 | !EE U+00EE icircumflex 240 | !EF U+010F dcaron 241 | !F0 U+0111 dcroat 242 | !F1 U+0144 nacute 243 | !F2 U+0148 ncaron 244 | !F3 U+00F3 oacute 245 | !F4 U+00F4 ocircumflex 246 | !F5 U+0151 ohungarumlaut 247 | !F6 U+00F6 odieresis 248 | !F7 U+00F7 divide 249 | !F8 U+0159 rcaron 250 | !F9 U+016F uring 251 | !FA U+00FA uacute 252 | !FB U+0171 uhungarumlaut 253 | !FC U+00FC udieresis 254 | !FD U+00FD yacute 255 | !FE U+0163 tcommaaccent 256 | !FF U+02D9 dotaccent 257 | -------------------------------------------------------------------------------- /maps/iso-8859-15.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+00A1 exclamdown 163 | !A2 U+00A2 cent 164 | !A3 U+00A3 sterling 165 | !A4 U+20AC Euro 166 | !A5 U+00A5 yen 167 | !A6 U+0160 Scaron 168 | !A7 U+00A7 section 169 | !A8 U+0161 scaron 170 | !A9 U+00A9 copyright 171 | !AA U+00AA ordfeminine 172 | !AB U+00AB guillemotleft 173 | !AC U+00AC logicalnot 174 | !AD U+00AD hyphen 175 | !AE U+00AE registered 176 | !AF U+00AF macron 177 | !B0 U+00B0 degree 178 | !B1 U+00B1 plusminus 179 | !B2 U+00B2 twosuperior 180 | !B3 U+00B3 threesuperior 181 | !B4 U+017D Zcaron 182 | !B5 U+00B5 mu 183 | !B6 U+00B6 paragraph 184 | !B7 U+00B7 periodcentered 185 | !B8 U+017E zcaron 186 | !B9 U+00B9 onesuperior 187 | !BA U+00BA ordmasculine 188 | !BB U+00BB guillemotright 189 | !BC U+0152 OE 190 | !BD U+0153 oe 191 | !BE U+0178 Ydieresis 192 | !BF U+00BF questiondown 193 | !C0 U+00C0 Agrave 194 | !C1 U+00C1 Aacute 195 | !C2 U+00C2 Acircumflex 196 | !C3 U+00C3 Atilde 197 | !C4 U+00C4 Adieresis 198 | !C5 U+00C5 Aring 199 | !C6 U+00C6 AE 200 | !C7 U+00C7 Ccedilla 201 | !C8 U+00C8 Egrave 202 | !C9 U+00C9 Eacute 203 | !CA U+00CA Ecircumflex 204 | !CB U+00CB Edieresis 205 | !CC U+00CC Igrave 206 | !CD U+00CD Iacute 207 | !CE U+00CE Icircumflex 208 | !CF U+00CF Idieresis 209 | !D0 U+00D0 Eth 210 | !D1 U+00D1 Ntilde 211 | !D2 U+00D2 Ograve 212 | !D3 U+00D3 Oacute 213 | !D4 U+00D4 Ocircumflex 214 | !D5 U+00D5 Otilde 215 | !D6 U+00D6 Odieresis 216 | !D7 U+00D7 multiply 217 | !D8 U+00D8 Oslash 218 | !D9 U+00D9 Ugrave 219 | !DA U+00DA Uacute 220 | !DB U+00DB Ucircumflex 221 | !DC U+00DC Udieresis 222 | !DD U+00DD Yacute 223 | !DE U+00DE Thorn 224 | !DF U+00DF germandbls 225 | !E0 U+00E0 agrave 226 | !E1 U+00E1 aacute 227 | !E2 U+00E2 acircumflex 228 | !E3 U+00E3 atilde 229 | !E4 U+00E4 adieresis 230 | !E5 U+00E5 aring 231 | !E6 U+00E6 ae 232 | !E7 U+00E7 ccedilla 233 | !E8 U+00E8 egrave 234 | !E9 U+00E9 eacute 235 | !EA U+00EA ecircumflex 236 | !EB U+00EB edieresis 237 | !EC U+00EC igrave 238 | !ED U+00ED iacute 239 | !EE U+00EE icircumflex 240 | !EF U+00EF idieresis 241 | !F0 U+00F0 eth 242 | !F1 U+00F1 ntilde 243 | !F2 U+00F2 ograve 244 | !F3 U+00F3 oacute 245 | !F4 U+00F4 ocircumflex 246 | !F5 U+00F5 otilde 247 | !F6 U+00F6 odieresis 248 | !F7 U+00F7 divide 249 | !F8 U+00F8 oslash 250 | !F9 U+00F9 ugrave 251 | !FA U+00FA uacute 252 | !FB U+00FB ucircumflex 253 | !FC U+00FC udieresis 254 | !FD U+00FD yacute 255 | !FE U+00FE thorn 256 | !FF U+00FF ydieresis 257 | -------------------------------------------------------------------------------- /maps/iso-8859-4.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+0104 Aogonek 163 | !A2 U+0138 kgreenlandic 164 | !A3 U+0156 Rcommaaccent 165 | !A4 U+00A4 currency 166 | !A5 U+0128 Itilde 167 | !A6 U+013B Lcommaaccent 168 | !A7 U+00A7 section 169 | !A8 U+00A8 dieresis 170 | !A9 U+0160 Scaron 171 | !AA U+0112 Emacron 172 | !AB U+0122 Gcommaaccent 173 | !AC U+0166 Tbar 174 | !AD U+00AD hyphen 175 | !AE U+017D Zcaron 176 | !AF U+00AF macron 177 | !B0 U+00B0 degree 178 | !B1 U+0105 aogonek 179 | !B2 U+02DB ogonek 180 | !B3 U+0157 rcommaaccent 181 | !B4 U+00B4 acute 182 | !B5 U+0129 itilde 183 | !B6 U+013C lcommaaccent 184 | !B7 U+02C7 caron 185 | !B8 U+00B8 cedilla 186 | !B9 U+0161 scaron 187 | !BA U+0113 emacron 188 | !BB U+0123 gcommaaccent 189 | !BC U+0167 tbar 190 | !BD U+014A Eng 191 | !BE U+017E zcaron 192 | !BF U+014B eng 193 | !C0 U+0100 Amacron 194 | !C1 U+00C1 Aacute 195 | !C2 U+00C2 Acircumflex 196 | !C3 U+00C3 Atilde 197 | !C4 U+00C4 Adieresis 198 | !C5 U+00C5 Aring 199 | !C6 U+00C6 AE 200 | !C7 U+012E Iogonek 201 | !C8 U+010C Ccaron 202 | !C9 U+00C9 Eacute 203 | !CA U+0118 Eogonek 204 | !CB U+00CB Edieresis 205 | !CC U+0116 Edotaccent 206 | !CD U+00CD Iacute 207 | !CE U+00CE Icircumflex 208 | !CF U+012A Imacron 209 | !D0 U+0110 Dcroat 210 | !D1 U+0145 Ncommaaccent 211 | !D2 U+014C Omacron 212 | !D3 U+0136 Kcommaaccent 213 | !D4 U+00D4 Ocircumflex 214 | !D5 U+00D5 Otilde 215 | !D6 U+00D6 Odieresis 216 | !D7 U+00D7 multiply 217 | !D8 U+00D8 Oslash 218 | !D9 U+0172 Uogonek 219 | !DA U+00DA Uacute 220 | !DB U+00DB Ucircumflex 221 | !DC U+00DC Udieresis 222 | !DD U+0168 Utilde 223 | !DE U+016A Umacron 224 | !DF U+00DF germandbls 225 | !E0 U+0101 amacron 226 | !E1 U+00E1 aacute 227 | !E2 U+00E2 acircumflex 228 | !E3 U+00E3 atilde 229 | !E4 U+00E4 adieresis 230 | !E5 U+00E5 aring 231 | !E6 U+00E6 ae 232 | !E7 U+012F iogonek 233 | !E8 U+010D ccaron 234 | !E9 U+00E9 eacute 235 | !EA U+0119 eogonek 236 | !EB U+00EB edieresis 237 | !EC U+0117 edotaccent 238 | !ED U+00ED iacute 239 | !EE U+00EE icircumflex 240 | !EF U+012B imacron 241 | !F0 U+0111 dcroat 242 | !F1 U+0146 ncommaaccent 243 | !F2 U+014D omacron 244 | !F3 U+0137 kcommaaccent 245 | !F4 U+00F4 ocircumflex 246 | !F5 U+00F5 otilde 247 | !F6 U+00F6 odieresis 248 | !F7 U+00F7 divide 249 | !F8 U+00F8 oslash 250 | !F9 U+0173 uogonek 251 | !FA U+00FA uacute 252 | !FB U+00FB ucircumflex 253 | !FC U+00FC udieresis 254 | !FD U+0169 utilde 255 | !FE U+016B umacron 256 | !FF U+02D9 dotaccent 257 | -------------------------------------------------------------------------------- /maps/iso-8859-1.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+00A1 exclamdown 163 | !A2 U+00A2 cent 164 | !A3 U+00A3 sterling 165 | !A4 U+00A4 currency 166 | !A5 U+00A5 yen 167 | !A6 U+00A6 brokenbar 168 | !A7 U+00A7 section 169 | !A8 U+00A8 dieresis 170 | !A9 U+00A9 copyright 171 | !AA U+00AA ordfeminine 172 | !AB U+00AB guillemotleft 173 | !AC U+00AC logicalnot 174 | !AD U+00AD hyphen 175 | !AE U+00AE registered 176 | !AF U+00AF macron 177 | !B0 U+00B0 degree 178 | !B1 U+00B1 plusminus 179 | !B2 U+00B2 twosuperior 180 | !B3 U+00B3 threesuperior 181 | !B4 U+00B4 acute 182 | !B5 U+00B5 mu 183 | !B6 U+00B6 paragraph 184 | !B7 U+00B7 periodcentered 185 | !B8 U+00B8 cedilla 186 | !B9 U+00B9 onesuperior 187 | !BA U+00BA ordmasculine 188 | !BB U+00BB guillemotright 189 | !BC U+00BC onequarter 190 | !BD U+00BD onehalf 191 | !BE U+00BE threequarters 192 | !BF U+00BF questiondown 193 | !C0 U+00C0 Agrave 194 | !C1 U+00C1 Aacute 195 | !C2 U+00C2 Acircumflex 196 | !C3 U+00C3 Atilde 197 | !C4 U+00C4 Adieresis 198 | !C5 U+00C5 Aring 199 | !C6 U+00C6 AE 200 | !C7 U+00C7 Ccedilla 201 | !C8 U+00C8 Egrave 202 | !C9 U+00C9 Eacute 203 | !CA U+00CA Ecircumflex 204 | !CB U+00CB Edieresis 205 | !CC U+00CC Igrave 206 | !CD U+00CD Iacute 207 | !CE U+00CE Icircumflex 208 | !CF U+00CF Idieresis 209 | !D0 U+00D0 Eth 210 | !D1 U+00D1 Ntilde 211 | !D2 U+00D2 Ograve 212 | !D3 U+00D3 Oacute 213 | !D4 U+00D4 Ocircumflex 214 | !D5 U+00D5 Otilde 215 | !D6 U+00D6 Odieresis 216 | !D7 U+00D7 multiply 217 | !D8 U+00D8 Oslash 218 | !D9 U+00D9 Ugrave 219 | !DA U+00DA Uacute 220 | !DB U+00DB Ucircumflex 221 | !DC U+00DC Udieresis 222 | !DD U+00DD Yacute 223 | !DE U+00DE Thorn 224 | !DF U+00DF germandbls 225 | !E0 U+00E0 agrave 226 | !E1 U+00E1 aacute 227 | !E2 U+00E2 acircumflex 228 | !E3 U+00E3 atilde 229 | !E4 U+00E4 adieresis 230 | !E5 U+00E5 aring 231 | !E6 U+00E6 ae 232 | !E7 U+00E7 ccedilla 233 | !E8 U+00E8 egrave 234 | !E9 U+00E9 eacute 235 | !EA U+00EA ecircumflex 236 | !EB U+00EB edieresis 237 | !EC U+00EC igrave 238 | !ED U+00ED iacute 239 | !EE U+00EE icircumflex 240 | !EF U+00EF idieresis 241 | !F0 U+00F0 eth 242 | !F1 U+00F1 ntilde 243 | !F2 U+00F2 ograve 244 | !F3 U+00F3 oacute 245 | !F4 U+00F4 ocircumflex 246 | !F5 U+00F5 otilde 247 | !F6 U+00F6 odieresis 248 | !F7 U+00F7 divide 249 | !F8 U+00F8 oslash 250 | !F9 U+00F9 ugrave 251 | !FA U+00FA uacute 252 | !FB U+00FB ucircumflex 253 | !FC U+00FC udieresis 254 | !FD U+00FD yacute 255 | !FE U+00FE thorn 256 | !FF U+00FF ydieresis 257 | -------------------------------------------------------------------------------- /maps/iso-8859-9.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+00A1 exclamdown 163 | !A2 U+00A2 cent 164 | !A3 U+00A3 sterling 165 | !A4 U+00A4 currency 166 | !A5 U+00A5 yen 167 | !A6 U+00A6 brokenbar 168 | !A7 U+00A7 section 169 | !A8 U+00A8 dieresis 170 | !A9 U+00A9 copyright 171 | !AA U+00AA ordfeminine 172 | !AB U+00AB guillemotleft 173 | !AC U+00AC logicalnot 174 | !AD U+00AD hyphen 175 | !AE U+00AE registered 176 | !AF U+00AF macron 177 | !B0 U+00B0 degree 178 | !B1 U+00B1 plusminus 179 | !B2 U+00B2 twosuperior 180 | !B3 U+00B3 threesuperior 181 | !B4 U+00B4 acute 182 | !B5 U+00B5 mu 183 | !B6 U+00B6 paragraph 184 | !B7 U+00B7 periodcentered 185 | !B8 U+00B8 cedilla 186 | !B9 U+00B9 onesuperior 187 | !BA U+00BA ordmasculine 188 | !BB U+00BB guillemotright 189 | !BC U+00BC onequarter 190 | !BD U+00BD onehalf 191 | !BE U+00BE threequarters 192 | !BF U+00BF questiondown 193 | !C0 U+00C0 Agrave 194 | !C1 U+00C1 Aacute 195 | !C2 U+00C2 Acircumflex 196 | !C3 U+00C3 Atilde 197 | !C4 U+00C4 Adieresis 198 | !C5 U+00C5 Aring 199 | !C6 U+00C6 AE 200 | !C7 U+00C7 Ccedilla 201 | !C8 U+00C8 Egrave 202 | !C9 U+00C9 Eacute 203 | !CA U+00CA Ecircumflex 204 | !CB U+00CB Edieresis 205 | !CC U+00CC Igrave 206 | !CD U+00CD Iacute 207 | !CE U+00CE Icircumflex 208 | !CF U+00CF Idieresis 209 | !D0 U+011E Gbreve 210 | !D1 U+00D1 Ntilde 211 | !D2 U+00D2 Ograve 212 | !D3 U+00D3 Oacute 213 | !D4 U+00D4 Ocircumflex 214 | !D5 U+00D5 Otilde 215 | !D6 U+00D6 Odieresis 216 | !D7 U+00D7 multiply 217 | !D8 U+00D8 Oslash 218 | !D9 U+00D9 Ugrave 219 | !DA U+00DA Uacute 220 | !DB U+00DB Ucircumflex 221 | !DC U+00DC Udieresis 222 | !DD U+0130 Idotaccent 223 | !DE U+015E Scedilla 224 | !DF U+00DF germandbls 225 | !E0 U+00E0 agrave 226 | !E1 U+00E1 aacute 227 | !E2 U+00E2 acircumflex 228 | !E3 U+00E3 atilde 229 | !E4 U+00E4 adieresis 230 | !E5 U+00E5 aring 231 | !E6 U+00E6 ae 232 | !E7 U+00E7 ccedilla 233 | !E8 U+00E8 egrave 234 | !E9 U+00E9 eacute 235 | !EA U+00EA ecircumflex 236 | !EB U+00EB edieresis 237 | !EC U+00EC igrave 238 | !ED U+00ED iacute 239 | !EE U+00EE icircumflex 240 | !EF U+00EF idieresis 241 | !F0 U+011F gbreve 242 | !F1 U+00F1 ntilde 243 | !F2 U+00F2 ograve 244 | !F3 U+00F3 oacute 245 | !F4 U+00F4 ocircumflex 246 | !F5 U+00F5 otilde 247 | !F6 U+00F6 odieresis 248 | !F7 U+00F7 divide 249 | !F8 U+00F8 oslash 250 | !F9 U+00F9 ugrave 251 | !FA U+00FA uacute 252 | !FB U+00FB ucircumflex 253 | !FC U+00FC udieresis 254 | !FD U+0131 dotlessi 255 | !FE U+015F scedilla 256 | !FF U+00FF ydieresis 257 | -------------------------------------------------------------------------------- /maps/iso-8859-16.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+0104 Aogonek 163 | !A2 U+0105 aogonek 164 | !A3 U+0141 Lslash 165 | !A4 U+20AC Euro 166 | !A5 U+201E quotedblbase 167 | !A6 U+0160 Scaron 168 | !A7 U+00A7 section 169 | !A8 U+0161 scaron 170 | !A9 U+00A9 copyright 171 | !AA U+0218 Scommaaccent 172 | !AB U+00AB guillemotleft 173 | !AC U+0179 Zacute 174 | !AD U+00AD hyphen 175 | !AE U+017A zacute 176 | !AF U+017B Zdotaccent 177 | !B0 U+00B0 degree 178 | !B1 U+00B1 plusminus 179 | !B2 U+010C Ccaron 180 | !B3 U+0142 lslash 181 | !B4 U+017D Zcaron 182 | !B5 U+201D quotedblright 183 | !B6 U+00B6 paragraph 184 | !B7 U+00B7 periodcentered 185 | !B8 U+017E zcaron 186 | !B9 U+010D ccaron 187 | !BA U+0219 scommaaccent 188 | !BB U+00BB guillemotright 189 | !BC U+0152 OE 190 | !BD U+0153 oe 191 | !BE U+0178 Ydieresis 192 | !BF U+017C zdotaccent 193 | !C0 U+00C0 Agrave 194 | !C1 U+00C1 Aacute 195 | !C2 U+00C2 Acircumflex 196 | !C3 U+0102 Abreve 197 | !C4 U+00C4 Adieresis 198 | !C5 U+0106 Cacute 199 | !C6 U+00C6 AE 200 | !C7 U+00C7 Ccedilla 201 | !C8 U+00C8 Egrave 202 | !C9 U+00C9 Eacute 203 | !CA U+00CA Ecircumflex 204 | !CB U+00CB Edieresis 205 | !CC U+00CC Igrave 206 | !CD U+00CD Iacute 207 | !CE U+00CE Icircumflex 208 | !CF U+00CF Idieresis 209 | !D0 U+0110 Dcroat 210 | !D1 U+0143 Nacute 211 | !D2 U+00D2 Ograve 212 | !D3 U+00D3 Oacute 213 | !D4 U+00D4 Ocircumflex 214 | !D5 U+0150 Ohungarumlaut 215 | !D6 U+00D6 Odieresis 216 | !D7 U+015A Sacute 217 | !D8 U+0170 Uhungarumlaut 218 | !D9 U+00D9 Ugrave 219 | !DA U+00DA Uacute 220 | !DB U+00DB Ucircumflex 221 | !DC U+00DC Udieresis 222 | !DD U+0118 Eogonek 223 | !DE U+021A Tcommaaccent 224 | !DF U+00DF germandbls 225 | !E0 U+00E0 agrave 226 | !E1 U+00E1 aacute 227 | !E2 U+00E2 acircumflex 228 | !E3 U+0103 abreve 229 | !E4 U+00E4 adieresis 230 | !E5 U+0107 cacute 231 | !E6 U+00E6 ae 232 | !E7 U+00E7 ccedilla 233 | !E8 U+00E8 egrave 234 | !E9 U+00E9 eacute 235 | !EA U+00EA ecircumflex 236 | !EB U+00EB edieresis 237 | !EC U+00EC igrave 238 | !ED U+00ED iacute 239 | !EE U+00EE icircumflex 240 | !EF U+00EF idieresis 241 | !F0 U+0111 dcroat 242 | !F1 U+0144 nacute 243 | !F2 U+00F2 ograve 244 | !F3 U+00F3 oacute 245 | !F4 U+00F4 ocircumflex 246 | !F5 U+0151 ohungarumlaut 247 | !F6 U+00F6 odieresis 248 | !F7 U+015B sacute 249 | !F8 U+0171 uhungarumlaut 250 | !F9 U+00F9 ugrave 251 | !FA U+00FA uacute 252 | !FB U+00FB ucircumflex 253 | !FC U+00FC udieresis 254 | !FD U+0119 eogonek 255 | !FE U+021B tcommaaccent 256 | !FF U+00FF ydieresis 257 | -------------------------------------------------------------------------------- /maps/iso-8859-11.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+0E01 kokaithai 163 | !A2 U+0E02 khokhaithai 164 | !A3 U+0E03 khokhuatthai 165 | !A4 U+0E04 khokhwaithai 166 | !A5 U+0E05 khokhonthai 167 | !A6 U+0E06 khorakhangthai 168 | !A7 U+0E07 ngonguthai 169 | !A8 U+0E08 chochanthai 170 | !A9 U+0E09 chochingthai 171 | !AA U+0E0A chochangthai 172 | !AB U+0E0B sosothai 173 | !AC U+0E0C chochoethai 174 | !AD U+0E0D yoyingthai 175 | !AE U+0E0E dochadathai 176 | !AF U+0E0F topatakthai 177 | !B0 U+0E10 thothanthai 178 | !B1 U+0E11 thonangmonthothai 179 | !B2 U+0E12 thophuthaothai 180 | !B3 U+0E13 nonenthai 181 | !B4 U+0E14 dodekthai 182 | !B5 U+0E15 totaothai 183 | !B6 U+0E16 thothungthai 184 | !B7 U+0E17 thothahanthai 185 | !B8 U+0E18 thothongthai 186 | !B9 U+0E19 nonuthai 187 | !BA U+0E1A bobaimaithai 188 | !BB U+0E1B poplathai 189 | !BC U+0E1C phophungthai 190 | !BD U+0E1D fofathai 191 | !BE U+0E1E phophanthai 192 | !BF U+0E1F fofanthai 193 | !C0 U+0E20 phosamphaothai 194 | !C1 U+0E21 momathai 195 | !C2 U+0E22 yoyakthai 196 | !C3 U+0E23 roruathai 197 | !C4 U+0E24 ruthai 198 | !C5 U+0E25 lolingthai 199 | !C6 U+0E26 luthai 200 | !C7 U+0E27 wowaenthai 201 | !C8 U+0E28 sosalathai 202 | !C9 U+0E29 sorusithai 203 | !CA U+0E2A sosuathai 204 | !CB U+0E2B hohipthai 205 | !CC U+0E2C lochulathai 206 | !CD U+0E2D oangthai 207 | !CE U+0E2E honokhukthai 208 | !CF U+0E2F paiyannoithai 209 | !D0 U+0E30 saraathai 210 | !D1 U+0E31 maihanakatthai 211 | !D2 U+0E32 saraaathai 212 | !D3 U+0E33 saraamthai 213 | !D4 U+0E34 saraithai 214 | !D5 U+0E35 saraiithai 215 | !D6 U+0E36 sarauethai 216 | !D7 U+0E37 saraueethai 217 | !D8 U+0E38 sarauthai 218 | !D9 U+0E39 sarauuthai 219 | !DA U+0E3A phinthuthai 220 | !DF U+0E3F bahtthai 221 | !E0 U+0E40 saraethai 222 | !E1 U+0E41 saraaethai 223 | !E2 U+0E42 saraothai 224 | !E3 U+0E43 saraaimaimuanthai 225 | !E4 U+0E44 saraaimaimalaithai 226 | !E5 U+0E45 lakkhangyaothai 227 | !E6 U+0E46 maiyamokthai 228 | !E7 U+0E47 maitaikhuthai 229 | !E8 U+0E48 maiekthai 230 | !E9 U+0E49 maithothai 231 | !EA U+0E4A maitrithai 232 | !EB U+0E4B maichattawathai 233 | !EC U+0E4C thanthakhatthai 234 | !ED U+0E4D nikhahitthai 235 | !EE U+0E4E yamakkanthai 236 | !EF U+0E4F fongmanthai 237 | !F0 U+0E50 zerothai 238 | !F1 U+0E51 onethai 239 | !F2 U+0E52 twothai 240 | !F3 U+0E53 threethai 241 | !F4 U+0E54 fourthai 242 | !F5 U+0E55 fivethai 243 | !F6 U+0E56 sixthai 244 | !F7 U+0E57 seventhai 245 | !F8 U+0E58 eightthai 246 | !F9 U+0E59 ninethai 247 | !FA U+0E5A angkhankhuthai 248 | !FB U+0E5B khomutthai 249 | -------------------------------------------------------------------------------- /maps/iso-8859-5.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0080 .notdef 130 | !81 U+0081 .notdef 131 | !82 U+0082 .notdef 132 | !83 U+0083 .notdef 133 | !84 U+0084 .notdef 134 | !85 U+0085 .notdef 135 | !86 U+0086 .notdef 136 | !87 U+0087 .notdef 137 | !88 U+0088 .notdef 138 | !89 U+0089 .notdef 139 | !8A U+008A .notdef 140 | !8B U+008B .notdef 141 | !8C U+008C .notdef 142 | !8D U+008D .notdef 143 | !8E U+008E .notdef 144 | !8F U+008F .notdef 145 | !90 U+0090 .notdef 146 | !91 U+0091 .notdef 147 | !92 U+0092 .notdef 148 | !93 U+0093 .notdef 149 | !94 U+0094 .notdef 150 | !95 U+0095 .notdef 151 | !96 U+0096 .notdef 152 | !97 U+0097 .notdef 153 | !98 U+0098 .notdef 154 | !99 U+0099 .notdef 155 | !9A U+009A .notdef 156 | !9B U+009B .notdef 157 | !9C U+009C .notdef 158 | !9D U+009D .notdef 159 | !9E U+009E .notdef 160 | !9F U+009F .notdef 161 | !A0 U+00A0 space 162 | !A1 U+0401 afii10023 163 | !A2 U+0402 afii10051 164 | !A3 U+0403 afii10052 165 | !A4 U+0404 afii10053 166 | !A5 U+0405 afii10054 167 | !A6 U+0406 afii10055 168 | !A7 U+0407 afii10056 169 | !A8 U+0408 afii10057 170 | !A9 U+0409 afii10058 171 | !AA U+040A afii10059 172 | !AB U+040B afii10060 173 | !AC U+040C afii10061 174 | !AD U+00AD hyphen 175 | !AE U+040E afii10062 176 | !AF U+040F afii10145 177 | !B0 U+0410 afii10017 178 | !B1 U+0411 afii10018 179 | !B2 U+0412 afii10019 180 | !B3 U+0413 afii10020 181 | !B4 U+0414 afii10021 182 | !B5 U+0415 afii10022 183 | !B6 U+0416 afii10024 184 | !B7 U+0417 afii10025 185 | !B8 U+0418 afii10026 186 | !B9 U+0419 afii10027 187 | !BA U+041A afii10028 188 | !BB U+041B afii10029 189 | !BC U+041C afii10030 190 | !BD U+041D afii10031 191 | !BE U+041E afii10032 192 | !BF U+041F afii10033 193 | !C0 U+0420 afii10034 194 | !C1 U+0421 afii10035 195 | !C2 U+0422 afii10036 196 | !C3 U+0423 afii10037 197 | !C4 U+0424 afii10038 198 | !C5 U+0425 afii10039 199 | !C6 U+0426 afii10040 200 | !C7 U+0427 afii10041 201 | !C8 U+0428 afii10042 202 | !C9 U+0429 afii10043 203 | !CA U+042A afii10044 204 | !CB U+042B afii10045 205 | !CC U+042C afii10046 206 | !CD U+042D afii10047 207 | !CE U+042E afii10048 208 | !CF U+042F afii10049 209 | !D0 U+0430 afii10065 210 | !D1 U+0431 afii10066 211 | !D2 U+0432 afii10067 212 | !D3 U+0433 afii10068 213 | !D4 U+0434 afii10069 214 | !D5 U+0435 afii10070 215 | !D6 U+0436 afii10072 216 | !D7 U+0437 afii10073 217 | !D8 U+0438 afii10074 218 | !D9 U+0439 afii10075 219 | !DA U+043A afii10076 220 | !DB U+043B afii10077 221 | !DC U+043C afii10078 222 | !DD U+043D afii10079 223 | !DE U+043E afii10080 224 | !DF U+043F afii10081 225 | !E0 U+0440 afii10082 226 | !E1 U+0441 afii10083 227 | !E2 U+0442 afii10084 228 | !E3 U+0443 afii10085 229 | !E4 U+0444 afii10086 230 | !E5 U+0445 afii10087 231 | !E6 U+0446 afii10088 232 | !E7 U+0447 afii10089 233 | !E8 U+0448 afii10090 234 | !E9 U+0449 afii10091 235 | !EA U+044A afii10092 236 | !EB U+044B afii10093 237 | !EC U+044C afii10094 238 | !ED U+044D afii10095 239 | !EE U+044E afii10096 240 | !EF U+044F afii10097 241 | !F0 U+2116 afii61352 242 | !F1 U+0451 afii10071 243 | !F2 U+0452 afii10099 244 | !F3 U+0453 afii10100 245 | !F4 U+0454 afii10101 246 | !F5 U+0455 afii10102 247 | !F6 U+0456 afii10103 248 | !F7 U+0457 afii10104 249 | !F8 U+0458 afii10105 250 | !F9 U+0459 afii10106 251 | !FA U+045A afii10107 252 | !FB U+045B afii10108 253 | !FC U+045C afii10109 254 | !FD U+00A7 section 255 | !FE U+045E afii10110 256 | !FF U+045F afii10193 257 | -------------------------------------------------------------------------------- /maps/koi8-r.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+2500 SF100000 130 | !81 U+2502 SF110000 131 | !82 U+250C SF010000 132 | !83 U+2510 SF030000 133 | !84 U+2514 SF020000 134 | !85 U+2518 SF040000 135 | !86 U+251C SF080000 136 | !87 U+2524 SF090000 137 | !88 U+252C SF060000 138 | !89 U+2534 SF070000 139 | !8A U+253C SF050000 140 | !8B U+2580 upblock 141 | !8C U+2584 dnblock 142 | !8D U+2588 block 143 | !8E U+258C lfblock 144 | !8F U+2590 rtblock 145 | !90 U+2591 ltshade 146 | !91 U+2592 shade 147 | !92 U+2593 dkshade 148 | !93 U+2320 integraltp 149 | !94 U+25A0 filledbox 150 | !95 U+2219 periodcentered 151 | !96 U+221A radical 152 | !97 U+2248 approxequal 153 | !98 U+2264 lessequal 154 | !99 U+2265 greaterequal 155 | !9A U+00A0 space 156 | !9B U+2321 integralbt 157 | !9C U+00B0 degree 158 | !9D U+00B2 twosuperior 159 | !9E U+00B7 periodcentered 160 | !9F U+00F7 divide 161 | !A0 U+2550 SF430000 162 | !A1 U+2551 SF240000 163 | !A2 U+2552 SF510000 164 | !A3 U+0451 afii10071 165 | !A4 U+2553 SF520000 166 | !A5 U+2554 SF390000 167 | !A6 U+2555 SF220000 168 | !A7 U+2556 SF210000 169 | !A8 U+2557 SF250000 170 | !A9 U+2558 SF500000 171 | !AA U+2559 SF490000 172 | !AB U+255A SF380000 173 | !AC U+255B SF280000 174 | !AD U+255C SF270000 175 | !AE U+255D SF260000 176 | !AF U+255E SF360000 177 | !B0 U+255F SF370000 178 | !B1 U+2560 SF420000 179 | !B2 U+2561 SF190000 180 | !B3 U+0401 afii10023 181 | !B4 U+2562 SF200000 182 | !B5 U+2563 SF230000 183 | !B6 U+2564 SF470000 184 | !B7 U+2565 SF480000 185 | !B8 U+2566 SF410000 186 | !B9 U+2567 SF450000 187 | !BA U+2568 SF460000 188 | !BB U+2569 SF400000 189 | !BC U+256A SF540000 190 | !BD U+256B SF530000 191 | !BE U+256C SF440000 192 | !BF U+00A9 copyright 193 | !C0 U+044E afii10096 194 | !C1 U+0430 afii10065 195 | !C2 U+0431 afii10066 196 | !C3 U+0446 afii10088 197 | !C4 U+0434 afii10069 198 | !C5 U+0435 afii10070 199 | !C6 U+0444 afii10086 200 | !C7 U+0433 afii10068 201 | !C8 U+0445 afii10087 202 | !C9 U+0438 afii10074 203 | !CA U+0439 afii10075 204 | !CB U+043A afii10076 205 | !CC U+043B afii10077 206 | !CD U+043C afii10078 207 | !CE U+043D afii10079 208 | !CF U+043E afii10080 209 | !D0 U+043F afii10081 210 | !D1 U+044F afii10097 211 | !D2 U+0440 afii10082 212 | !D3 U+0441 afii10083 213 | !D4 U+0442 afii10084 214 | !D5 U+0443 afii10085 215 | !D6 U+0436 afii10072 216 | !D7 U+0432 afii10067 217 | !D8 U+044C afii10094 218 | !D9 U+044B afii10093 219 | !DA U+0437 afii10073 220 | !DB U+0448 afii10090 221 | !DC U+044D afii10095 222 | !DD U+0449 afii10091 223 | !DE U+0447 afii10089 224 | !DF U+044A afii10092 225 | !E0 U+042E afii10048 226 | !E1 U+0410 afii10017 227 | !E2 U+0411 afii10018 228 | !E3 U+0426 afii10040 229 | !E4 U+0414 afii10021 230 | !E5 U+0415 afii10022 231 | !E6 U+0424 afii10038 232 | !E7 U+0413 afii10020 233 | !E8 U+0425 afii10039 234 | !E9 U+0418 afii10026 235 | !EA U+0419 afii10027 236 | !EB U+041A afii10028 237 | !EC U+041B afii10029 238 | !ED U+041C afii10030 239 | !EE U+041D afii10031 240 | !EF U+041E afii10032 241 | !F0 U+041F afii10033 242 | !F1 U+042F afii10049 243 | !F2 U+0420 afii10034 244 | !F3 U+0421 afii10035 245 | !F4 U+0422 afii10036 246 | !F5 U+0423 afii10037 247 | !F6 U+0416 afii10024 248 | !F7 U+0412 afii10019 249 | !F8 U+042C afii10046 250 | !F9 U+042B afii10045 251 | !FA U+0417 afii10025 252 | !FB U+0428 afii10042 253 | !FC U+042D afii10047 254 | !FD U+0429 afii10043 255 | !FE U+0427 afii10041 256 | !FF U+042A afii10044 257 | -------------------------------------------------------------------------------- /maps/koi8-u.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+2500 SF100000 130 | !81 U+2502 SF110000 131 | !82 U+250C SF010000 132 | !83 U+2510 SF030000 133 | !84 U+2514 SF020000 134 | !85 U+2518 SF040000 135 | !86 U+251C SF080000 136 | !87 U+2524 SF090000 137 | !88 U+252C SF060000 138 | !89 U+2534 SF070000 139 | !8A U+253C SF050000 140 | !8B U+2580 upblock 141 | !8C U+2584 dnblock 142 | !8D U+2588 block 143 | !8E U+258C lfblock 144 | !8F U+2590 rtblock 145 | !90 U+2591 ltshade 146 | !91 U+2592 shade 147 | !92 U+2593 dkshade 148 | !93 U+2320 integraltp 149 | !94 U+25A0 filledbox 150 | !95 U+2022 bullet 151 | !96 U+221A radical 152 | !97 U+2248 approxequal 153 | !98 U+2264 lessequal 154 | !99 U+2265 greaterequal 155 | !9A U+00A0 space 156 | !9B U+2321 integralbt 157 | !9C U+00B0 degree 158 | !9D U+00B2 twosuperior 159 | !9E U+00B7 periodcentered 160 | !9F U+00F7 divide 161 | !A0 U+2550 SF430000 162 | !A1 U+2551 SF240000 163 | !A2 U+2552 SF510000 164 | !A3 U+0451 afii10071 165 | !A4 U+0454 afii10101 166 | !A5 U+2554 SF390000 167 | !A6 U+0456 afii10103 168 | !A7 U+0457 afii10104 169 | !A8 U+2557 SF250000 170 | !A9 U+2558 SF500000 171 | !AA U+2559 SF490000 172 | !AB U+255A SF380000 173 | !AC U+255B SF280000 174 | !AD U+0491 afii10098 175 | !AE U+255D SF260000 176 | !AF U+255E SF360000 177 | !B0 U+255F SF370000 178 | !B1 U+2560 SF420000 179 | !B2 U+2561 SF190000 180 | !B3 U+0401 afii10023 181 | !B4 U+0404 afii10053 182 | !B5 U+2563 SF230000 183 | !B6 U+0406 afii10055 184 | !B7 U+0407 afii10056 185 | !B8 U+2566 SF410000 186 | !B9 U+2567 SF450000 187 | !BA U+2568 SF460000 188 | !BB U+2569 SF400000 189 | !BC U+256A SF540000 190 | !BD U+0490 afii10050 191 | !BE U+256C SF440000 192 | !BF U+00A9 copyright 193 | !C0 U+044E afii10096 194 | !C1 U+0430 afii10065 195 | !C2 U+0431 afii10066 196 | !C3 U+0446 afii10088 197 | !C4 U+0434 afii10069 198 | !C5 U+0435 afii10070 199 | !C6 U+0444 afii10086 200 | !C7 U+0433 afii10068 201 | !C8 U+0445 afii10087 202 | !C9 U+0438 afii10074 203 | !CA U+0439 afii10075 204 | !CB U+043A afii10076 205 | !CC U+043B afii10077 206 | !CD U+043C afii10078 207 | !CE U+043D afii10079 208 | !CF U+043E afii10080 209 | !D0 U+043F afii10081 210 | !D1 U+044F afii10097 211 | !D2 U+0440 afii10082 212 | !D3 U+0441 afii10083 213 | !D4 U+0442 afii10084 214 | !D5 U+0443 afii10085 215 | !D6 U+0436 afii10072 216 | !D7 U+0432 afii10067 217 | !D8 U+044C afii10094 218 | !D9 U+044B afii10093 219 | !DA U+0437 afii10073 220 | !DB U+0448 afii10090 221 | !DC U+044D afii10095 222 | !DD U+0449 afii10091 223 | !DE U+0447 afii10089 224 | !DF U+044A afii10092 225 | !E0 U+042E afii10048 226 | !E1 U+0410 afii10017 227 | !E2 U+0411 afii10018 228 | !E3 U+0426 afii10040 229 | !E4 U+0414 afii10021 230 | !E5 U+0415 afii10022 231 | !E6 U+0424 afii10038 232 | !E7 U+0413 afii10020 233 | !E8 U+0425 afii10039 234 | !E9 U+0418 afii10026 235 | !EA U+0419 afii10027 236 | !EB U+041A afii10028 237 | !EC U+041B afii10029 238 | !ED U+041C afii10030 239 | !EE U+041D afii10031 240 | !EF U+041E afii10032 241 | !F0 U+041F afii10033 242 | !F1 U+042F afii10049 243 | !F2 U+0420 afii10034 244 | !F3 U+0421 afii10035 245 | !F4 U+0422 afii10036 246 | !F5 U+0423 afii10037 247 | !F6 U+0416 afii10024 248 | !F7 U+0412 afii10019 249 | !F8 U+042C afii10046 250 | !F9 U+042B afii10045 251 | !FA U+0417 afii10025 252 | !FB U+0428 afii10042 253 | !FC U+042D afii10047 254 | !FD U+0429 afii10043 255 | !FE U+0427 afii10041 256 | !FF U+042A afii10044 257 | -------------------------------------------------------------------------------- /maps/cp1251.map: -------------------------------------------------------------------------------- 1 | !00 U+0000 .notdef 2 | !01 U+0001 .notdef 3 | !02 U+0002 .notdef 4 | !03 U+0003 .notdef 5 | !04 U+0004 .notdef 6 | !05 U+0005 .notdef 7 | !06 U+0006 .notdef 8 | !07 U+0007 .notdef 9 | !08 U+0008 .notdef 10 | !09 U+0009 .notdef 11 | !0A U+000A .notdef 12 | !0B U+000B .notdef 13 | !0C U+000C .notdef 14 | !0D U+000D .notdef 15 | !0E U+000E .notdef 16 | !0F U+000F .notdef 17 | !10 U+0010 .notdef 18 | !11 U+0011 .notdef 19 | !12 U+0012 .notdef 20 | !13 U+0013 .notdef 21 | !14 U+0014 .notdef 22 | !15 U+0015 .notdef 23 | !16 U+0016 .notdef 24 | !17 U+0017 .notdef 25 | !18 U+0018 .notdef 26 | !19 U+0019 .notdef 27 | !1A U+001A .notdef 28 | !1B U+001B .notdef 29 | !1C U+001C .notdef 30 | !1D U+001D .notdef 31 | !1E U+001E .notdef 32 | !1F U+001F .notdef 33 | !20 U+0020 space 34 | !21 U+0021 exclam 35 | !22 U+0022 quotedbl 36 | !23 U+0023 numbersign 37 | !24 U+0024 dollar 38 | !25 U+0025 percent 39 | !26 U+0026 ampersand 40 | !27 U+0027 quotesingle 41 | !28 U+0028 parenleft 42 | !29 U+0029 parenright 43 | !2A U+002A asterisk 44 | !2B U+002B plus 45 | !2C U+002C comma 46 | !2D U+002D hyphen 47 | !2E U+002E period 48 | !2F U+002F slash 49 | !30 U+0030 zero 50 | !31 U+0031 one 51 | !32 U+0032 two 52 | !33 U+0033 three 53 | !34 U+0034 four 54 | !35 U+0035 five 55 | !36 U+0036 six 56 | !37 U+0037 seven 57 | !38 U+0038 eight 58 | !39 U+0039 nine 59 | !3A U+003A colon 60 | !3B U+003B semicolon 61 | !3C U+003C less 62 | !3D U+003D equal 63 | !3E U+003E greater 64 | !3F U+003F question 65 | !40 U+0040 at 66 | !41 U+0041 A 67 | !42 U+0042 B 68 | !43 U+0043 C 69 | !44 U+0044 D 70 | !45 U+0045 E 71 | !46 U+0046 F 72 | !47 U+0047 G 73 | !48 U+0048 H 74 | !49 U+0049 I 75 | !4A U+004A J 76 | !4B U+004B K 77 | !4C U+004C L 78 | !4D U+004D M 79 | !4E U+004E N 80 | !4F U+004F O 81 | !50 U+0050 P 82 | !51 U+0051 Q 83 | !52 U+0052 R 84 | !53 U+0053 S 85 | !54 U+0054 T 86 | !55 U+0055 U 87 | !56 U+0056 V 88 | !57 U+0057 W 89 | !58 U+0058 X 90 | !59 U+0059 Y 91 | !5A U+005A Z 92 | !5B U+005B bracketleft 93 | !5C U+005C backslash 94 | !5D U+005D bracketright 95 | !5E U+005E asciicircum 96 | !5F U+005F underscore 97 | !60 U+0060 grave 98 | !61 U+0061 a 99 | !62 U+0062 b 100 | !63 U+0063 c 101 | !64 U+0064 d 102 | !65 U+0065 e 103 | !66 U+0066 f 104 | !67 U+0067 g 105 | !68 U+0068 h 106 | !69 U+0069 i 107 | !6A U+006A j 108 | !6B U+006B k 109 | !6C U+006C l 110 | !6D U+006D m 111 | !6E U+006E n 112 | !6F U+006F o 113 | !70 U+0070 p 114 | !71 U+0071 q 115 | !72 U+0072 r 116 | !73 U+0073 s 117 | !74 U+0074 t 118 | !75 U+0075 u 119 | !76 U+0076 v 120 | !77 U+0077 w 121 | !78 U+0078 x 122 | !79 U+0079 y 123 | !7A U+007A z 124 | !7B U+007B braceleft 125 | !7C U+007C bar 126 | !7D U+007D braceright 127 | !7E U+007E asciitilde 128 | !7F U+007F .notdef 129 | !80 U+0402 afii10051 130 | !81 U+0403 afii10052 131 | !82 U+201A quotesinglbase 132 | !83 U+0453 afii10100 133 | !84 U+201E quotedblbase 134 | !85 U+2026 ellipsis 135 | !86 U+2020 dagger 136 | !87 U+2021 daggerdbl 137 | !88 U+20AC Euro 138 | !89 U+2030 perthousand 139 | !8A U+0409 afii10058 140 | !8B U+2039 guilsinglleft 141 | !8C U+040A afii10059 142 | !8D U+040C afii10061 143 | !8E U+040B afii10060 144 | !8F U+040F afii10145 145 | !90 U+0452 afii10099 146 | !91 U+2018 quoteleft 147 | !92 U+2019 quoteright 148 | !93 U+201C quotedblleft 149 | !94 U+201D quotedblright 150 | !95 U+2022 bullet 151 | !96 U+2013 endash 152 | !97 U+2014 emdash 153 | !99 U+2122 trademark 154 | !9A U+0459 afii10106 155 | !9B U+203A guilsinglright 156 | !9C U+045A afii10107 157 | !9D U+045C afii10109 158 | !9E U+045B afii10108 159 | !9F U+045F afii10193 160 | !A0 U+00A0 space 161 | !A1 U+040E afii10062 162 | !A2 U+045E afii10110 163 | !A3 U+0408 afii10057 164 | !A4 U+00A4 currency 165 | !A5 U+0490 afii10050 166 | !A6 U+00A6 brokenbar 167 | !A7 U+00A7 section 168 | !A8 U+0401 afii10023 169 | !A9 U+00A9 copyright 170 | !AA U+0404 afii10053 171 | !AB U+00AB guillemotleft 172 | !AC U+00AC logicalnot 173 | !AD U+00AD hyphen 174 | !AE U+00AE registered 175 | !AF U+0407 afii10056 176 | !B0 U+00B0 degree 177 | !B1 U+00B1 plusminus 178 | !B2 U+0406 afii10055 179 | !B3 U+0456 afii10103 180 | !B4 U+0491 afii10098 181 | !B5 U+00B5 mu 182 | !B6 U+00B6 paragraph 183 | !B7 U+00B7 periodcentered 184 | !B8 U+0451 afii10071 185 | !B9 U+2116 afii61352 186 | !BA U+0454 afii10101 187 | !BB U+00BB guillemotright 188 | !BC U+0458 afii10105 189 | !BD U+0405 afii10054 190 | !BE U+0455 afii10102 191 | !BF U+0457 afii10104 192 | !C0 U+0410 afii10017 193 | !C1 U+0411 afii10018 194 | !C2 U+0412 afii10019 195 | !C3 U+0413 afii10020 196 | !C4 U+0414 afii10021 197 | !C5 U+0415 afii10022 198 | !C6 U+0416 afii10024 199 | !C7 U+0417 afii10025 200 | !C8 U+0418 afii10026 201 | !C9 U+0419 afii10027 202 | !CA U+041A afii10028 203 | !CB U+041B afii10029 204 | !CC U+041C afii10030 205 | !CD U+041D afii10031 206 | !CE U+041E afii10032 207 | !CF U+041F afii10033 208 | !D0 U+0420 afii10034 209 | !D1 U+0421 afii10035 210 | !D2 U+0422 afii10036 211 | !D3 U+0423 afii10037 212 | !D4 U+0424 afii10038 213 | !D5 U+0425 afii10039 214 | !D6 U+0426 afii10040 215 | !D7 U+0427 afii10041 216 | !D8 U+0428 afii10042 217 | !D9 U+0429 afii10043 218 | !DA U+042A afii10044 219 | !DB U+042B afii10045 220 | !DC U+042C afii10046 221 | !DD U+042D afii10047 222 | !DE U+042E afii10048 223 | !DF U+042F afii10049 224 | !E0 U+0430 afii10065 225 | !E1 U+0431 afii10066 226 | !E2 U+0432 afii10067 227 | !E3 U+0433 afii10068 228 | !E4 U+0434 afii10069 229 | !E5 U+0435 afii10070 230 | !E6 U+0436 afii10072 231 | !E7 U+0437 afii10073 232 | !E8 U+0438 afii10074 233 | !E9 U+0439 afii10075 234 | !EA U+043A afii10076 235 | !EB U+043B afii10077 236 | !EC U+043C afii10078 237 | !ED U+043D afii10079 238 | !EE U+043E afii10080 239 | !EF U+043F afii10081 240 | !F0 U+0440 afii10082 241 | !F1 U+0441 afii10083 242 | !F2 U+0442 afii10084 243 | !F3 U+0443 afii10085 244 | !F4 U+0444 afii10086 245 | !F5 U+0445 afii10087 246 | !F6 U+0446 afii10088 247 | !F7 U+0447 afii10089 248 | !F8 U+0448 afii10090 249 | !F9 U+0449 afii10091 250 | !FA U+044A afii10092 251 | !FB U+044B afii10093 252 | !FC U+044C afii10094 253 | !FD U+044D afii10095 254 | !FE U+044E afii10096 255 | !FF U+044F afii10097 256 | -------------------------------------------------------------------------------- /src/FontLib/Table/Type/name.php: -------------------------------------------------------------------------------- 1 | self::uint16, 21 | "count" => self::uint16, 22 | "stringOffset" => self::uint16, 23 | ); 24 | 25 | const NAME_COPYRIGHT = 0; 26 | const NAME_NAME = 1; 27 | const NAME_SUBFAMILY = 2; 28 | const NAME_SUBFAMILY_ID = 3; 29 | const NAME_FULL_NAME = 4; 30 | const NAME_VERSION = 5; 31 | const NAME_POSTSCRIPT_NAME = 6; 32 | const NAME_TRADEMARK = 7; 33 | const NAME_MANUFACTURER = 8; 34 | const NAME_DESIGNER = 9; 35 | const NAME_DESCRIPTION = 10; 36 | const NAME_VENDOR_URL = 11; 37 | const NAME_DESIGNER_URL = 12; 38 | const NAME_LICENSE = 13; 39 | const NAME_LICENSE_URL = 14; 40 | const NAME_PREFERRE_FAMILY = 16; 41 | const NAME_PREFERRE_SUBFAMILY = 17; 42 | const NAME_COMPAT_FULL_NAME = 18; 43 | const NAME_SAMPLE_TEXT = 19; 44 | 45 | static $nameIdCodes = array( 46 | 0 => "Copyright", 47 | 1 => "FontName", 48 | 2 => "FontSubfamily", 49 | 3 => "UniqueID", 50 | 4 => "FullName", 51 | 5 => "Version", 52 | 6 => "PostScriptName", 53 | 7 => "Trademark", 54 | 8 => "Manufacturer", 55 | 9 => "Designer", 56 | 10 => "Description", 57 | 11 => "FontVendorURL", 58 | 12 => "FontDesignerURL", 59 | 13 => "LicenseDescription", 60 | 14 => "LicenseURL", 61 | // 15 62 | 16 => "PreferredFamily", 63 | 17 => "PreferredSubfamily", 64 | 18 => "CompatibleFullName", 65 | 19 => "SampleText", 66 | ); 67 | 68 | static $platforms = array( 69 | 0 => "Unicode", 70 | 1 => "Macintosh", 71 | // 2 => Reserved 72 | 3 => "Microsoft", 73 | ); 74 | 75 | static $platformSpecific = array( 76 | // Unicode 77 | 0 => array( 78 | 0 => "Default semantics", 79 | 1 => "Version 1.1 semantics", 80 | 2 => "ISO 10646 1993 semantics (deprecated)", 81 | 3 => "Unicode 2.0 or later semantics", 82 | ), 83 | 84 | // Macintosh 85 | 1 => array( 86 | 0 => "Roman", 87 | 1 => "Japanese", 88 | 2 => "Traditional Chinese", 89 | 3 => "Korean", 90 | 4 => "Arabic", 91 | 5 => "Hebrew", 92 | 6 => "Greek", 93 | 7 => "Russian", 94 | 8 => "RSymbol", 95 | 9 => "Devanagari", 96 | 10 => "Gurmukhi", 97 | 11 => "Gujarati", 98 | 12 => "Oriya", 99 | 13 => "Bengali", 100 | 14 => "Tamil", 101 | 15 => "Telugu", 102 | 16 => "Kannada", 103 | 17 => "Malayalam", 104 | 18 => "Sinhalese", 105 | 19 => "Burmese", 106 | 20 => "Khmer", 107 | 21 => "Thai", 108 | 22 => "Laotian", 109 | 23 => "Georgian", 110 | 24 => "Armenian", 111 | 25 => "Simplified Chinese", 112 | 26 => "Tibetan", 113 | 27 => "Mongolian", 114 | 28 => "Geez", 115 | 29 => "Slavic", 116 | 30 => "Vietnamese", 117 | 31 => "Sindhi", 118 | ), 119 | 120 | // Microsoft 121 | 3 => array( 122 | 0 => "Symbol", 123 | 1 => "Unicode BMP (UCS-2)", 124 | 2 => "ShiftJIS", 125 | 3 => "PRC", 126 | 4 => "Big5", 127 | 5 => "Wansung", 128 | 6 => "Johab", 129 | // 7 => Reserved 130 | // 8 => Reserved 131 | // 9 => Reserved 132 | 10 => "Unicode UCS-4", 133 | ), 134 | ); 135 | 136 | protected function _parse() { 137 | $font = $this->getFont(); 138 | 139 | $tableOffset = $font->pos(); 140 | 141 | $data = $font->unpack(self::$header_format); 142 | 143 | $records = array(); 144 | for ($i = 0; $i < $data["count"]; $i++) { 145 | $record = new nameRecord(); 146 | $record_data = $font->unpack(nameRecord::$format); 147 | $record->map($record_data); 148 | 149 | $records[] = $record; 150 | } 151 | 152 | $system_encodings = mb_list_encodings(); 153 | $system_encodings = array_change_key_case(array_fill_keys($system_encodings, true), CASE_UPPER); 154 | 155 | $names = array(); 156 | foreach ($records as $record) { 157 | $font->seek($tableOffset + $data["stringOffset"] + $record->offset); 158 | $record->stringRaw = $font->read($record->length); 159 | 160 | $encoding = null; 161 | switch ($record->platformID) { 162 | case 3: 163 | switch ($record->platformSpecificID) { 164 | case 2: 165 | if (\array_key_exists("SJIS", $system_encodings)) { 166 | $encoding = "SJIS"; 167 | } 168 | break; 169 | case 3: 170 | if (\array_key_exists("GB18030", $system_encodings)) { 171 | $encoding = "GB18030"; 172 | } 173 | break; 174 | case 4: 175 | if (\array_key_exists("BIG-5", $system_encodings)) { 176 | $encoding = "BIG-5"; 177 | } 178 | break; 179 | case 5: 180 | if (\array_key_exists("UHC", $system_encodings)) { 181 | $encoding = "UHC"; 182 | } 183 | break; 184 | } 185 | break; 186 | } 187 | if ($encoding === null) { 188 | $encoding = "UTF-16"; 189 | } 190 | 191 | $record->string = mb_convert_encoding($record->stringRaw, "UTF-8", $encoding); 192 | if (strpos($record->string, "\0") !== false) { 193 | $record->string = str_replace("\0", "", $record->string); 194 | } 195 | $names[$record->nameID] = $record; 196 | } 197 | 198 | $data["records"] = $names; 199 | 200 | $this->data = $data; 201 | } 202 | 203 | protected function _encode() { 204 | $font = $this->getFont(); 205 | 206 | /** @var nameRecord[] $records */ 207 | $records = $this->data["records"]; 208 | $count_records = \count($records); 209 | 210 | $this->data["count"] = $count_records; 211 | $this->data["stringOffset"] = 6 + ($count_records * 12); // 6 => uint16 * 3, 12 => sizeof self::$record_format 212 | 213 | $length = $font->pack(self::$header_format, $this->data); 214 | 215 | $offset = 0; 216 | 217 | /** @var nameRecord[] $records_to_encode */ 218 | $records_to_encode = array(); 219 | foreach ($records as $record) { 220 | $encoded_record = new nameRecord(); 221 | $encoded_record->platformID = 3; 222 | $encoded_record->platformSpecificID = 1; 223 | $encoded_record->languageID = $record->languageID; 224 | $encoded_record->nameID = $record->nameID; 225 | $encoded_record->offset = $offset; 226 | $encoded_record->string = $record->string; 227 | $encoded_record->length = mb_strlen($encoded_record->getUTF16(), "8bit"); 228 | $records_to_encode[] = $encoded_record; 229 | 230 | $offset += $encoded_record->length; 231 | $length += $font->pack(nameRecord::$format, (array)$encoded_record); 232 | } 233 | 234 | foreach ($records_to_encode as $record) { 235 | $str = $record->getUTF16(); 236 | $length += $font->write($str, mb_strlen($str, "8bit")); 237 | } 238 | 239 | return $length; 240 | } 241 | } 242 | -------------------------------------------------------------------------------- /src/FontLib/AdobeFontMetrics.php: -------------------------------------------------------------------------------- 1 | font = $font; 28 | } 29 | 30 | function write($file, $encoding = null) { 31 | $map_data = array(); 32 | 33 | if ($encoding) { 34 | $encoding = preg_replace("/[^a-z0-9-_]/", "", $encoding); 35 | $map_file = dirname(__FILE__) . "/../../maps/$encoding.map"; 36 | if (!file_exists($map_file)) { 37 | throw new \Exception("Unknown encoding ($encoding)"); 38 | } 39 | 40 | $map = new EncodingMap($map_file); 41 | $map_data = $map->parse(); 42 | } 43 | 44 | $this->f = fopen($file, "w+"); 45 | 46 | $font = $this->font; 47 | 48 | $this->startSection("FontMetrics", 4.1); 49 | $this->addPair("Notice", "Converted by PHP-font-lib"); 50 | $this->addPair("Comment", "https://github.com/dompdf/php-font-lib"); 51 | 52 | $encoding_scheme = ($encoding ? $encoding : "FontSpecific"); 53 | $this->addPair("EncodingScheme", $encoding_scheme); 54 | 55 | $records = $font->getData("name", "records"); 56 | foreach ($records as $id => $record) { 57 | if (!isset(name::$nameIdCodes[$id]) || preg_match("/[\r\n]/", $record->string)) { 58 | continue; 59 | } 60 | 61 | $this->addPair(name::$nameIdCodes[$id], $record->string); 62 | } 63 | 64 | $os2 = $font->getData("OS/2"); 65 | $this->addPair("Weight", ($os2["usWeightClass"] > 400 ? "Bold" : "Medium")); 66 | 67 | $post = $font->getData("post"); 68 | $this->addPair("ItalicAngle", $post["italicAngle"]); 69 | $this->addPair("IsFixedPitch", ($post["isFixedPitch"] ? "true" : "false")); 70 | $this->addPair("UnderlineThickness", $font->normalizeFUnit($post["underlineThickness"])); 71 | $this->addPair("UnderlinePosition", $font->normalizeFUnit($post["underlinePosition"])); 72 | 73 | $hhea = $font->getData("hhea"); 74 | 75 | if (isset($hhea["ascent"])) { 76 | $this->addPair("FontHeightOffset", $font->normalizeFUnit($hhea["lineGap"])); 77 | } 78 | else { 79 | $this->addPair("FontHeightOffset", $font->normalizeFUnit($os2["typoLineGap"])); 80 | } 81 | 82 | $glyf = $font->getData("glyf"); 83 | $glyphIndexArray = $font->getUnicodeCharMap(); 84 | $hasGlyphs = $glyf instanceof glyf && is_array($glyphIndexArray); 85 | 86 | // capHeight is based on capital H 87 | if ($hasGlyphs && \array_key_exists(72, $glyphIndexArray)) { 88 | $upperH = $glyf[$glyphIndexArray[72]]; 89 | $upperH->parseData(); 90 | $this->addPair("CapHeight", $font->normalizeFUnit($upperH->yMax)); 91 | } 92 | 93 | // xHeight is based on lowercase x 94 | if ($hasGlyphs && \array_key_exists(120, $glyphIndexArray)) { 95 | $lowerX = $glyf[$glyphIndexArray[120]]; 96 | $lowerX->parseData(); 97 | $this->addPair("XHeight", $font->normalizeFUnit($lowerX->yMax)); 98 | } 99 | 100 | // ascender is based on lowercase d 101 | if ($hasGlyphs && \array_key_exists(100, $glyphIndexArray)) { 102 | $lowerD = $glyf[$glyphIndexArray[100]]; 103 | $lowerD->parseData(); 104 | $this->addPair("Ascender", $font->normalizeFUnit($lowerD->yMax)); 105 | } elseif (isset($hhea["ascent"])) { 106 | $this->addPair("Ascender", $font->normalizeFUnit($hhea["ascent"])); 107 | } 108 | else { 109 | $this->addPair("Ascender", $font->normalizeFUnit($os2["typoAscender"])); 110 | } 111 | 112 | // descender is based on lowercase p 113 | if ($hasGlyphs && \array_key_exists(112, $glyphIndexArray)) { 114 | $lowerP = $glyf[$glyphIndexArray[112]]; 115 | $lowerP->parseData(); 116 | $this->addPair("Descender", $font->normalizeFUnit($lowerP->yMin)); 117 | } elseif (isset($hhea["descent"])) { 118 | $this->addPair("Descender", $font->normalizeFUnit($hhea["descent"])); 119 | } 120 | else { 121 | $this->addPair("Descender", -abs($font->normalizeFUnit($os2["typoDescender"]))); 122 | } 123 | 124 | $head = $font->getData("head"); 125 | $this->addArray("FontBBox", array( 126 | $font->normalizeFUnit($head["xMin"]), 127 | $font->normalizeFUnit($head["yMin"]), 128 | $font->normalizeFUnit($head["xMax"]), 129 | $font->normalizeFUnit($head["yMax"]), 130 | )); 131 | 132 | if ($glyphIndexArray) { 133 | $hmtx = $font->getData("hmtx"); 134 | $names = $font->getData("post", "names"); 135 | 136 | $this->startSection("CharMetrics", count($hmtx)); 137 | 138 | if ($encoding) { 139 | foreach ($map_data as $code => $value) { 140 | list($c, $name) = $value; 141 | 142 | if (!isset($glyphIndexArray[$c])) { 143 | continue; 144 | } 145 | 146 | $g = $glyphIndexArray[$c]; 147 | 148 | if (!isset($hmtx[$g])) { 149 | $hmtx[$g] = $hmtx[0]; 150 | } 151 | 152 | $this->addMetric(array( 153 | "C" => ($code > 255 ? -1 : $code), 154 | "WX" => $font->normalizeFUnit($hmtx[$g][0]), 155 | "N" => $name, 156 | )); 157 | } 158 | } 159 | else { 160 | foreach ($glyphIndexArray as $c => $g) { 161 | if (!isset($hmtx[$g])) { 162 | $hmtx[$g] = $hmtx[0]; 163 | } 164 | 165 | $this->addMetric(array( 166 | "U" => $c, 167 | "WX" => $font->normalizeFUnit($hmtx[$g][0]), 168 | "N" => (isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $c)), 169 | "G" => $g, 170 | )); 171 | } 172 | } 173 | 174 | $this->endSection("CharMetrics"); 175 | 176 | $kern = $font->getData("kern", "subtable"); 177 | $tree = is_array($kern) ? $kern["tree"] : null; 178 | 179 | if (!$encoding && is_array($tree)) { 180 | $this->startSection("KernData"); 181 | $this->startSection("KernPairs", count($tree, COUNT_RECURSIVE) - count($tree)); 182 | 183 | foreach ($tree as $left => $values) { 184 | if (!is_array($values)) { 185 | continue; 186 | } 187 | if (!isset($glyphIndexArray[$left])) { 188 | continue; 189 | } 190 | 191 | $left_gid = $glyphIndexArray[$left]; 192 | 193 | if (!isset($names[$left_gid])) { 194 | continue; 195 | } 196 | 197 | $left_name = $names[$left_gid]; 198 | 199 | $this->addLine(""); 200 | 201 | foreach ($values as $right => $value) { 202 | if (!isset($glyphIndexArray[$right])) { 203 | continue; 204 | } 205 | 206 | $right_gid = $glyphIndexArray[$right]; 207 | 208 | if (!isset($names[$right_gid])) { 209 | continue; 210 | } 211 | 212 | $right_name = $names[$right_gid]; 213 | $this->addPair("KPX", "$left_name $right_name $value"); 214 | } 215 | } 216 | 217 | $this->endSection("KernPairs"); 218 | $this->endSection("KernData"); 219 | } 220 | } 221 | 222 | $this->endSection("FontMetrics"); 223 | } 224 | 225 | function addLine($line) { 226 | fwrite($this->f, "$line\n"); 227 | } 228 | 229 | function addPair($key, $value) { 230 | $this->addLine("$key $value"); 231 | } 232 | 233 | function addArray($key, $array) { 234 | $this->addLine("$key " . implode(" ", $array)); 235 | } 236 | 237 | function addMetric($data) { 238 | $array = array(); 239 | foreach ($data as $key => $value) { 240 | $array[] = "$key $value"; 241 | } 242 | $this->addLine(implode(" ; ", $array)); 243 | } 244 | 245 | function startSection($name, $value = "") { 246 | $this->addLine("Start$name $value"); 247 | } 248 | 249 | function endSection($name) { 250 | $this->addLine("End$name"); 251 | } 252 | } 253 | -------------------------------------------------------------------------------- /src/FontLib/Glyph/OutlineComposite.php: -------------------------------------------------------------------------------- 1 | components)) { 35 | $this->parseData(); 36 | } 37 | 38 | $glyphIDs = array(); 39 | foreach ($this->components as $_component) { 40 | $glyphIDs[] = $_component->glyphIndex; 41 | 42 | $_glyph = $this->table->data[$_component->glyphIndex]; 43 | 44 | if ($_glyph !== $this) { 45 | $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs()); 46 | } 47 | } 48 | 49 | return $glyphIDs; 50 | } 51 | 52 | /*function parse() { 53 | //$this->parseData(); 54 | }*/ 55 | 56 | function parseData() { 57 | parent::parseData(); 58 | 59 | $font = $this->getFont(); 60 | 61 | do { 62 | $flags = $font->readUInt16(); 63 | $glyphIndex = $font->readUInt16(); 64 | 65 | $a = 1.0; 66 | $b = 0.0; 67 | $c = 0.0; 68 | $d = 1.0; 69 | $e = 0.0; 70 | $f = 0.0; 71 | 72 | $point_compound = null; 73 | $point_component = null; 74 | 75 | $instructions = null; 76 | 77 | if ($flags & self::ARG_1_AND_2_ARE_WORDS) { 78 | if ($flags & self::ARGS_ARE_XY_VALUES) { 79 | $e = $font->readInt16(); 80 | $f = $font->readInt16(); 81 | } 82 | else { 83 | $point_compound = $font->readUInt16(); 84 | $point_component = $font->readUInt16(); 85 | } 86 | } 87 | else { 88 | if ($flags & self::ARGS_ARE_XY_VALUES) { 89 | $e = $font->readInt8(); 90 | $f = $font->readInt8(); 91 | } 92 | else { 93 | $point_compound = $font->readUInt8(); 94 | $point_component = $font->readUInt8(); 95 | } 96 | } 97 | 98 | if ($flags & self::WE_HAVE_A_SCALE) { 99 | $a = $d = $font->readInt16(); 100 | } 101 | elseif ($flags & self::WE_HAVE_AN_X_AND_Y_SCALE) { 102 | $a = $font->readInt16(); 103 | $d = $font->readInt16(); 104 | } 105 | elseif ($flags & self::WE_HAVE_A_TWO_BY_TWO) { 106 | $a = $font->readInt16(); 107 | $b = $font->readInt16(); 108 | $c = $font->readInt16(); 109 | $d = $font->readInt16(); 110 | } 111 | 112 | //if ($flags & self::WE_HAVE_INSTRUCTIONS) { 113 | // 114 | //} 115 | 116 | $component = new OutlineComponent(); 117 | $component->flags = $flags; 118 | $component->glyphIndex = $glyphIndex; 119 | $component->a = $a; 120 | $component->b = $b; 121 | $component->c = $c; 122 | $component->d = $d; 123 | $component->e = $e; 124 | $component->f = $f; 125 | $component->point_compound = $point_compound; 126 | $component->point_component = $point_component; 127 | $component->instructions = $instructions; 128 | 129 | $this->components[] = $component; 130 | } while ($flags & self::MORE_COMPONENTS); 131 | if ($flags & self::WE_HAVE_INSTRUCTIONS) { 132 | $numInstr = $font->readUInt16(); 133 | $instr = $font->read($numInstr); 134 | $this->components[count($this->components) - 1]->instructions = pack('n', $numInstr) . $instr; 135 | } 136 | } 137 | 138 | function encode() { 139 | $font = $this->getFont(); 140 | 141 | $gids = $font->getSubset(); 142 | 143 | $size = $font->writeInt16(-1); 144 | $size += $font->writeFWord($this->xMin); 145 | $size += $font->writeFWord($this->yMin); 146 | $size += $font->writeFWord($this->xMax); 147 | $size += $font->writeFWord($this->yMax); 148 | 149 | foreach ($this->components as $_i => $_component) { 150 | $flags = 0; 151 | if ($_component->point_component === null && $_component->point_compound === null) { 152 | $flags |= self::ARGS_ARE_XY_VALUES; 153 | 154 | if (abs($_component->e) > 0x7F || abs($_component->f) > 0x7F) { 155 | $flags |= self::ARG_1_AND_2_ARE_WORDS; 156 | } 157 | } 158 | elseif ($_component->point_component > 0xFF || $_component->point_compound > 0xFF) { 159 | $flags |= self::ARG_1_AND_2_ARE_WORDS; 160 | } 161 | 162 | if ($_component->b == 0 && $_component->c == 0) { 163 | if ($_component->a == $_component->d) { 164 | if ($_component->a != 1.0) { 165 | $flags |= self::WE_HAVE_A_SCALE; 166 | } 167 | } 168 | else { 169 | $flags |= self::WE_HAVE_AN_X_AND_Y_SCALE; 170 | } 171 | } 172 | else { 173 | $flags |= self::WE_HAVE_A_TWO_BY_TWO; 174 | } 175 | 176 | if ($_i < count($this->components) - 1) { 177 | $flags |= self::MORE_COMPONENTS; 178 | } elseif($_component->instructions !== null) { 179 | $flags |= self::WE_HAVE_INSTRUCTIONS; 180 | } 181 | 182 | $size += $font->writeUInt16($flags); 183 | 184 | $new_gid = array_search($_component->glyphIndex, $gids); 185 | $size += $font->writeUInt16($new_gid); 186 | 187 | if ($flags & self::ARG_1_AND_2_ARE_WORDS) { 188 | if ($flags & self::ARGS_ARE_XY_VALUES) { 189 | $size += $font->writeInt16($_component->e); 190 | $size += $font->writeInt16($_component->f); 191 | } 192 | else { 193 | $size += $font->writeUInt16($_component->point_compound); 194 | $size += $font->writeUInt16($_component->point_component); 195 | } 196 | } 197 | else { 198 | if ($flags & self::ARGS_ARE_XY_VALUES) { 199 | $size += $font->writeInt8($_component->e); 200 | $size += $font->writeInt8($_component->f); 201 | } 202 | else { 203 | $size += $font->writeUInt8($_component->point_compound); 204 | $size += $font->writeUInt8($_component->point_component); 205 | } 206 | } 207 | 208 | if ($flags & self::WE_HAVE_A_SCALE) { 209 | $size += $font->writeInt16($_component->a); 210 | } 211 | elseif ($flags & self::WE_HAVE_AN_X_AND_Y_SCALE) { 212 | $size += $font->writeInt16($_component->a); 213 | $size += $font->writeInt16($_component->d); 214 | } 215 | elseif ($flags & self::WE_HAVE_A_TWO_BY_TWO) { 216 | $size += $font->writeInt16($_component->a); 217 | $size += $font->writeInt16($_component->b); 218 | $size += $font->writeInt16($_component->c); 219 | $size += $font->writeInt16($_component->d); 220 | } 221 | } 222 | 223 | if($_component->instructions !== null) { 224 | $size += $font->write($_component->instructions, strlen($_component->instructions)); 225 | } 226 | 227 | return $size; 228 | } 229 | 230 | public function getSVGContours() { 231 | $contours = array(); 232 | 233 | /** @var \FontLib\Table\Type\glyf $glyph_data */ 234 | $glyph_data = $this->getFont()->getTableObject("glyf"); 235 | 236 | /** @var Outline[] $glyphs */ 237 | $glyphs = $glyph_data->data; 238 | 239 | foreach ($this->components as $component) { 240 | $_glyph = $glyphs[$component->glyphIndex]; 241 | 242 | if ($_glyph !== $this) { 243 | $contours[] = array( 244 | "contours" => $_glyph->getSVGContours(), 245 | "transform" => $component->getMatrix(), 246 | ); 247 | } 248 | } 249 | 250 | return $contours; 251 | } 252 | } -------------------------------------------------------------------------------- /maps/adobe-standard-encoding.map: -------------------------------------------------------------------------------- 1 | // Adobe Standard Encoding table for ttf2pt1 2 | // Thomas Henlich 3 | 4 | =20 U+0020 SPACE 5 | =21 U+0021 EXCLAMATION MARK 6 | =22 U+0022 QUOTATION MARK 7 | =23 U+0023 NUMBER SIGN 8 | =24 U+0024 DOLLAR SIGN 9 | =25 U+0025 PERCENT SIGN 10 | =26 U+0026 AMPERSAND 11 | =27 U+2019 RIGHT SINGLE QUOTATION MARK 12 | =28 U+0028 LEFT PARENTHESIS 13 | =29 U+0029 RIGHT PARENTHESIS 14 | =2A U+002A ASTERISK 15 | =2B U+002B PLUS SIGN 16 | =2C U+002C COMMA 17 | =2D U+002D HYPHEN-MINUS 18 | =2E U+002E FULL STOP 19 | =2F U+002F SOLIDUS 20 | =30 U+0030 DIGIT ZERO 21 | =31 U+0031 DIGIT ONE 22 | =32 U+0032 DIGIT TWO 23 | =33 U+0033 DIGIT THREE 24 | =34 U+0034 DIGIT FOUR 25 | =35 U+0035 DIGIT FIVE 26 | =36 U+0036 DIGIT SIX 27 | =37 U+0037 DIGIT SEVEN 28 | =38 U+0038 DIGIT EIGHT 29 | =39 U+0039 DIGIT NINE 30 | =3A U+003A COLON 31 | =3B U+003B SEMICOLON 32 | =3C U+003C LESS-THAN SIGN 33 | =3D U+003D EQUALS SIGN 34 | =3E U+003E GREATER-THAN SIGN 35 | =3F U+003F QUESTION MARK 36 | =40 U+0040 COMMERCIAL AT 37 | =41 U+0041 LATIN CAPITAL LETTER A 38 | =42 U+0042 LATIN CAPITAL LETTER B 39 | =43 U+0043 LATIN CAPITAL LETTER C 40 | =44 U+0044 LATIN CAPITAL LETTER D 41 | =45 U+0045 LATIN CAPITAL LETTER E 42 | =46 U+0046 LATIN CAPITAL LETTER F 43 | =47 U+0047 LATIN CAPITAL LETTER G 44 | =48 U+0048 LATIN CAPITAL LETTER H 45 | =49 U+0049 LATIN CAPITAL LETTER I 46 | =4A U+004A LATIN CAPITAL LETTER J 47 | =4B U+004B LATIN CAPITAL LETTER K 48 | =4C U+004C LATIN CAPITAL LETTER L 49 | =4D U+004D LATIN CAPITAL LETTER M 50 | =4E U+004E LATIN CAPITAL LETTER N 51 | =4F U+004F LATIN CAPITAL LETTER O 52 | =50 U+0050 LATIN CAPITAL LETTER P 53 | =51 U+0051 LATIN CAPITAL LETTER Q 54 | =52 U+0052 LATIN CAPITAL LETTER R 55 | =53 U+0053 LATIN CAPITAL LETTER S 56 | =54 U+0054 LATIN CAPITAL LETTER T 57 | =55 U+0055 LATIN CAPITAL LETTER U 58 | =56 U+0056 LATIN CAPITAL LETTER V 59 | =57 U+0057 LATIN CAPITAL LETTER W 60 | =58 U+0058 LATIN CAPITAL LETTER X 61 | =59 U+0059 LATIN CAPITAL LETTER Y 62 | =5A U+005A LATIN CAPITAL LETTER Z 63 | =5B U+005B LEFT SQUARE BRACKET 64 | =5C U+005C REVERSE SOLIDUS 65 | =5D U+005D RIGHT SQUARE BRACKET 66 | =5E U+005E CIRCUMFLEX ACCENT 67 | =5F U+005F LOW LINE 68 | =60 U+2018 LEFT SINGLE QUOTATION MARK 69 | =61 U+0061 LATIN SMALL LETTER A 70 | =62 U+0062 LATIN SMALL LETTER B 71 | =63 U+0063 LATIN SMALL LETTER C 72 | =64 U+0064 LATIN SMALL LETTER D 73 | =65 U+0065 LATIN SMALL LETTER E 74 | =66 U+0066 LATIN SMALL LETTER F 75 | =67 U+0067 LATIN SMALL LETTER G 76 | =68 U+0068 LATIN SMALL LETTER H 77 | =69 U+0069 LATIN SMALL LETTER I 78 | =6A U+006A LATIN SMALL LETTER J 79 | =6B U+006B LATIN SMALL LETTER K 80 | =6C U+006C LATIN SMALL LETTER L 81 | =6D U+006D LATIN SMALL LETTER M 82 | =6E U+006E LATIN SMALL LETTER N 83 | =6F U+006F LATIN SMALL LETTER O 84 | =70 U+0070 LATIN SMALL LETTER P 85 | =71 U+0071 LATIN SMALL LETTER Q 86 | =72 U+0072 LATIN SMALL LETTER R 87 | =73 U+0073 LATIN SMALL LETTER S 88 | =74 U+0074 LATIN SMALL LETTER T 89 | =75 U+0075 LATIN SMALL LETTER U 90 | =76 U+0076 LATIN SMALL LETTER V 91 | =77 U+0077 LATIN SMALL LETTER W 92 | =78 U+0078 LATIN SMALL LETTER X 93 | =79 U+0079 LATIN SMALL LETTER Y 94 | =7A U+007A LATIN SMALL LETTER Z 95 | =7B U+007B LEFT CURLY BRACKET 96 | =7C U+007C VERTICAL LINE 97 | =7D U+007D RIGHT CURLY BRACKET 98 | =7E U+007E TILDE 99 | =A1 U+00A1 INVERTED EXCLAMATION MARK 100 | =A2 U+00A2 CENT SIGN 101 | =A3 U+00A3 POUND SIGN 102 | =A4 U+2044 FRACTION SLASH 103 | =A5 U+00A5 YEN SIGN 104 | =A6 U+0192 LATIN SMALL LETTER F WITH HOOK 105 | =A7 U+00A7 SECTION SIGN 106 | =A8 U+00A4 CURRENCY SIGN 107 | =A9 U+0027 APOSTROPHE 108 | =AA U+201C LEFT DOUBLE QUOTATION MARK 109 | =AB U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 110 | =AC U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK 111 | =AD U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 112 | =AE U+FB01 LATIN SMALL LIGATURE FI 113 | =AF U+FB02 LATIN SMALL LIGATURE FL 114 | =B1 U+2013 EN DASH 115 | =B2 U+2020 DAGGER 116 | =B3 U+2021 DOUBLE DAGGER 117 | =B4 U+00B7 MIDDLE DOT 118 | =B6 U+00B6 PILCROW SIGN 119 | =B7 U+2022 BULLET 120 | =B8 U+201A SINGLE LOW-9 QUOTATION MARK 121 | =B9 U+201E DOUBLE LOW-9 QUOTATION MARK 122 | =BA U+201D RIGHT DOUBLE QUOTATION MARK 123 | =BB U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 124 | =BC U+2026 HORIZONTAL ELLIPSIS 125 | =BD U+2030 PER MILLE SIGN 126 | =BF U+00BF INVERTED QUESTION MARK 127 | =C1 U+0060 GRAVE ACCENT 128 | =C2 U+00B4 ACUTE ACCENT 129 | =C3 U+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT 130 | =C4 U+02DC SMALL TILDE 131 | =C5 U+00AF MACRON 132 | =C6 U+02D8 BREVE 133 | =C7 U+02D9 DOT ABOVE 134 | =C8 U+00A8 DIAERESIS 135 | =CA U+02DA RING ABOVE 136 | =CB U+00B8 CEDILLA 137 | =CD U+02DD DOUBLE ACUTE ACCENT 138 | =CE U+02DB OGONEK 139 | =CF U+02C7 CARON 140 | =D0 U+2014 EM DASH 141 | =E1 U+00C6 LATIN CAPITAL LETTER AE 142 | =E3 U+00AA FEMININE ORDINAL INDICATOR 143 | =E8 U+0141 LATIN CAPITAL LETTER L WITH STROKE 144 | =E9 U+00D8 LATIN CAPITAL LETTER O WITH STROKE 145 | =EA U+0152 LATIN CAPITAL LIGATURE OE 146 | =EB U+00BA MASCULINE ORDINAL INDICATOR 147 | =F1 U+00E6 LATIN SMALL LETTER AE 148 | =F5 U+0131 LATIN SMALL LETTER DOTLESS I 149 | =F8 U+0142 LATIN SMALL LETTER L WITH STROKE 150 | =F9 U+00F8 LATIN SMALL LETTER O WITH STROKE 151 | =FA U+0153 LATIN SMALL LIGATURE OE 152 | =FB U+00DF LATIN SMALL LETTER SHARP S 153 | 154 | // unencoded characters: 155 | =100 U+00E7 LATIN SMALL LETTER C WITH CEDILLA 156 | =101 U+00FF LATIN SMALL LETTER Y WITH DIAERESIS 157 | =102 U+00E3 LATIN SMALL LETTER A WITH TILDE 158 | =103 U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX 159 | =104 U+00B3 SUPERSCRIPT THREE 160 | =105 U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX 161 | =106 U+00FE LATIN SMALL LETTER THORN 162 | =107 U+00E8 LATIN SMALL LETTER E WITH GRAVE 163 | =108 U+00B2 SUPERSCRIPT TWO 164 | =109 U+00E9 LATIN SMALL LETTER E WITH ACUTE 165 | =10A U+00F5 LATIN SMALL LETTER O WITH TILDE 166 | =10B U+00C1 LATIN CAPITAL LETTER A WITH ACUTE 167 | =10C U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX 168 | =10D U+00FD LATIN SMALL LETTER Y WITH ACUTE 169 | =10E U+00FC LATIN SMALL LETTER U WITH DIAERESIS 170 | =10F U+00BE VULGAR FRACTION THREE QUARTERS 171 | =110 U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX 172 | =111 U+00D0 LATIN CAPITAL LETTER ETH 173 | =112 U+00EB LATIN SMALL LETTER E WITH DIAERESIS 174 | =113 U+00F9 LATIN SMALL LETTER U WITH GRAVE 175 | =114 U+2122 TRADE MARK SIGN 176 | =115 U+00F2 LATIN SMALL LETTER O WITH GRAVE 177 | =116 U+0161 LATIN SMALL LETTER S WITH CARON 178 | =117 U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS 179 | =118 U+00FA LATIN SMALL LETTER U WITH ACUTE 180 | =119 U+00E0 LATIN SMALL LETTER A WITH GRAVE 181 | =11A U+00F1 LATIN SMALL LETTER N WITH TILDE 182 | =11B U+00E5 LATIN SMALL LETTER A WITH RING ABOVE 183 | =11C U+017E LATIN SMALL LETTER Z WITH CARON 184 | =11D U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX 185 | =11E U+00D1 LATIN CAPITAL LETTER N WITH TILDE 186 | =11F U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX 187 | =120 U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX 188 | =121 U+00CD LATIN CAPITAL LETTER I WITH ACUTE 189 | =122 U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA 190 | =123 U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS 191 | =124 U+0160 LATIN CAPITAL LETTER S WITH CARON 192 | =125 U+00CC LATIN CAPITAL LETTER I WITH GRAVE 193 | =126 U+00E4 LATIN SMALL LETTER A WITH DIAERESIS 194 | =127 U+00D2 LATIN CAPITAL LETTER O WITH GRAVE 195 | =128 U+00C8 LATIN CAPITAL LETTER E WITH GRAVE 196 | =129 U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS 197 | =12A U+00AE REGISTERED SIGN 198 | =12B U+00D5 LATIN CAPITAL LETTER O WITH TILDE 199 | =12C U+00BC VULGAR FRACTION ONE QUARTER 200 | =12D U+00D9 LATIN CAPITAL LETTER U WITH GRAVE 201 | =12E U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX 202 | =12F U+00DE LATIN CAPITAL LETTER THORN 203 | =130 U+00F7 DIVISION SIGN 204 | =131 U+00C3 LATIN CAPITAL LETTER A WITH TILDE 205 | =132 U+00DA LATIN CAPITAL LETTER U WITH ACUTE 206 | =133 U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX 207 | =134 U+00AC NOT SIGN 208 | =135 U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE 209 | =136 U+00EF LATIN SMALL LETTER I WITH DIAERESIS 210 | =137 U+00ED LATIN SMALL LETTER I WITH ACUTE 211 | =138 U+00E1 LATIN SMALL LETTER A WITH ACUTE 212 | =139 U+00B1 PLUS-MINUS SIGN 213 | =13A U+00D7 MULTIPLICATION SIGN 214 | =13B U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS 215 | =13C U+2212 MINUS SIGN 216 | =13D U+00B9 SUPERSCRIPT ONE 217 | =13E U+00C9 LATIN CAPITAL LETTER E WITH ACUTE 218 | =13F U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX 219 | =140 U+00A9 COPYRIGHT SIGN 220 | =141 U+00C0 LATIN CAPITAL LETTER A WITH GRAVE 221 | =142 U+00F6 LATIN SMALL LETTER O WITH DIAERESIS 222 | =143 U+00F3 LATIN SMALL LETTER O WITH ACUTE 223 | =144 U+00B0 DEGREE SIGN 224 | =145 U+00EC LATIN SMALL LETTER I WITH GRAVE 225 | =146 U+00B5 MICRO SIGN 226 | =147 U+00D3 LATIN CAPITAL LETTER O WITH ACUTE 227 | =148 U+00F0 LATIN SMALL LETTER ETH 228 | =149 U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS 229 | =14A U+00DD LATIN CAPITAL LETTER Y WITH ACUTE 230 | =14B U+00A6 BROKEN BAR 231 | =14C U+00BD VULGAR FRACTION ONE HALF 232 | -------------------------------------------------------------------------------- /src/FontLib/Glyph/OutlineSimple.php: -------------------------------------------------------------------------------- 1 | size) { 31 | return; 32 | } 33 | 34 | $font = $this->getFont(); 35 | 36 | $noc = $this->numberOfContours; 37 | 38 | if ($noc == 0) { 39 | return; 40 | } 41 | 42 | $endPtsOfContours = $font->r(array(self::uint16, $noc)); 43 | 44 | $instructionLength = $font->readUInt16(); 45 | $this->instructions = $font->r(array(self::uint8, $instructionLength)); 46 | 47 | $count = $endPtsOfContours[$noc - 1] + 1; 48 | 49 | // Flags 50 | $flags = array(); 51 | for ($index = 0; $index < $count; $index++) { 52 | $flags[$index] = $font->readUInt8(); 53 | 54 | if ($flags[$index] & self::REPEAT) { 55 | $repeats = $font->readUInt8(); 56 | 57 | for ($i = 1; $i <= $repeats; $i++) { 58 | $flags[$index + $i] = $flags[$index]; 59 | } 60 | 61 | $index += $repeats; 62 | } 63 | } 64 | 65 | $points = array(); 66 | foreach ($flags as $i => $flag) { 67 | $points[$i]["onCurve"] = $flag & self::ON_CURVE; 68 | $points[$i]["endOfContour"] = in_array($i, $endPtsOfContours); 69 | } 70 | 71 | // X Coords 72 | $x = 0; 73 | for ($i = 0; $i < $count; $i++) { 74 | $flag = $flags[$i]; 75 | 76 | if ($flag & self::THIS_X_IS_SAME) { 77 | if ($flag & self::X_SHORT_VECTOR) { 78 | $x += $font->readUInt8(); 79 | } 80 | } 81 | else { 82 | if ($flag & self::X_SHORT_VECTOR) { 83 | $x -= $font->readUInt8(); 84 | } 85 | else { 86 | $x += $font->readInt16(); 87 | } 88 | } 89 | 90 | $points[$i]["x"] = $x; 91 | } 92 | 93 | // Y Coords 94 | $y = 0; 95 | for ($i = 0; $i < $count; $i++) { 96 | $flag = $flags[$i]; 97 | 98 | if ($flag & self::THIS_Y_IS_SAME) { 99 | if ($flag & self::Y_SHORT_VECTOR) { 100 | $y += $font->readUInt8(); 101 | } 102 | } 103 | else { 104 | if ($flag & self::Y_SHORT_VECTOR) { 105 | $y -= $font->readUInt8(); 106 | } 107 | else { 108 | $y += $font->readInt16(); 109 | } 110 | } 111 | 112 | $points[$i]["y"] = $y; 113 | } 114 | 115 | $this->points = $points; 116 | } 117 | 118 | public function splitSVGPath($path) { 119 | preg_match_all('/([a-z])|(-?\d+(?:\.\d+)?)/i', $path, $matches, PREG_PATTERN_ORDER); 120 | 121 | return $matches[0]; 122 | } 123 | 124 | public function makePoints($path) { 125 | $path = $this->splitSVGPath($path); 126 | $l = count($path); 127 | $i = 0; 128 | 129 | $points = array(); 130 | 131 | while ($i < $l) { 132 | switch ($path[$i]) { 133 | // moveTo 134 | case "M": 135 | $points[] = array( 136 | "onCurve" => true, 137 | "x" => $path[++$i], 138 | "y" => $path[++$i], 139 | "endOfContour" => false, 140 | ); 141 | break; 142 | 143 | // lineTo 144 | case "L": 145 | $points[] = array( 146 | "onCurve" => true, 147 | "x" => $path[++$i], 148 | "y" => $path[++$i], 149 | "endOfContour" => false, 150 | ); 151 | break; 152 | 153 | // quadraticCurveTo 154 | case "Q": 155 | $points[] = array( 156 | "onCurve" => false, 157 | "x" => $path[++$i], 158 | "y" => $path[++$i], 159 | "endOfContour" => false, 160 | ); 161 | $points[] = array( 162 | "onCurve" => true, 163 | "x" => $path[++$i], 164 | "y" => $path[++$i], 165 | "endOfContour" => false, 166 | ); 167 | break; 168 | 169 | // closePath 170 | /** @noinspection PhpMissingBreakStatementInspection */ 171 | case "z": 172 | $points[count($points) - 1]["endOfContour"] = true; 173 | 174 | default: 175 | $i++; 176 | break; 177 | } 178 | } 179 | 180 | return $points; 181 | } 182 | 183 | function encode() { 184 | if (empty($this->points)) { 185 | return parent::encode(); 186 | } 187 | 188 | return $this->size = $this->encodePoints($this->points); 189 | } 190 | 191 | public function encodePoints($points) { 192 | $endPtsOfContours = array(); 193 | $flags = array(); 194 | $coords_x = array(); 195 | $coords_y = array(); 196 | 197 | $last_x = 0; 198 | $last_y = 0; 199 | $xMin = $yMin = 0xFFFF; 200 | $xMax = $yMax = -0xFFFF; 201 | foreach ($points as $i => $point) { 202 | $flag = 0; 203 | if ($point["onCurve"]) { 204 | $flag |= self::ON_CURVE; 205 | } 206 | 207 | if ($point["endOfContour"]) { 208 | $endPtsOfContours[] = $i; 209 | } 210 | 211 | // Simplified, we could do some optimizations 212 | if ($point["x"] == $last_x) { 213 | $flag |= self::THIS_X_IS_SAME; 214 | } 215 | else { 216 | $x = intval($point["x"]); 217 | $xMin = min($x, $xMin); 218 | $xMax = max($x, $xMax); 219 | $coords_x[] = $x - $last_x; // int16 220 | } 221 | 222 | // Simplified, we could do some optimizations 223 | if ($point["y"] == $last_y) { 224 | $flag |= self::THIS_Y_IS_SAME; 225 | } 226 | else { 227 | $y = intval($point["y"]); 228 | $yMin = min($y, $yMin); 229 | $yMax = max($y, $yMax); 230 | $coords_y[] = $y - $last_y; // int16 231 | } 232 | 233 | $flags[] = $flag; 234 | $last_x = $point["x"]; 235 | $last_y = $point["y"]; 236 | } 237 | 238 | $font = $this->getFont(); 239 | 240 | $l = 0; 241 | $l += $font->writeInt16(count($endPtsOfContours)); // endPtsOfContours 242 | $l += $font->writeFWord(isset($this->xMin) ? $this->xMin : $xMin); // xMin 243 | $l += $font->writeFWord(isset($this->yMin) ? $this->yMin : $yMin); // yMin 244 | $l += $font->writeFWord(isset($this->xMax) ? $this->xMax : $xMax); // xMax 245 | $l += $font->writeFWord(isset($this->yMax) ? $this->yMax : $yMax); // yMax 246 | 247 | // Simple glyf 248 | $l += $font->w(array(self::uint16, count($endPtsOfContours)), $endPtsOfContours); // endPtsOfContours 249 | $l += $font->writeUInt16(0); // instructionLength 250 | $l += $font->w(array(self::uint8, count($flags)), $flags); // flags 251 | $l += $font->w(array(self::int16, count($coords_x)), $coords_x); // xCoordinates 252 | $l += $font->w(array(self::int16, count($coords_y)), $coords_y); // yCoordinates 253 | return $l; 254 | } 255 | 256 | public function getSVGContours($points = null) { 257 | $path = ""; 258 | 259 | if (!$points) { 260 | if (empty($this->points)) { 261 | $this->parseData(); 262 | } 263 | 264 | $points = $this->points; 265 | } 266 | 267 | $length = (empty($points) ? 0 : count($points)); 268 | $firstIndex = 0; 269 | $count = 0; 270 | 271 | for ($i = 0; $i < $length; $i++) { 272 | $count++; 273 | 274 | if ($points[$i]["endOfContour"]) { 275 | $path .= $this->getSVGPath($points, $firstIndex, $count); 276 | $firstIndex = $i + 1; 277 | $count = 0; 278 | } 279 | } 280 | 281 | return $path; 282 | } 283 | 284 | protected function getSVGPath($points, $startIndex, $count) { 285 | $offset = 0; 286 | $path = ""; 287 | 288 | while ($offset < $count) { 289 | $point = $points[$startIndex + $offset % $count]; 290 | $point_p1 = $points[$startIndex + ($offset + 1) % $count]; 291 | 292 | if ($offset == 0) { 293 | $path .= "M{$point['x']},{$point['y']} "; 294 | } 295 | 296 | if ($point["onCurve"]) { 297 | if ($point_p1["onCurve"]) { 298 | $path .= "L{$point_p1['x']},{$point_p1['y']} "; 299 | $offset++; 300 | } 301 | else { 302 | $point_p2 = $points[$startIndex + ($offset + 2) % $count]; 303 | 304 | if ($point_p2["onCurve"]) { 305 | $path .= "Q{$point_p1['x']},{$point_p1['y']},{$point_p2['x']},{$point_p2['y']} "; 306 | } 307 | else { 308 | $path .= "Q{$point_p1['x']},{$point_p1['y']}," . $this->midValue($point_p1['x'], $point_p2['x']) . "," . $this->midValue($point_p1['y'], $point_p2['y']) . " "; 309 | } 310 | 311 | $offset += 2; 312 | } 313 | } 314 | else { 315 | if ($point_p1["onCurve"]) { 316 | $path .= "Q{$point['x']},{$point['y']},{$point_p1['x']},{$point_p1['y']} "; 317 | } 318 | else { 319 | $path .= "Q{$point['x']},{$point['y']}," . $this->midValue($point['x'], $point_p1['x']) . "," . $this->midValue($point['y'], $point_p1['y']) . " "; 320 | } 321 | 322 | $offset++; 323 | } 324 | } 325 | 326 | $path .= "z "; 327 | 328 | return $path; 329 | } 330 | 331 | function midValue($a, $b) { 332 | return $a + ($b - $a) / 2; 333 | } 334 | } 335 | --------------------------------------------------------------------------------