123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- <?php
- /* This script prints out the Unicode coverage of all TrueType font files
- in your font directory.
- Point your browser to
- http://your.domain/your_path_to _mpdf/utils/font_coverage.php
- By default this will examine the folder /ttfonts/ (or the default font
- directory defined by _MPDF_TTFONTPATH.
- You can optionally define an alternative folder to examine by setting
- the variable below (must be a relative path, or filesystem path):
- */
- $checkdir = '';
- //////////////////////////////////
- //////////////////////////////////
- //////////////////////////////////
- set_time_limit(600);
- ini_set("memory_limit","256M");
- //==============================================================
- //==============================================================
- include("../mpdf.php");
- $mpdf=new mPDF('','A4-L','','',10,10,10,10);
- $mpdf->SetDisplayMode('fullpage');
- $mpdf->useSubstitutions = true;
- $mpdf->debug = true;
- $mpdf->simpleTables = true;
- if ($checkdir) {
- $ttfdir = $checkdir;
- }
- else { $ttfdir = _MPDF_TTFONTPATH; }
- $mqr=ini_get("magic_quotes_runtime");
- if ($mqr) { set_magic_quotes_runtime(0); }
- if (!class_exists('TTFontFile', false)) { include(_MPDF_PATH .'classes/ttfontsuni.php'); }
- //==============================================================
- $smp = true;
- $maxt = 131071;
- //==============================================================
- //==============================================================
- $unifile = file('UnicodeData.txt');
- $unichars = array();
- foreach($unifile AS $line) {
- if (preg_match('/<control>/',$line,$m)) {
- $rangename = '';
- continue;
- }
- else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});<(.*?), Last>/',$line,$m)) {
- if ($rangename && $rangename == $m[2]) {
- $endrange = hexdec($m[1]);
- for ($i=$startrange;$i<=$endrange; $i++) {
- $unichars[$i] = $i;
- }
- }
- $rangename = '';
- }
- else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});<(.*?), First>/',$line,$m)) {
- $startrange = hexdec($m[1]);
- $rangename = $m[2];
- }
- else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});/',$line,$m)) {
- $unichars[hexdec($m[1])] = hexdec($m[1]);
- $rangename = '';
- }
- }
- // loads array $unicode_ranges
- include('UnicodeRanges.php');
- //==============================================================
- $html = '<html><head><style>td { border: 0.1mm solid #555555; }
- body { font-weight: normal; font-family: helvetica;font-size:8pt; }
- td { font-family: helvetica;font-size:8pt; vertical-align: top;}
- </style></head><body>';
- //==============================================================
- $ff = scandir($ttfdir);
- $tempfontdata = array();
- foreach($ff AS $f) {
- $ttf = new TTFontFile();
- $ret = array();
- $isTTC = false;
- if (strtolower(substr($f,-4,4))=='.ttf' || strtolower(substr($f,-4,4))=='.otf') {
- $ret[] = $ttf->extractCoreInfo($ttfdir.$f);
- }
- for ($i=0; $i<count($ret); $i++) {
- if (is_array($ret[$i])) {
- $tfname = $ret[$i][0];
- $bold = $ret[$i][1];
- $italic = $ret[$i][2];
- $fname = strtolower($tfname );
- $fname = preg_replace('/[ ()]/','',$fname );
- //$tempfonttrans[$tfname] = $fname;
- $style = '';
- if ($bold) { $style .= 'B'; }
- if ($italic) { $style .= 'I'; }
- if (!$style) {
- $tempfontdata[$fname]['file'] = $f;
- if ($isTTC) {
- $tempfontdata[$fname]['TTCfontID'] = $ret[$i][4];
- }
- }
- }
- }
- unset($ttf);
- }
- $fullcovers = array();
- $nearlycovers = array();
- ksort($tempfontdata);
- $ningroup = 14;
- $nofgroups = ceil(count($unicode_ranges)/$ningroup);
- //==============================================================
- for ($urgp = 0; $urgp < $nofgroups; $urgp++) {
- $html .= '<table cellpadding="2" cellspacing="0" style="page-break-inside:avoid; text-align:center; border-collapse: collapse; ">';
- $html .= '<thead><tr><td></td>';
- foreach($unicode_ranges AS $urk => $ur) {
- if ($urk >= ($urgp*$ningroup) && $urk < (($urgp+1)*$ningroup)) {
- $rangekey = $urk;
- $range = $ur['range'];
- $rangestart = $ur['starthex'];
- $rangeend = $ur['endhex'];
- $html .= '<td style="font-family:helvetica;font-size:8pt;font-weight:bold;">'.strtoupper($range).' (U+'.$rangestart .'-U+'.$rangeend.')</td>';
- }
- }
- $html .= '</tr></thead>';
- foreach ($tempfontdata AS $fname => $v) {
- $cw = '';
- if (file_exists((_MPDF_TTFONTDATAPATH.$fname.'.cw.dat'))) { $cw = file_get_contents(_MPDF_TTFONTDATAPATH.$fname.'.cw.dat'); }
- else {
- $mpdf->fontdata[$fname]['R'] = $tempfontdata[$fname]['file'];
- $mpdf->AddFont($fname);
- $cw = file_get_contents(_MPDF_TTFONTDATAPATH.$fname.'.cw.dat');
- }
- if (!$cw) {
- continue;
- die("Font data not available for $fname");
- }
- $counter=0;
- $max = $maxt;
- // create HTML content
- $html .= '<tr>';
- $html .= '<td>'.$fname.'</td>';
- foreach($unicode_ranges AS $urk => $ur) {
- if ($urk >= ($urgp*$ningroup) && $urk < (($urgp+1)*$ningroup)) {
- if ($ur['pua'] || $ur['reserved'] || $ur['control']) {
- $html .= '<td style="background-color: #000000;"></td>';
- }
- else {
- $rangekey = $urk;
- $range = $ur['range'];
- $rangestart = $ur['starthex'];
- $rangeend = $ur['endhex'];
- $rangestartdec = $ur['startdec'];
- $rangeenddec = $ur['enddec'];
- $uniinrange = 0;
- $fontinrange = 0;
- for ($i=$rangestartdec; $i<=$rangeenddec; $i++) {
- //if (isset($cw[$i])) { $fontinrange++; }
- if ($mpdf->_charDefined($cw, $i)) { $fontinrange++; }
- if (isset($unichars[$i])) { $uniinrange++; }
- }
- if ($uniinrange) {
- if ($fontinrange) {
- $pc = ($fontinrange/$uniinrange);
- $str = '('.$fontinrange.'/'.$uniinrange.')';
- if ($pc==1) {
- $fullcovers[$urk][] = $fname;
- $html .= '<td style="background-color: #00FF00;"></td>';
- }
- else if ($pc>1) {
- $fullcovers[$urk][] = $fname;
- $html .= '<td style="background-color: #00FF00;">'.$str.'</td>';
- }
- else if ($pc>=0.9) {
- $html .= '<td style="background-color: #AAFFAA;">'.$str.'</td>';
- $nearlycovers[$urk][] = $fname;
- }
- else if ($pc>0.75) { $html .= '<td style="background-color: #00FFAA;">'.$str.'</td>'; }
- else if ($pc>0.5) { $html .= '<td style="background-color: #AAAAFF;">'.$str.'</td>'; }
- else if ($pc>0.25) { $html .= '<td style="background-color: #FFFFAA;">'.$str.'</td>'; }
- else { $html .= '<td style="background-color: #FFAAAA;">'.$str.'</td>'; }
- }
- else { $html .= '<td style="background-color: #555555;">(0/0)</td>'; }
- }
- else { $html .= '<td style="background-color: #000000;"></td>'; }
- }
- }
- }
- $html .= '</tr>';
- }
- //==============================================================
- $html .= '</table><pagebreak />';
- }
- $html .= '<h4>Fonts with full coverage of Unicode Ranges</h4>';
- $html .= '<table>';
- //$html .= '<tr><td></td><td></td></tr>';
- foreach($unicode_ranges AS $urk => $ur) {
- if ($ur['pua'] || $ur['reserved'] || $ur['control']) { continue; }
- $rangekey = $urk;
- $range = $ur['range'];
- $rangestart = $ur['starthex'];
- $rangeend = $ur['endhex'];
- $ext = $ext2 = '';
- if ($ur['combining']) { $ext = 'background-color:#DDDDFF;'; $ext2 = '<br /><span style="color:#AA0000">Special positioning required</span>'; }
- if ($ur['vertical']) { $ext = 'background-color:#FFDDDD;'; $ext2 = '<br /><span style="color:#AA0000">Vertical positioning required</span>'; }
- if ($ur['special']) { $ext = 'background-color:#FFDDDD;'; $ext2 = '<br /><span style="color:#AA0000">Special processing required</span>'; }
- $html .= '<tr><td style="font-family:helvetica;font-size:8pt;font-weight:bold;'.$ext.'">'.strtoupper($range).' (U+'.$rangestart .'-U+'.$rangeend.')'.$ext2.'</td>';
- $arr = $fullcovers[$urk];
- $narr = $nearlycovers[$urk];
- if (is_array($arr)) { $html .= '<td>'. implode(', ',$arr). '</td></tr>'; }
- else if (is_array($narr)) { $html .= '<td style="background-color: #AAAAAA;">'. implode(', ',$narr). ' (>90%)</td></tr>'; }
- else { $html .= '<td style="background-color: #555555;"> </td></tr>'; }
- }
- $html.= '</table>';
- //==============================================================
- echo $html;
- exit;
- //==============================================================
- //==============================================================
- //==============================================================
- //==============================================================
- ?>
|