1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <?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;
-
- /**
- * `loca` font table.
- *
- * @package php-font-lib
- */
- class loca extends Table {
- protected function _parse() {
- $font = $this->getFont();
- $offset = $font->pos();
-
- $indexToLocFormat = $font->getData("head", "indexToLocFormat");
- $numGlyphs = $font->getData("maxp", "numGlyphs");
-
- $font->seek($offset);
-
- $data = array();
-
- // 2 bytes
- if ($indexToLocFormat == 0) {
- $d = $font->read(($numGlyphs + 1) * 2);
- $loc = unpack("n*", $d);
-
- for ($i = 0; $i <= $numGlyphs; $i++) {
- $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] * 2 : 0;
- }
- }
-
- // 4 bytes
- else {
- if ($indexToLocFormat == 1) {
- $d = $font->read(($numGlyphs + 1) * 4);
- $loc = unpack("N*", $d);
-
- for ($i = 0; $i <= $numGlyphs; $i++) {
- $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] : 0;
- }
- }
- }
-
- $this->data = $data;
- }
-
- function _encode() {
- $font = $this->getFont();
- $data = $this->data;
-
- $indexToLocFormat = $font->getData("head", "indexToLocFormat");
- $numGlyphs = $font->getData("maxp", "numGlyphs");
- $length = 0;
-
- // 2 bytes
- if ($indexToLocFormat == 0) {
- for ($i = 0; $i <= $numGlyphs; $i++) {
- $length += $font->writeUInt16($data[$i] / 2);
- }
- }
-
- // 4 bytes
- else {
- if ($indexToLocFormat == 1) {
- for ($i = 0; $i <= $numGlyphs; $i++) {
- $length += $font->writeUInt32($data[$i]);
- }
- }
- }
-
- return $length;
- }
- }
|