composer package updates
[openemr.git] / vendor / phenx / php-font-lib / src / FontLib / Table / Type / post.php
blobec5806b78bf186166ad59252d78ad37bafaec9d5
1 <?php
2 /**
3 * @package php-font-lib
4 * @link https://github.com/PhenX/php-font-lib
5 * @author Fabien Ménager <fabien.menager@gmail.com>
6 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
7 */
9 namespace FontLib\Table\Type;
10 use FontLib\Table\Table;
11 use FontLib\TrueType\File;
13 /**
14 * `post` font table.
16 * @package php-font-lib
18 class post extends Table {
19 protected $def = array(
20 "format" => self::Fixed,
21 "italicAngle" => self::Fixed,
22 "underlinePosition" => self::FWord,
23 "underlineThickness" => self::FWord,
24 "isFixedPitch" => self::uint32,
25 "minMemType42" => self::uint32,
26 "maxMemType42" => self::uint32,
27 "minMemType1" => self::uint32,
28 "maxMemType1" => self::uint32,
31 protected function _parse() {
32 $font = $this->getFont();
33 $data = $font->unpack($this->def);
35 $names = array();
37 switch ($data["format"]) {
38 case 1:
39 $names = File::$macCharNames;
40 break;
42 case 2:
43 $data["numberOfGlyphs"] = $font->readUInt16();
45 $glyphNameIndex = $font->readUInt16Many($data["numberOfGlyphs"]);
47 $data["glyphNameIndex"] = $glyphNameIndex;
49 $namesPascal = array();
50 for ($i = 0; $i < $data["numberOfGlyphs"]; $i++) {
51 $len = $font->readUInt8();
52 $namesPascal[] = $font->read($len);
55 foreach ($glyphNameIndex as $g => $index) {
56 if ($index < 258) {
57 $names[$g] = File::$macCharNames[$index];
59 else {
60 $names[$g] = $namesPascal[$index - 258];
64 break;
66 case 2.5:
67 // TODO
68 break;
70 case 3:
71 // nothing
72 break;
74 case 4:
75 // TODO
76 break;
79 $data["names"] = $names;
81 $this->data = $data;
84 function _encode() {
85 $font = $this->getFont();
86 $data = $this->data;
87 $data["format"] = 3;
89 $length = $font->pack($this->def, $data);
91 return $length;
93 $subset = $font->getSubset();
95 switch($data["format"]) {
96 case 1:
97 // nothing to do
98 break;
100 case 2:
101 $old_names = $data["names"];
103 $glyphNameIndex = range(0, count($subset));
105 $names = array();
106 foreach($subset as $gid) {
107 $names[] = $data["names"][$data["glyphNameIndex"][$gid]];
110 $numberOfGlyphs = count($names);
111 $length += $font->writeUInt16($numberOfGlyphs);
113 foreach($glyphNameIndex as $gni) {
114 $length += $font->writeUInt16($gni);
117 //$names = array_slice($names, 257);
118 foreach($names as $name) {
119 $len = strlen($name);
120 $length += $font->writeUInt8($len);
121 $length += $font->write($name, $len);
124 break;
126 case 2.5:
127 // TODO
128 break;
130 case 3:
131 // nothing
132 break;
134 case 4:
135 // TODO
136 break;
139 return $length;*/