123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- <?php
- /**
- * @package php-font-lib
- * @link https://github.com/PhenX/php-font-lib
- * @author Fabien Ménager <fabien.menager@gmail.com>
- * @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;
- }
- }
|