mirror of
https://github.com/Karaka-Management/Resources.git
synced 2026-01-10 21:08:41 +00:00
111 lines
3.4 KiB
PHP
Executable File
111 lines
3.4 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Mpdf\Fonts;
|
|
|
|
use Mpdf\TTFontFile;
|
|
|
|
class MetricsGenerator
|
|
{
|
|
|
|
private $fontCache;
|
|
|
|
private $fontDescriptor;
|
|
|
|
public function __construct(FontCache $fontCache, $fontDescriptor)
|
|
{
|
|
$this->fontCache = $fontCache;
|
|
$this->fontDescriptor = $fontDescriptor;
|
|
}
|
|
|
|
public function generateMetrics($ttffile, $ttfstat, $fontkey, $TTCfontID, $debugfonts, $BMPonly, $useOTL, $fontUseOTL)
|
|
{
|
|
$ttf = new TTFontFile($this->fontCache, $this->fontDescriptor);
|
|
$ttf->getMetrics($ttffile, $fontkey, $TTCfontID, $debugfonts, $BMPonly, $useOTL); // mPDF 5.7.1
|
|
|
|
$font = [
|
|
'name' => $this->getFontName($ttf->fullName),
|
|
'type' => 'TTF',
|
|
'desc' => [
|
|
'CapHeight' => round($ttf->capHeight),
|
|
'XHeight' => round($ttf->xHeight),
|
|
'FontBBox' => '[' . round($ttf->bbox[0]) . " " . round($ttf->bbox[1]) . " " . round($ttf->bbox[2]) . " " . round($ttf->bbox[3]) . ']',
|
|
/* FontBBox from head table */
|
|
/* 'MaxWidth' => round($ttf->advanceWidthMax), // AdvanceWidthMax from hhea table NB ArialUnicode MS = 31990 ! */
|
|
'Flags' => $ttf->flags,
|
|
'Ascent' => round($ttf->ascent),
|
|
'Descent' => round($ttf->descent),
|
|
'Leading' => round($ttf->lineGap),
|
|
'ItalicAngle' => $ttf->italicAngle,
|
|
'StemV' => round($ttf->stemV),
|
|
'MissingWidth' => round($ttf->defaultWidth)
|
|
],
|
|
'unitsPerEm' => round($ttf->unitsPerEm),
|
|
'up' => round($ttf->underlinePosition),
|
|
'ut' => round($ttf->underlineThickness),
|
|
'strp' => round($ttf->strikeoutPosition),
|
|
'strs' => round($ttf->strikeoutSize),
|
|
'ttffile' => $ttffile,
|
|
'TTCfontID' => $TTCfontID,
|
|
'originalsize' => $ttfstat['size'] + 0, /* cast ? */
|
|
'sip' => ($ttf->sipset) ? true : false,
|
|
'smp' => ($ttf->smpset) ? true : false,
|
|
'BMPselected' => ($BMPonly) ? true : false,
|
|
'fontkey' => $fontkey,
|
|
'panose' => $this->getPanose($ttf),
|
|
'haskerninfo' => ($ttf->kerninfo) ? true : false,
|
|
'haskernGPOS' => ($ttf->haskernGPOS) ? true : false,
|
|
'hassmallcapsGSUB' => ($ttf->hassmallcapsGSUB) ? true : false,
|
|
'fontmetrics' => $this->fontDescriptor,
|
|
'useOTL' => ($fontUseOTL) ? $fontUseOTL : 0,
|
|
'rtlPUAstr' => $ttf->rtlPUAstr,
|
|
'GSUBScriptLang' => $ttf->GSUBScriptLang,
|
|
'GSUBFeatures' => $ttf->GSUBFeatures,
|
|
'GSUBLookups' => $ttf->GSUBLookups,
|
|
'GPOSScriptLang' => $ttf->GPOSScriptLang,
|
|
'GPOSFeatures' => $ttf->GPOSFeatures,
|
|
'GPOSLookups' => $ttf->GPOSLookups,
|
|
'kerninfo' => $ttf->kerninfo,
|
|
];
|
|
|
|
$this->fontCache->jsonWrite($fontkey . '.mtx.json', $font);
|
|
$this->fontCache->binaryWrite($fontkey . '.cw.dat', $ttf->charWidths);
|
|
$this->fontCache->binaryWrite($fontkey . '.gid.dat', $ttf->glyphIDtoUni);
|
|
|
|
if ($this->fontCache->has($fontkey . '.cgm')) {
|
|
$this->fontCache->remove($fontkey . '.cgm');
|
|
}
|
|
|
|
if ($this->fontCache->has($fontkey . '.z')) {
|
|
$this->fontCache->remove($fontkey . '.z');
|
|
}
|
|
|
|
if ($this->fontCache->jsonHas($fontkey . '.cw127.json')) {
|
|
$this->fontCache->jsonRemove($fontkey . '.cw127.json');
|
|
}
|
|
|
|
if ($this->fontCache->has($fontkey . '.cw')) {
|
|
$this->fontCache->remove($fontkey . '.cw');
|
|
}
|
|
|
|
unset($ttf);
|
|
}
|
|
|
|
protected function getFontName($fullName)
|
|
{
|
|
return preg_replace('/[ ()]/', '', $fullName);
|
|
}
|
|
|
|
protected function getPanose($ttf)
|
|
{
|
|
$panose = '';
|
|
if (count($ttf->panose)) {
|
|
$panoseArray = array_merge([$ttf->sFamilyClass, $ttf->sFamilySubClass], $ttf->panose);
|
|
foreach ($panoseArray as $value) {
|
|
$panose .= ' ' . dechex($value);
|
|
}
|
|
}
|
|
|
|
return $panose;
|
|
}
|
|
}
|