]>
Commit | Line | Data |
---|---|---|
4188f38a | 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 | ?> |