Subversion Repositories cheapmusic

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
103 - 1
<?php
2
 
3
/* This script prints out the Unicode coverage of all TrueType font files
4
   in your font directory.
5
   Point your browser to
6
   http://your.domain/your_path_to _mpdf/utils/font_coverage.php
7
   By default this will examine the folder /ttfonts/ (or the default font
8
   directory defined by _MPDF_TTFONTPATH.
9
   You can optionally define an alternative folder to examine by setting
10
   the variable below (must be a relative path, or filesystem path):
11
*/
12
 
13
 
14
$checkdir = '';
15
 
16
 
17
//////////////////////////////////
18
//////////////////////////////////
19
//////////////////////////////////
20
 
21
 
22
set_time_limit(600);
23
ini_set("memory_limit","256M");
24
 
25
//==============================================================
26
//==============================================================
27
include("../mpdf.php");
28
 
29
$mpdf=new mPDF('','A4-L','','',10,10,10,10);
30
$mpdf->SetDisplayMode('fullpage');
31
$mpdf->useSubstitutions = true;
32
$mpdf->debug = true;
33
$mpdf->simpleTables = true;
34
if ($checkdir) {
35
	$ttfdir = $checkdir;
36
}
37
else { $ttfdir = _MPDF_TTFONTPATH; }
38
 
39
 
40
 
41
$mqr=ini_get("magic_quotes_runtime");
42
if ($mqr) { set_magic_quotes_runtime(0); }
43
if (!class_exists('TTFontFile_Analysis', false)) { include(_MPDF_PATH .'classes/ttfontsuni_analysis.php'); }
44
 
45
//==============================================================
46
	$smp = true;
47
	$maxt = 131071;
48
//==============================================================
49
//==============================================================
50
$unifile = file('UnicodeData.txt');
51
$unichars = array();
52
foreach($unifile AS $line) {
53
	if (preg_match('/<control>/',$line,$m)) {
54
	  $rangename = '';
55
	  continue;
56
	}
57
	else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});<(.*?), Last>/',$line,$m)) {
58
	  if ($rangename && $rangename == $m[2]) {
59
		$endrange = hexdec($m[1]);
60
		for ($i=$startrange;$i<=$endrange; $i++) {
61
			$unichars[$i] = $i;
62
		}
63
	  }
64
	  $rangename = '';
65
	}
66
	else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});<(.*?), First>/',$line,$m)) {
67
	  $startrange = hexdec($m[1]);
68
	  $rangename = $m[2];
69
	}
70
	else if (preg_match('/^([12]{0,1}[0-9A-Za-z]{4});/',$line,$m)) {
71
	  $unichars[hexdec($m[1])] = hexdec($m[1]);
72
	  $rangename = '';
73
	}
74
}
75
 
76
// loads array $unicode_ranges
77
include('UnicodeRanges.php');
78
//==============================================================
79
$html = '<html><head><style>td { border: 0.1mm solid #555555; }
80
body { font-weight: normal; font-family: helvetica;font-size:8pt; }
81
td { font-family: helvetica;font-size:8pt; vertical-align: top;}
82
</style></head><body>';
83
 
84
//==============================================================
85
$ff = scandir($ttfdir);
86
$tempfontdata = array();
87
foreach($ff AS $f) {
88
	$ttf = new TTFontFile_Analysis();
89
	$ret = array();
90
	$isTTC = false;
91
	if (strtolower(substr($f,-4,4))=='.ttf' || strtolower(substr($f,-4,4))=='.otf') {
92
		$ret[] = $ttf->extractCoreInfo($ttfdir.$f);
93
	}
94
	for ($i=0; $i<count($ret); $i++) {
95
	   if (is_array($ret[$i])) {
96
		$tfname = $ret[$i][0];
97
		$bold = $ret[$i][1];
98
		$italic = $ret[$i][2];
99
		$fname = strtolower($tfname );
100
		$fname = preg_replace('/[ ()]/','',$fname );
101
		//$tempfonttrans[$tfname] = $fname;
102
		$style = '';
103
		if ($bold) { $style .= 'B'; }
104
		if ($italic) { $style .= 'I'; }
105
		if (!$style) {
106
			$tempfontdata[$fname]['file'] = $f;
107
			if ($isTTC) {
108
				$tempfontdata[$fname]['TTCfontID'] = $ret[$i][4];
109
			}
110
		}
111
	   }
112
	}
113
	unset($ttf);
114
 
115
}
116
 
117
$fullcovers = array();
118
$nearlycovers = array();
119
ksort($tempfontdata);
120
$ningroup = 14;
121
$nofgroups = ceil(count($unicode_ranges)/$ningroup);
122
 
123
//==============================================================
124
 
125
 
