Initial commit
This commit is contained in:
134
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php
vendored
Normal file
134
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php
vendored
Normal file
@@ -0,0 +1,134 @@
|
||||
<?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;
|
||||
|
||||
use FontLib\TrueType\File;
|
||||
use FontLib\Font;
|
||||
use FontLib\BinaryStream;
|
||||
|
||||
/**
|
||||
* Generic Font table directory entry.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class DirectoryEntry extends BinaryStream {
|
||||
/**
|
||||
* @var File
|
||||
*/
|
||||
protected $font;
|
||||
|
||||
/**
|
||||
* @var Table
|
||||
*/
|
||||
protected $font_table;
|
||||
|
||||
public $entryLength = 4;
|
||||
|
||||
public $tag;
|
||||
public $checksum;
|
||||
public $offset;
|
||||
public $length;
|
||||
|
||||
protected $origF;
|
||||
|
||||
/**
|
||||
* @param string $data
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
static function computeChecksum($data) {
|
||||
$len = mb_strlen($data, '8bit');
|
||||
$mod = $len % 4;
|
||||
|
||||
if ($mod) {
|
||||
$data = str_pad($data, $len + (4 - $mod), "\0");
|
||||
}
|
||||
|
||||
$len = mb_strlen($data, '8bit');
|
||||
|
||||
$hi = 0x0000;
|
||||
$lo = 0x0000;
|
||||
|
||||
for ($i = 0; $i < $len; $i += 4) {
|
||||
$hi += (ord($data[$i]) << 8) + ord($data[$i + 1]);
|
||||
$lo += (ord($data[$i + 2]) << 8) + ord($data[$i + 3]);
|
||||
$hi += $lo >> 16;
|
||||
$lo = $lo & 0xFFFF;
|
||||
$hi = $hi & 0xFFFF;
|
||||
}
|
||||
|
||||
return ($hi << 8) + $lo;
|
||||
}
|
||||
|
||||
function __construct(File $font) {
|
||||
$this->font = $font;
|
||||
$this->f = $font->f;
|
||||
}
|
||||
|
||||
function parse() {
|
||||
$this->tag = $this->font->read(4);
|
||||
}
|
||||
|
||||
function open($filename, $mode = self::modeRead) {
|
||||
// void
|
||||
}
|
||||
|
||||
function setTable(Table $font_table) {
|
||||
$this->font_table = $font_table;
|
||||
}
|
||||
|
||||
function encode($entry_offset) {
|
||||
Font::d("\n==== $this->tag ====");
|
||||
//Font::d("Entry offset = $entry_offset");
|
||||
|
||||
$data = $this->font_table;
|
||||
$font = $this->font;
|
||||
|
||||
$table_offset = $font->pos();
|
||||
$this->offset = $table_offset;
|
||||
$table_length = $data->encode();
|
||||
|
||||
$font->seek($table_offset);
|
||||
$table_data = $font->read($table_length);
|
||||
|
||||
$font->seek($entry_offset);
|
||||
|
||||
$font->write($this->tag, 4);
|
||||
$font->writeUInt32(self::computeChecksum($table_data));
|
||||
$font->writeUInt32($table_offset);
|
||||
$font->writeUInt32($table_length);
|
||||
|
||||
Font::d("Bytes written = $table_length");
|
||||
|
||||
$font->seek($table_offset + $table_length);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return File
|
||||
*/
|
||||
function getFont() {
|
||||
return $this->font;
|
||||
}
|
||||
|
||||
function startRead() {
|
||||
$this->font->seek($this->offset);
|
||||
}
|
||||
|
||||
function endRead() {
|
||||
//
|
||||
}
|
||||
|
||||
function startWrite() {
|
||||
$this->font->seek($this->offset);
|
||||
}
|
||||
|
||||
function endWrite() {
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
93
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Table.php
vendored
Normal file
93
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Table.php
vendored
Normal file
@@ -0,0 +1,93 @@
|
||||
<?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;
|
||||
|
||||
use FontLib\TrueType\File;
|
||||
use FontLib\Font;
|
||||
use FontLib\BinaryStream;
|
||||
|
||||
/**
|
||||
* Generic font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class Table extends BinaryStream {
|
||||
/**
|
||||
* @var DirectoryEntry
|
||||
*/
|
||||
protected $entry;
|
||||
protected $def = array();
|
||||
|
||||
public $data;
|
||||
|
||||
final public function __construct(DirectoryEntry $entry) {
|
||||
$this->entry = $entry;
|
||||
$entry->setTable($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return File
|
||||
*/
|
||||
public function getFont() {
|
||||
return $this->entry->getFont();
|
||||
}
|
||||
|
||||
protected function _encode() {
|
||||
if (empty($this->data)) {
|
||||
Font::d(" >> Table is empty");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $this->getFont()->pack($this->def, $this->data);
|
||||
}
|
||||
|
||||
protected function _parse() {
|
||||
$this->data = $this->getFont()->unpack($this->def);
|
||||
}
|
||||
|
||||
protected function _parseRaw() {
|
||||
$this->data = $this->getFont()->read($this->entry->length);
|
||||
}
|
||||
|
||||
protected function _encodeRaw() {
|
||||
return $this->getFont()->write($this->data, $this->entry->length);
|
||||
}
|
||||
|
||||
public function toHTML() {
|
||||
return "<pre>" . var_export($this->data, true) . "</pre>";
|
||||
}
|
||||
|
||||
final public function encode() {
|
||||
$this->entry->startWrite();
|
||||
|
||||
if (false && empty($this->def)) {
|
||||
$length = $this->_encodeRaw();
|
||||
}
|
||||
else {
|
||||
$length = $this->_encode();
|
||||
}
|
||||
|
||||
$this->entry->endWrite();
|
||||
|
||||
return $length;
|
||||
}
|
||||
|
||||
final public function parse() {
|
||||
$this->entry->startRead();
|
||||
|
||||
if (false && empty($this->def)) {
|
||||
$this->_parseRaw();
|
||||
}
|
||||
else {
|
||||
$this->_parse();
|
||||
}
|
||||
|
||||
$this->entry->endRead();
|
||||
}
|
||||
}
|
||||
298
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/cmap.php
vendored
Normal file
298
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/cmap.php
vendored
Normal file
@@ -0,0 +1,298 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* `cmap` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class cmap extends Table {
|
||||
private static $header_format = array(
|
||||
"version" => self::uint16,
|
||||
"numberSubtables" => self::uint16,
|
||||
);
|
||||
|
||||
private static $subtable_header_format = array(
|
||||
"platformID" => self::uint16,
|
||||
"platformSpecificID" => self::uint16,
|
||||
"offset" => self::uint32,
|
||||
);
|
||||
|
||||
private static $subtable_v4_format = array(
|
||||
"length" => self::uint16,
|
||||
"language" => self::uint16,
|
||||
"segCountX2" => self::uint16,
|
||||
"searchRange" => self::uint16,
|
||||
"entrySelector" => self::uint16,
|
||||
"rangeShift" => self::uint16,
|
||||
);
|
||||
|
||||
private static $subtable_v12_format = array(
|
||||
"length" => self::uint32,
|
||||
"language" => self::uint32,
|
||||
"ngroups" => self::uint32
|
||||
);
|
||||
|
||||
protected function _parse() {
|
||||
$font = $this->getFont();
|
||||
|
||||
$cmap_offset = $font->pos();
|
||||
|
||||
$data = $font->unpack(self::$header_format);
|
||||
|
||||
$subtables = array();
|
||||
for ($i = 0; $i < $data["numberSubtables"]; $i++) {
|
||||
$subtables[] = $font->unpack(self::$subtable_header_format);
|
||||
}
|
||||
|
||||
$data["subtables"] = $subtables;
|
||||
|
||||
foreach ($data["subtables"] as $i => &$subtable) {
|
||||
$font->seek($cmap_offset + $subtable["offset"]);
|
||||
|
||||
$subtable["format"] = $font->readUInt16();
|
||||
|
||||
// @todo Only CMAP version 4 and 12
|
||||
if (($subtable["format"] != 4) && ($subtable["format"] != 12)) {
|
||||
unset($data["subtables"][$i]);
|
||||
$data["numberSubtables"]--;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($subtable["format"] == 12) {
|
||||
|
||||
$font->readUInt16();
|
||||
|
||||
$subtable += $font->unpack(self::$subtable_v12_format);
|
||||
|
||||
$glyphIndexArray = array();
|
||||
$endCodes = array();
|
||||
$startCodes = array();
|
||||
|
||||
for ($p = 0; $p < $subtable['ngroups']; $p++) {
|
||||
|
||||
$startCode = $startCodes[] = $font->readUInt32();
|
||||
$endCode = $endCodes[] = $font->readUInt32();
|
||||
$startGlyphCode = $font->readUInt32();
|
||||
|
||||
for ($c = $startCode; $c <= $endCode; $c++) {
|
||||
$glyphIndexArray[$c] = $startGlyphCode;
|
||||
$startGlyphCode++;
|
||||
}
|
||||
}
|
||||
|
||||
$subtable += array(
|
||||
"startCode" => $startCodes,
|
||||
"endCode" => $endCodes,
|
||||
"glyphIndexArray" => $glyphIndexArray,
|
||||
);
|
||||
|
||||
}
|
||||
else if ($subtable["format"] == 4) {
|
||||
|
||||
$subtable += $font->unpack(self::$subtable_v4_format);
|
||||
|
||||
$segCount = $subtable["segCountX2"] / 2;
|
||||
$subtable["segCount"] = $segCount;
|
||||
|
||||
$endCode = $font->readUInt16Many($segCount);
|
||||
|
||||
$font->readUInt16(); // reservedPad
|
||||
|
||||
$startCode = $font->readUInt16Many($segCount);
|
||||
$idDelta = $font->readInt16Many($segCount);
|
||||
|
||||
$ro_start = $font->pos();
|
||||
$idRangeOffset = $font->readUInt16Many($segCount);
|
||||
|
||||
$glyphIndexArray = array();
|
||||
for ($i = 0; $i < $segCount; $i++) {
|
||||
$c1 = $startCode[$i];
|
||||
$c2 = $endCode[$i];
|
||||
$d = $idDelta[$i];
|
||||
$ro = $idRangeOffset[$i];
|
||||
|
||||
if ($ro > 0) {
|
||||
$font->seek($subtable["offset"] + 2 * $i + $ro);
|
||||
}
|
||||
|
||||
for ($c = $c1; $c <= $c2; $c++) {
|
||||
if ($ro == 0) {
|
||||
$gid = ($c + $d) & 0xFFFF;
|
||||
}
|
||||
else {
|
||||
$offset = ($c - $c1) * 2 + $ro;
|
||||
$offset = $ro_start + 2 * $i + $offset;
|
||||
|
||||
$font->seek($offset);
|
||||
$gid = $font->readUInt16();
|
||||
|
||||
if ($gid != 0) {
|
||||
$gid = ($gid + $d) & 0xFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
if ($gid > 0) {
|
||||
$glyphIndexArray[$c] = $gid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$subtable += array(
|
||||
"endCode" => $endCode,
|
||||
"startCode" => $startCode,
|
||||
"idDelta" => $idDelta,
|
||||
"idRangeOffset" => $idRangeOffset,
|
||||
"glyphIndexArray" => $glyphIndexArray,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
function _encode() {
|
||||
$font = $this->getFont();
|
||||
|
||||
$subset = $font->getSubset();
|
||||
$glyphIndexArray = $font->getUnicodeCharMap();
|
||||
|
||||
$newGlyphIndexArray = array();
|
||||
foreach ($glyphIndexArray as $code => $gid) {
|
||||
$new_gid = array_search($gid, $subset);
|
||||
if ($new_gid !== false) {
|
||||
$newGlyphIndexArray[$code] = $new_gid;
|
||||
}
|
||||
}
|
||||
|
||||
ksort($newGlyphIndexArray); // Sort by char code
|
||||
|
||||
$segments = array();
|
||||
|
||||
$i = -1;
|
||||
$prevCode = 0xFFFF;
|
||||
$prevGid = 0xFFFF;
|
||||
|
||||
foreach ($newGlyphIndexArray as $code => $gid) {
|
||||
if (
|
||||
$prevCode + 1 != $code ||
|
||||
$prevGid + 1 != $gid
|
||||
) {
|
||||
$i++;
|
||||
$segments[$i] = array();
|
||||
}
|
||||
|
||||
$segments[$i][] = array($code, $gid);
|
||||
|
||||
$prevCode = $code;
|
||||
$prevGid = $gid;
|
||||
}
|
||||
|
||||
$segments[][] = array(0xFFFF, 0xFFFF);
|
||||
|
||||
$startCode = array();
|
||||
$endCode = array();
|
||||
$idDelta = array();
|
||||
|
||||
foreach ($segments as $codes) {
|
||||
$start = reset($codes);
|
||||
$end = end($codes);
|
||||
|
||||
$startCode[] = $start[0];
|
||||
$endCode[] = $end[0];
|
||||
$idDelta[] = $start[1] - $start[0];
|
||||
}
|
||||
|
||||
$segCount = count($startCode);
|
||||
$idRangeOffset = array_fill(0, $segCount, 0);
|
||||
|
||||
$searchRange = 1;
|
||||
$entrySelector = 0;
|
||||
while ($searchRange * 2 <= $segCount) {
|
||||
$searchRange *= 2;
|
||||
$entrySelector++;
|
||||
}
|
||||
$searchRange *= 2;
|
||||
$rangeShift = $segCount * 2 - $searchRange;
|
||||
|
||||
$subtables = array(
|
||||
array(
|
||||
// header
|
||||
"platformID" => 3, // Unicode
|
||||
"platformSpecificID" => 1,
|
||||
"offset" => null,
|
||||
|
||||
// subtable
|
||||
"format" => 4,
|
||||
"length" => null,
|
||||
"language" => 0,
|
||||
"segCount" => $segCount,
|
||||
"segCountX2" => $segCount * 2,
|
||||
"searchRange" => $searchRange,
|
||||
"entrySelector" => $entrySelector,
|
||||
"rangeShift" => $rangeShift,
|
||||
"startCode" => $startCode,
|
||||
"endCode" => $endCode,
|
||||
"idDelta" => $idDelta,
|
||||
"idRangeOffset" => $idRangeOffset,
|
||||
"glyphIndexArray" => $newGlyphIndexArray,
|
||||
)
|
||||
);
|
||||
|
||||
$data = array(
|
||||
"version" => 0,
|
||||
"numberSubtables" => count($subtables),
|
||||
"subtables" => $subtables,
|
||||
);
|
||||
|
||||
$length = $font->pack(self::$header_format, $data);
|
||||
|
||||
$subtable_headers_size = $data["numberSubtables"] * 8; // size of self::$subtable_header_format
|
||||
$subtable_headers_offset = $font->pos();
|
||||
|
||||
$length += $font->write(str_repeat("\0", $subtable_headers_size), $subtable_headers_size);
|
||||
|
||||
// write subtables data
|
||||
foreach ($data["subtables"] as $i => $subtable) {
|
||||
$length_before = $length;
|
||||
$data["subtables"][$i]["offset"] = $length;
|
||||
|
||||
$length += $font->writeUInt16($subtable["format"]);
|
||||
|
||||
$before_subheader = $font->pos();
|
||||
$length += $font->pack(self::$subtable_v4_format, $subtable);
|
||||
|
||||
$segCount = $subtable["segCount"];
|
||||
$length += $font->w(array(self::uint16, $segCount), $subtable["endCode"]);
|
||||
$length += $font->writeUInt16(0); // reservedPad
|
||||
$length += $font->w(array(self::uint16, $segCount), $subtable["startCode"]);
|
||||
$length += $font->w(array(self::int16, $segCount), $subtable["idDelta"]);
|
||||
$length += $font->w(array(self::uint16, $segCount), $subtable["idRangeOffset"]);
|
||||
$length += $font->w(array(self::uint16, $segCount), array_values($subtable["glyphIndexArray"]));
|
||||
|
||||
$after_subtable = $font->pos();
|
||||
|
||||
$subtable["length"] = $length - $length_before;
|
||||
$font->seek($before_subheader);
|
||||
$length += $font->pack(self::$subtable_v4_format, $subtable);
|
||||
|
||||
$font->seek($after_subtable);
|
||||
}
|
||||
|
||||
// write subtables headers
|
||||
$font->seek($subtable_headers_offset);
|
||||
foreach ($data["subtables"] as $subtable) {
|
||||
$font->pack(self::$subtable_header_format, $subtable);
|
||||
}
|
||||
|
||||
return $length;
|
||||
}
|
||||
}
|
||||
154
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/glyf.php
vendored
Normal file
154
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/glyf.php
vendored
Normal file
@@ -0,0 +1,154 @@
|
||||
<?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\Glyph\Outline;
|
||||
use FontLib\Glyph\OutlineSimple;
|
||||
|
||||
/**
|
||||
* `glyf` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
* @property Outline[] $data
|
||||
*/
|
||||
class glyf extends Table {
|
||||
protected function _parse() {
|
||||
$font = $this->getFont();
|
||||
$offset = $font->pos();
|
||||
|
||||
$loca = $font->getData("loca");
|
||||
$real_loca = array_slice($loca, 0, -1); // Not the last dummy loca entry
|
||||
|
||||
$data = array();
|
||||
|
||||
foreach ($real_loca as $gid => $location) {
|
||||
$_offset = $offset + $loca[$gid];
|
||||
$_size = $loca[$gid + 1] - $loca[$gid];
|
||||
$data[$gid] = Outline::init($this, $_offset, $_size, $font);
|
||||
}
|
||||
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
public function getGlyphIDs($gids = array()) {
|
||||
$glyphIDs = array();
|
||||
|
||||
foreach ($gids as $_gid) {
|
||||
$_glyph = $this->data[$_gid];
|
||||
$glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs());
|
||||
}
|
||||
|
||||
return array_unique(array_merge($gids, $glyphIDs));
|
||||
}
|
||||
|
||||
public function toHTML() {
|
||||
$max = 160;
|
||||
$font = $this->getFont();
|
||||
|
||||
$head = $font->getData("head");
|
||||
$head_json = json_encode($head);
|
||||
|
||||
$os2 = $font->getData("OS/2");
|
||||
$os2_json = json_encode($os2);
|
||||
|
||||
$hmtx = $font->getData("hmtx");
|
||||
$hmtx_json = json_encode($hmtx);
|
||||
|
||||
$names = $font->getData("post", "names");
|
||||
$glyphIndexArray = array_flip($font->getUnicodeCharMap());
|
||||
|
||||
$width = (abs($head["xMin"]) + $head["xMax"]);
|
||||
$height = (abs($head["yMin"]) + $head["yMax"]);
|
||||
|
||||
$ratio = 1;
|
||||
if ($width > $max || $height > $max) {
|
||||
$ratio = max($width, $height) / $max;
|
||||
$width = round($width / $ratio);
|
||||
$height = round($height / $ratio);
|
||||
}
|
||||
|
||||
$n = 500;
|
||||
|
||||
$s = "<h3>" . "Only the first $n simple glyphs are shown (" . count($this->data) . " total)
|
||||
<div class='glyph-view simple'>Simple glyph</div>
|
||||
<div class='glyph-view composite'>Composite glyph</div>
|
||||
Zoom: <input type='range' value='100' max='400' onchange='Glyph.resize(this.value)' />
|
||||
</h3>
|
||||
<script>
|
||||
Glyph.ratio = $ratio;
|
||||
Glyph.head = $head_json;
|
||||
Glyph.os2 = $os2_json;
|
||||
Glyph.hmtx = $hmtx_json;
|
||||
Glyph.width = $width;
|
||||
Glyph.height = $height;
|
||||
</script>";
|
||||
|
||||
foreach ($this->data as $g => $glyph) {
|
||||
if ($n-- <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
$glyph->parseData();
|
||||
|
||||
$shape = array(
|
||||
"SVGContours" => $glyph->getSVGContours(),
|
||||
"xMin" => $glyph->xMin,
|
||||
"yMin" => $glyph->yMin,
|
||||
"xMax" => $glyph->xMax,
|
||||
"yMax" => $glyph->yMax,
|
||||
);
|
||||
$shape_json = json_encode($shape);
|
||||
|
||||
$type = ($glyph instanceof OutlineSimple ? "simple" : "composite");
|
||||
$char = isset($glyphIndexArray[$g]) ? $glyphIndexArray[$g] : 0;
|
||||
$name = isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $char);
|
||||
$char = $char ? "&#{$glyphIndexArray[$g]};" : "";
|
||||
|
||||
$s .= "<div class='glyph-view $type' id='glyph-$g'>
|
||||
<span class='glyph-id'>$g</span>
|
||||
<span class='char'>$char</span>
|
||||
<span class='char-name'>$name</span>
|
||||
";
|
||||
|
||||
if ($type == "composite") {
|
||||
foreach ($glyph->getGlyphIDs() as $_id) {
|
||||
$s .= "<a href='#glyph-$_id' class='glyph-component-id'>$_id</a> ";
|
||||
}
|
||||
}
|
||||
|
||||
$s .= "<br />
|
||||
<canvas width='$width' height='$height' id='glyph-canvas-$g'></canvas>
|
||||
</div>
|
||||
<script>Glyph.glyphs.push([$g,$shape_json]);</script>";
|
||||
}
|
||||
|
||||
return $s;
|
||||
}
|
||||
|
||||
|
||||
protected function _encode() {
|
||||
$font = $this->getFont();
|
||||
$subset = $font->getSubset();
|
||||
$data = $this->data;
|
||||
|
||||
$loca = array();
|
||||
|
||||
$length = 0;
|
||||
foreach ($subset as $gid) {
|
||||
$loca[] = $length;
|
||||
$length += $data[$gid]->encode();
|
||||
}
|
||||
|
||||
$loca[] = $length; // dummy loca
|
||||
$font->getTableObject("loca")->data = $loca;
|
||||
|
||||
return $length;
|
||||
}
|
||||
}
|
||||
46
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/head.php
vendored
Normal file
46
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/head.php
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
<?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 Exception;
|
||||
|
||||
/**
|
||||
* `head` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class head extends Table {
|
||||
protected $def = array(
|
||||
"tableVersion" => self::Fixed,
|
||||
"fontRevision" => self::Fixed,
|
||||
"checkSumAdjustment" => self::uint32,
|
||||
"magicNumber" => self::uint32,
|
||||
"flags" => self::uint16,
|
||||
"unitsPerEm" => self::uint16,
|
||||
"created" => self::longDateTime,
|
||||
"modified" => self::longDateTime,
|
||||
"xMin" => self::FWord,
|
||||
"yMin" => self::FWord,
|
||||
"xMax" => self::FWord,
|
||||
"yMax" => self::FWord,
|
||||
"macStyle" => self::uint16,
|
||||
"lowestRecPPEM" => self::uint16,
|
||||
"fontDirectionHint" => self::int16,
|
||||
"indexToLocFormat" => self::int16,
|
||||
"glyphDataFormat" => self::int16,
|
||||
);
|
||||
|
||||
protected function _parse() {
|
||||
parent::_parse();
|
||||
|
||||
if ($this->data["magicNumber"] != 0x5F0F3CF5) {
|
||||
throw new Exception("Incorrect magic number (" . dechex($this->data["magicNumber"]) . ")");
|
||||
}
|
||||
}
|
||||
}
|
||||
44
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hhea.php
vendored
Normal file
44
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hhea.php
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* `hhea` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class hhea extends Table {
|
||||
protected $def = array(
|
||||
"version" => self::Fixed,
|
||||
"ascent" => self::FWord,
|
||||
"descent" => self::FWord,
|
||||
"lineGap" => self::FWord,
|
||||
"advanceWidthMax" => self::uFWord,
|
||||
"minLeftSideBearing" => self::FWord,
|
||||
"minRightSideBearing" => self::FWord,
|
||||
"xMaxExtent" => self::FWord,
|
||||
"caretSlopeRise" => self::int16,
|
||||
"caretSlopeRun" => self::int16,
|
||||
"caretOffset" => self::FWord,
|
||||
self::int16,
|
||||
self::int16,
|
||||
self::int16,
|
||||
self::int16,
|
||||
"metricDataFormat" => self::int16,
|
||||
"numOfLongHorMetrics" => self::uint16,
|
||||
);
|
||||
|
||||
function _encode() {
|
||||
$font = $this->getFont();
|
||||
$this->data["numOfLongHorMetrics"] = count($font->getSubset());
|
||||
|
||||
return parent::_encode();
|
||||
}
|
||||
}
|
||||
59
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hmtx.php
vendored
Normal file
59
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/hmtx.php
vendored
Normal file
@@ -0,0 +1,59 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* `hmtx` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class hmtx extends Table {
|
||||
protected function _parse() {
|
||||
$font = $this->getFont();
|
||||
$offset = $font->pos();
|
||||
|
||||
$numOfLongHorMetrics = $font->getData("hhea", "numOfLongHorMetrics");
|
||||
$numGlyphs = $font->getData("maxp", "numGlyphs");
|
||||
|
||||
$font->seek($offset);
|
||||
|
||||
$data = array();
|
||||
$metrics = $font->readUInt16Many($numOfLongHorMetrics * 2);
|
||||
for ($gid = 0, $mid = 0; $gid < $numOfLongHorMetrics; $gid++) {
|
||||
$advanceWidth = isset($metrics[$mid]) ? $metrics[$mid] : 0;
|
||||
$mid += 1;
|
||||
$leftSideBearing = isset($metrics[$mid]) ? $metrics[$mid] : 0;
|
||||
$mid += 1;
|
||||
$data[$gid] = array($advanceWidth, $leftSideBearing);
|
||||
}
|
||||
|
||||
if ($numOfLongHorMetrics < $numGlyphs) {
|
||||
$lastWidth = end($data);
|
||||
$data = array_pad($data, $numGlyphs, $lastWidth);
|
||||
}
|
||||
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
protected function _encode() {
|
||||
$font = $this->getFont();
|
||||
$subset = $font->getSubset();
|
||||
$data = $this->data;
|
||||
|
||||
$length = 0;
|
||||
|
||||
foreach ($subset as $gid) {
|
||||
$length += $font->writeUInt16($data[$gid][0]);
|
||||
$length += $font->writeUInt16($data[$gid][1]);
|
||||
}
|
||||
|
||||
return $length;
|
||||
}
|
||||
}
|
||||
80
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/kern.php
vendored
Normal file
80
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/kern.php
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* `kern` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class kern extends Table {
|
||||
protected function _parse() {
|
||||
$font = $this->getFont();
|
||||
|
||||
$data = $font->unpack(array(
|
||||
"version" => self::uint16,
|
||||
"nTables" => self::uint16,
|
||||
|
||||
// only the first subtable will be parsed
|
||||
"subtableVersion" => self::uint16,
|
||||
"length" => self::uint16,
|
||||
"coverage" => self::uint16,
|
||||
));
|
||||
|
||||
$data["format"] = ($data["coverage"] >> 8);
|
||||
|
||||
$subtable = array();
|
||||
|
||||
switch ($data["format"]) {
|
||||
case 0:
|
||||
$subtable = $font->unpack(array(
|
||||
"nPairs" => self::uint16,
|
||||
"searchRange" => self::uint16,
|
||||
"entrySelector" => self::uint16,
|
||||
"rangeShift" => self::uint16,
|
||||
));
|
||||
|
||||
$pairs = array();
|
||||
$tree = array();
|
||||
|
||||
$values = $font->readUInt16Many($subtable["nPairs"] * 3);
|
||||
for ($i = 0, $idx = 0; $i < $subtable["nPairs"]; $i++) {
|
||||
$left = $values[$idx++];
|
||||
$right = $values[$idx++];
|
||||
$value = $values[$idx++];
|
||||
|
||||
if ($value >= 0x8000) {
|
||||
$value -= 0x10000;
|
||||
}
|
||||
|
||||
$pairs[] = array(
|
||||
"left" => $left,
|
||||
"right" => $right,
|
||||
"value" => $value,
|
||||
);
|
||||
|
||||
$tree[$left][$right] = $value;
|
||||
}
|
||||
|
||||
//$subtable["pairs"] = $pairs;
|
||||
$subtable["tree"] = $tree;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
break;
|
||||
}
|
||||
|
||||
$data["subtable"] = $subtable;
|
||||
|
||||
$this->data = $data;
|
||||
}
|
||||
}
|
||||
80
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/loca.php
vendored
Normal file
80
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/loca.php
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
42
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/maxp.php
vendored
Normal file
42
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/maxp.php
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* `maxp` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class maxp extends Table {
|
||||
protected $def = array(
|
||||
"version" => self::Fixed,
|
||||
"numGlyphs" => self::uint16,
|
||||
"maxPoints" => self::uint16,
|
||||
"maxContours" => self::uint16,
|
||||
"maxComponentPoints" => self::uint16,
|
||||
"maxComponentContours" => self::uint16,
|
||||
"maxZones" => self::uint16,
|
||||
"maxTwilightPoints" => self::uint16,
|
||||
"maxStorage" => self::uint16,
|
||||
"maxFunctionDefs" => self::uint16,
|
||||
"maxInstructionDefs" => self::uint16,
|
||||
"maxStackElements" => self::uint16,
|
||||
"maxSizeOfInstructions" => self::uint16,
|
||||
"maxComponentElements" => self::uint16,
|
||||
"maxComponentDepth" => self::uint16,
|
||||
);
|
||||
|
||||
function _encode() {
|
||||
$font = $this->getFont();
|
||||
$this->data["numGlyphs"] = count($font->getSubset());
|
||||
|
||||
return parent::_encode();
|
||||
}
|
||||
}
|
||||
193
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/name.php
vendored
Normal file
193
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/name.php
vendored
Normal file
@@ -0,0 +1,193 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
53
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/nameRecord.php
vendored
Normal file
53
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/nameRecord.php
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
<?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\Font;
|
||||
use FontLib\BinaryStream;
|
||||
|
||||
/**
|
||||
* Font table name record.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class nameRecord extends BinaryStream {
|
||||
public $platformID;
|
||||
public $platformSpecificID;
|
||||
public $languageID;
|
||||
public $nameID;
|
||||
public $length;
|
||||
public $offset;
|
||||
public $string;
|
||||
|
||||
public static $format = array(
|
||||
"platformID" => self::uint16,
|
||||
"platformSpecificID" => self::uint16,
|
||||
"languageID" => self::uint16,
|
||||
"nameID" => self::uint16,
|
||||
"length" => self::uint16,
|
||||
"offset" => self::uint16,
|
||||
);
|
||||
|
||||
public function map($data) {
|
||||
foreach ($data as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
}
|
||||
|
||||
public function getUTF8() {
|
||||
return $this->string;
|
||||
}
|
||||
|
||||
public function getUTF16() {
|
||||
return Font::UTF8ToUTF16($this->string);
|
||||
}
|
||||
|
||||
function __toString() {
|
||||
return $this->string;
|
||||
}
|
||||
}
|
||||
47
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/os2.php
vendored
Normal file
47
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/os2.php
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
<?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;
|
||||
|
||||
/**
|
||||
* `OS/2` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class os2 extends Table {
|
||||
protected $def = array(
|
||||
"version" => self::uint16,
|
||||
"xAvgCharWidth" => self::int16,
|
||||
"usWeightClass" => self::uint16,
|
||||
"usWidthClass" => self::uint16,
|
||||
"fsType" => self::int16,
|
||||
"ySubscriptXSize" => self::int16,
|
||||
"ySubscriptYSize" => self::int16,
|
||||
"ySubscriptXOffset" => self::int16,
|
||||
"ySubscriptYOffset" => self::int16,
|
||||
"ySuperscriptXSize" => self::int16,
|
||||
"ySuperscriptYSize" => self::int16,
|
||||
"ySuperscriptXOffset" => self::int16,
|
||||
"ySuperscriptYOffset" => self::int16,
|
||||
"yStrikeoutSize" => self::int16,
|
||||
"yStrikeoutPosition" => self::int16,
|
||||
"sFamilyClass" => self::int16,
|
||||
"panose" => array(self::uint8, 10),
|
||||
"ulCharRange" => array(self::uint32, 4),
|
||||
"achVendID" => array(self::char, 4),
|
||||
"fsSelection" => self::uint16,
|
||||
"fsFirstCharIndex" => self::uint16,
|
||||
"fsLastCharIndex" => self::uint16,
|
||||
"typoAscender" => self::int16,
|
||||
"typoDescender" => self::int16,
|
||||
"typoLineGap" => self::int16,
|
||||
"winAscent" => self::int16,
|
||||
"winDescent" => self::int16,
|
||||
);
|
||||
}
|
||||
143
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/post.php
vendored
Normal file
143
assets/dompdf/vendor/phenx/php-font-lib/src/FontLib/Table/Type/post.php
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
<?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\TrueType\File;
|
||||
|
||||
/**
|
||||
* `post` font table.
|
||||
*
|
||||
* @package php-font-lib
|
||||
*/
|
||||
class post extends Table {
|
||||
protected $def = array(
|
||||
"format" => self::Fixed,
|
||||
"italicAngle" => self::Fixed,
|
||||
"underlinePosition" => self::FWord,
|
||||
"underlineThickness" => self::FWord,
|
||||
"isFixedPitch" => self::uint32,
|
||||
"minMemType42" => self::uint32,
|
||||
"maxMemType42" => self::uint32,
|
||||
"minMemType1" => self::uint32,
|
||||
"maxMemType1" => self::uint32,
|
||||
);
|
||||
|
||||
protected function _parse() {
|
||||
$font = $this->getFont();
|
||||
$data = $font->unpack($this->def);
|
||||
|
||||
$names = array();
|
||||
|
||||
switch ($data["format"]) {
|
||||
case 1:
|
||||
$names = File::$macCharNames;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$data["numberOfGlyphs"] = $font->readUInt16();
|
||||
|
||||
$glyphNameIndex = $font->readUInt16Many($data["numberOfGlyphs"]);
|
||||
|
||||
$data["glyphNameIndex"] = $glyphNameIndex;
|
||||
|
||||
$namesPascal = array();
|
||||
for ($i = 0; $i < $data["numberOfGlyphs"]; $i++) {
|
||||
$len = $font->readUInt8();
|
||||
$namesPascal[] = $font->read($len);
|
||||
}
|
||||
|
||||
foreach ($glyphNameIndex as $g => $index) {
|
||||
if ($index < 258) {
|
||||
$names[$g] = File::$macCharNames[$index];
|
||||
}
|
||||
else {
|
||||
if (array_key_exists($index - 258, $namesPascal)) {
|
||||
$names[$g] = $namesPascal[$index - 258];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2.5:
|
||||
// TODO
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// nothing
|
||||
break;
|
||||
|
||||
case 4:
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
|
||||
$data["names"] = $names;
|
||||
|
||||
$this->data = $data;
|
||||
}
|
||||
|
||||
function _encode() {
|
||||
$font = $this->getFont();
|
||||
$data = $this->data;
|
||||
$data["format"] = 3;
|
||||
|
||||
$length = $font->pack($this->def, $data);
|
||||
|
||||
return $length;
|
||||
/*
|
||||
$subset = $font->getSubset();
|
||||
|
||||
switch($data["format"]) {
|
||||
case 1:
|
||||
// nothing to do
|
||||
break;
|
||||
|
||||
case 2:
|
||||
$old_names = $data["names"];
|
||||
|
||||
$glyphNameIndex = range(0, count($subset));
|
||||
|
||||
$names = array();
|
||||
foreach($subset as $gid) {
|
||||
$names[] = $data["names"][$data["glyphNameIndex"][$gid]];
|
||||
}
|
||||
|
||||
$numberOfGlyphs = count($names);
|
||||
$length += $font->writeUInt16($numberOfGlyphs);
|
||||
|
||||
foreach($glyphNameIndex as $gni) {
|
||||
$length += $font->writeUInt16($gni);
|
||||
}
|
||||
|
||||
//$names = array_slice($names, 257);
|
||||
foreach($names as $name) {
|
||||
$len = strlen($name);
|
||||
$length += $font->writeUInt8($len);
|
||||
$length += $font->write($name, $len);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 2.5:
|
||||
// TODO
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// nothing
|
||||
break;
|
||||
|
||||
case 4:
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
|
||||
return $length;*/
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user