* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License */ namespace FontLib\Table\Type; use FontLib\Table\Table; use FontLib\Font; /** * `name` font table. * * @package php-font-lib */ class name extends Table { private static $header_format = array( "format" => self::uint16, "count" => self::uint16, "stringOffset" => self::uint16, ); const NAME_COPYRIGHT = 0; const NAME_NAME = 1; const NAME_SUBFAMILY = 2; const NAME_SUBFAMILY_ID = 3; const NAME_FULL_NAME = 4; const NAME_VERSION = 5; const NAME_POSTSCRIPT_NAME = 6; const NAME_TRADEMARK = 7; const NAME_MANUFACTURER = 8; const NAME_DESIGNER = 9; const NAME_DESCRIPTION = 10; const NAME_VENDOR_URL = 11; const NAME_DESIGNER_URL = 12; const NAME_LICENSE = 13; const NAME_LICENSE_URL = 14; const NAME_PREFERRE_FAMILY = 16; const NAME_PREFERRE_SUBFAMILY = 17; const NAME_COMPAT_FULL_NAME = 18; const NAME_SAMPLE_TEXT = 19; static $nameIdCodes = array( 0 => "Copyright", 1 => "FontName", 2 => "FontSubfamily", 3 => "UniqueID", 4 => "FullName", 5 => "Version", 6 => "PostScriptName", 7 => "Trademark", 8 => "Manufacturer", 9 => "Designer", 10 => "Description", 11 => "FontVendorURL", 12 => "FontDesignerURL", 13 => "LicenseDescription", 14 => "LicenseURL", // 15 16 => "PreferredFamily", 17 => "PreferredSubfamily", 18 => "CompatibleFullName", 19 => "SampleText", ); static $platforms = array( 0 => "Unicode", 1 => "Macintosh", // 2 => Reserved 3 => "Microsoft", ); static $platformSpecific = array( // Unicode 0 => array( 0 => "Default semantics", 1 => "Version 1.1 semantics", 2 => "ISO 10646 1993 semantics (deprecated)", 3 => "Unicode 2.0 or later semantics", ), // Macintosh 1 => array( 0 => "Roman", 1 => "Japanese", 2 => "Traditional Chinese", 3 => "Korean", 4 => "Arabic", 5 => "Hebrew", 6 => "Greek", 7 => "Russian", 8 => "RSymbol", 9 => "Devanagari", 10 => "Gurmukhi", 11 => "Gujarati", 12 => "Oriya", 13 => "Bengali", 14 => "Tamil", 15 => "Telugu", 16 => "Kannada", 17 => "Malayalam", 18 => "Sinhalese", 19 => "Burmese", 20 => "Khmer", 21 => "Thai", 22 => "Laotian", 23 => "Georgian", 24 => "Armenian", 25 => "Simplified Chinese", 26 => "Tibetan", 27 => "Mongolian", 28 => "Geez", 29 => "Slavic", 30 => "Vietnamese", 31 => "Sindhi", ), // Microsoft 3 => array( 0 => "Symbol", 1 => "Unicode BMP (UCS-2)", 2 => "ShiftJIS", 3 => "PRC", 4 => "Big5", 5 => "Wansung", 6 => "Johab", // 7 => Reserved // 8 => Reserved // 9 => Reserved 10 => "Unicode UCS-4", ), ); protected function _parse() { $font = $this->getFont(); $tableOffset = $font->pos(); $data = $font->unpack(self::$header_format); $records = array(); for ($i = 0; $i < $data["count"]; $i++) { $record = new nameRecord(); $record_data = $font->unpack(nameRecord::$format); $record->map($record_data); $records[] = $record; } $names = array(); foreach ($records as $record) { $font->seek($tableOffset + $data["stringOffset"] + $record->offset); $s = $font->read($record->length); $record->string = Font::UTF16ToUTF8($s); $names[$record->nameID] = $record; } $data["records"] = $names; $this->data = $data; } protected function _encode() { $font = $this->getFont(); /** @var nameRecord[] $records */ $records = $this->data["records"]; $count_records = count($records); $this->data["count"] = $count_records; $this->data["stringOffset"] = 6 + $count_records * 12; // 6 => uint16 * 3, 12 => sizeof self::$record_format $length = $font->pack(self::$header_format, $this->data); $offset = 0; foreach ($records as $record) { $record->length = mb_strlen($record->getUTF16(), "8bit"); $record->offset = $offset; $offset += $record->length; $length += $font->pack(nameRecord::$format, (array)$record); } foreach ($records as $record) { $str = $record->getUTF16(); $length += $font->write($str, mb_strlen($str, "8bit")); } return $length; } }