126
for ($urgp = 0; $urgp < $nofgroups; $urgp++) {
127
 
128
 
129
   $html .= '<table cellpadding="2" cellspacing="0" style="page-break-inside:avoid; text-align:center; border-collapse: collapse; ">';
130
   $html .= '<thead><tr><td></td>';
131
 
132
   foreach($unicode_ranges AS $urk => $ur) {
133
	   if ($urk >= ($urgp*$ningroup) && $urk < (($urgp+1)*$ningroup)) {
134
				$rangekey = $urk;
135
				$range = $ur['range'];
136
				$rangestart = $ur['starthex'];
137
				$rangeend = $ur['endhex'];
138
				$html .= '<td style="font-family:helvetica;font-size:8pt;font-weight:bold;">'.strtoupper($range).' (U+'.$rangestart .'-U+'.$rangeend.')</td>';
139
	   }
140
   }
141
   $html .= '</tr></thead>';
142
 
143
 
144
  foreach ($tempfontdata AS $fname => $v) {
145
	$cw = '';
146
	if (file_exists((_MPDF_TTFONTDATAPATH.$fname.'.cw.dat'))) { $cw = file_get_contents(_MPDF_TTFONTDATAPATH.$fname.'.cw.dat'); }
147
	else {
148
		$mpdf->fontdata[$fname]['R'] = $tempfontdata[$fname]['file'];
149
		$mpdf->AddFont($fname);
150
		$cw = file_get_contents(_MPDF_TTFONTDATAPATH.$fname.'.cw.dat');
151
	}
152
	if (!$cw) {
153
		continue;
154
		die("Font data not available for $fname");
155
	}
156
 
157
	$counter=0;
158
	$max = $maxt;
159
 
160
	// create HTML content
161
	$html .= '<tr>';
162
	$html .= '<td>'.$fname.'</td>';
163
 
164
	foreach($unicode_ranges AS $urk => $ur) {
165
	   if ($urk >= ($urgp*$ningroup) && $urk < (($urgp+1)*$ningroup)) {
166
	    if ($ur['pua'] || $ur['reserved'] || $ur['control']) {
167
		$html .= '<td style="background-color: #000000;"></td>';
168
	    }
169
	    else {
170
		$rangekey = $urk;
171
		$range = $ur['range'];
172
		$rangestart = $ur['starthex'];
173
		$rangeend = $ur['endhex'];
174
		$rangestartdec = $ur['startdec'];
175
		$rangeenddec = $ur['enddec'];
176
		$uniinrange = 0;
177
		$fontinrange = 0;
178
		for ($i=$rangestartdec; $i<=$rangeenddec; $i++) {
179
			//if (isset($cw[$i])) { $fontinrange++; }
180
			if ($mpdf->_charDefined($cw, $i)) { $fontinrange++; }
181
			if (isset($unichars[$i])) { $uniinrange++; }
182
		}
183
		if ($uniinrange) {
184
			if ($fontinrange) {
185
				$pc = ($fontinrange/$uniinrange);
186
				$str = '('.$fontinrange.'/'.$uniinrange.')';
187
				if ($pc==1) {
188
					$fullcovers[$urk][] = $fname;
189
					$html .= '<td style="background-color: #00FF00;"></td>';
190
				}
191
				else if ($pc>1) {
192
					$fullcovers[$urk][] = $fname;
193
					$html .= '<td style="background-color: #00FF00;">'.$str.'</td>';
194
				}
195
				else if ($pc>=0.9) {
196
					$html .= '<td style="background-color: #AAFFAA;">'.$str.'</td>';
197
					$nearlycovers[$urk][] = $fname;
198
				}
199
				else if ($pc>0.75) { $html .= '<td style="background-color: #00FFAA;">'.$str.'</td>'; }
200
				else if ($pc>0.5) { $html .= '<td style="background-color: #AAAAFF;">'.$str.'</td>'; }
201
				else if ($pc>0.25) { $html .= '<td style="background-color: #FFFFAA;">'.$str.'</td>'; }
202
				else { $html .= '<td style="background-color: #FFAAAA;">'.$str.'</td>'; }
203
			}
204
			else { $html .= '<td style="background-color: #555555;">(0/0)</td>'; }
205
		}
206
		else { $html .= '<td style="background-color: #000000;"></td>'; }
207
	    }
208
	   }
209
	}
210
 
211
 
212
	$html .= '</tr>';
213
 
214
   }
215
//==============================================================
216
  $html .= '</table><pagebreak />';
217
}
218
 
219
$html .= '<h4>Fonts with full coverage of Unicode Ranges</h4>';
220
$html .= '<table>';
221
//$html .= '<tr><td></td><td></td></tr>';
222
foreach($unicode_ranges AS $urk => $ur) {
223
	if ($ur['pua'] || $ur['reserved'] || $ur['control']) { continue; }
224
	$rangekey = $urk;
225
	$range = $ur['range'];
226
	$rangestart = $ur['starthex'];
227
	$rangeend = $ur['endhex'];
228
	$ext = $ext2 = '';
229
	if ($ur['combining']) { $ext = 'background-color:#DDDDFF;'; $ext2 = '<br /><span style="color:#AA0000">Special positioning required</span>'; }
230
	if ($ur['vertical']) { $ext = 'background-color:#FFDDDD;'; $ext2 = '<br /><span style="color:#AA0000">Vertical positioning required</span>'; }
231
	if ($ur['special']) { $ext = 'background-color:#FFDDDD;'; $ext2 = '<br /><span style="color:#AA0000">Special processing required</span>'; }
232
 
233
 
234
	$html .= '<tr><td style="font-family:helvetica;font-size:8pt;font-weight:bold;'.$ext.'">'.strtoupper($range).' (U+'.$rangestart .'-U+'.$rangeend.')'.$ext2.'</td>';
235
	$arr = $fullcovers[$urk];
236
	$narr = $nearlycovers[$urk];
237
	if (is_array($arr)) { $html .= '<td>'. implode(', ',$arr). '</td></tr>'; }
238
	else if (is_array($narr)) { $html .= '<td style="background-color: #AAAAAA;">'. implode(', ',$narr). ' (>90%)</td></tr>'; }
239
	else { $html .= '<td style="background-color: #555555;"> </td></tr>'; }
240
}
241
$html.= '</table>';
242
 
243
 
244
//==============================================================
245
echo $html;
246
 
247
exit;
248
 
249
//==============================================================
250
//==============================================================
251
//==============================================================
252
//==============================================================
253
 
254
 
255
?>