123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- <?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\EOT;
-
- use Exception;
- use FontLib\Font;
-
- /**
- * TrueType font file header.
- *
- * @package php-font-lib
- *
- * @property File $font
- */
- class Header extends \FontLib\Header {
- protected $def = array(
- "format" => self::uint32,
- "numTables" => self::uint16,
- "searchRange" => self::uint16,
- "entrySelector" => self::uint16,
- "rangeShift" => self::uint16,
- );
-
- public function parse() {
- $font = $this->font;
-
- $this->data = $font->unpack(array(
- "EOTSize" => self::uint32,
- "FontDataSize" => self::uint32,
- "Version" => self::uint32,
- "Flags" => self::uint32,
- "FontPANOSE" => array(self::uint8, 10),
- "Charset" => self::uint8,
- "Italic" => self::uint8,
- "Weight" => self::uint32,
- "fsType" => self::uint16,
- "MagicNumber" => self::uint16,
- "UnicodeRange1" => self::uint32,
- "UnicodeRange2" => self::uint32,
- "UnicodeRange3" => self::uint32,
- "UnicodeRange4" => self::uint32,
- "CodePageRange1" => self::uint32,
- "CodePageRange2" => self::uint32,
- "CheckSumAdjustment" => self::uint32,
- "Reserved1" => self::uint32,
- "Reserved2" => self::uint32,
- "Reserved3" => self::uint32,
- "Reserved4" => self::uint32,
- ));
-
- $this->data["Padding1"] = $font->readUInt16();
- $this->readString("FamilyName");
-
- $this->data["Padding2"] = $font->readUInt16();
- $this->readString("StyleName");
-
- $this->data["Padding3"] = $font->readUInt16();
- $this->readString("VersionName");
-
- $this->data["Padding4"] = $font->readUInt16();
- $this->readString("FullName");
-
- switch ($this->data["Version"]) {
- default:
- throw new Exception("Unknown EOT version " . $this->data["Version"]);
-
- case 0x00010000:
- // Nothing to do more
- break;
-
- case 0x00020001:
- $this->data["Padding5"] = $font->readUInt16();
- $this->readString("RootString");
- break;
-
- case 0x00020002:
- $this->data["Padding5"] = $font->readUInt16();
- $this->readString("RootString");
-
- $this->data["RootStringCheckSum"] = $font->readUInt32();
- $this->data["EUDCCodePage"] = $font->readUInt32();
-
- $this->data["Padding6"] = $font->readUInt16();
- $this->readString("Signature");
-
- $this->data["EUDCFlags"] = $font->readUInt32();
- $this->data["EUDCFontSize"] = $font->readUInt32();
- break;
- }
-
- if (!empty($this->data["RootString"])) {
- $this->data["RootString"] = explode("\0", $this->data["RootString"]);
- }
- }
-
- private function readString($name) {
- $font = $this->font;
- $size = $font->readUInt16();
-
- $this->data["{$name}Size"] = $size;
- $this->data[$name] = Font::UTF16ToUTF8($font->read($size));
- }
-
- public function encode() {
- //return $this->font->pack($this->def, $this->data);
- }
- }
|