0, "Thin"=> 100, "Extra Light"=> 200, "Light"=> 300, "Normal"=> 400, "Medium"=> 500, "Demi Bold"=> 600, "Bold"=> 700, "Extra Bold"=> 800, "Black"=> 900, ); static $stringnames = array( "COPYRIGHT", "FACENAME", "SUBFAMILY", "UNIQUEFONTID", "FAMILY", "VERSION", "PSNAME", "TRADEMARK", "UC_COPYRIGHT", "UC_FAMILY", "UC_SUBFAMILY", "UC_UNIQUEFONTID", "UC_FACENAME", "UC_VERSION", "UC_PSNAME", "UC_TRADEMARK" ); //---------------------------------------- Open TTF file $fh = fopen($fontfile, "rb"); if(!$fh) { wb_message_box($mainwin, "Cannot open file $fontfile."); return; } //---------------------------------------- Read file and header data fseek($fh, 0); $data = fread($fh, 12); $ttf_head = unpack("nsfntVersion" , $data); if($ttf_head["sfntVersion"] != 1) { wb_message_box($mainwin, "The file $fontfile does not seem to be a TrueType font."); return; } //---------------------------------------- Read the offsets fseek($fh, 0); $data = fread($fh, 1024); $os2pos = strpos($data, "OS/2"); $namepos = strpos($data, "name"); $cmappos = strpos($data, "cmap"); //---------------------------------------- Read "name" data fseek($fh, $namepos); $data = fread($fh, 16); $ttf_name = unpack("a4/N/Noffset", $data); fseek($fh, $ttf_name["offset"]); $data = fread($fh, 6); $ttf_name = unpack("n/ncount/nstringoffset", $data); $strstart = ftell($fh) - 6 + $ttf_name["stringoffset"]; //---------------------------------------- Names loop $names = min($ttf_name["count"], 16); for($i = 0; $i < $names; $i++) { $data = fread($fh, 12); $fpos = ftell($fh); $ttf_name = unpack("n4/nLengthID/nOffsetID", $data); $len = $ttf_name["LengthID"]; if($len) { fseek($fh, $strstart + $ttf_name["OffsetID"]); $data = fread($fh, $len); fseek($fh, $fpos); $name = unpack("a" . $len . "Data", $data); $ttf_strings[$stringnames[$i]] = unicode2ansi($name["Data"]); } else { $ttf_strings[$stringnames[$i]] = ""; } } //---------------------------------------- Read "os2" data fseek($fh, $os2pos); $data = fread($fh, 16); $ttf_os2 = unpack("a4id/N/Noffset/Nlength", $data); fseek($fh, $ttf_os2["offset"]); $data = fread($fh, $ttf_os2["length"]); $ttf_os2 = unpack("n2/nusWeightClass/n26/a4achVendID", $data); //---------------------------------------- End data read fclose($fh); //---------------------------------------- Fiil out controls with values // OS/2 data wb_set_text(wb_get_control($mainwin, ID_WEIGHT), array_search($ttf_os2["usWeightClass"], $weights)); wb_set_text(wb_get_control($mainwin, ID_VENDORID), $ttf_os2["achVendID"]); // Strings wb_set_text(wb_get_control($mainwin, ID_FONTNAME), $ttf_strings["FACENAME"]); wb_set_text(wb_get_control($mainwin, ID_FAMILY), @$ttf_strings["FAMILY"]); wb_set_text(wb_get_control($mainwin, ID_SUBFAMILY), @$ttf_strings["SUBFAMILY"]); wb_set_text(wb_get_control($mainwin, ID_UNIQUEID), @$ttf_strings["UNIQUEFONTID"]); wb_set_text(wb_get_control($mainwin, ID_PSNAME), @$ttf_strings["PSNAME"]); wb_set_text(wb_get_control($mainwin, ID_COPYRIGHT), @$ttf_strings["COPYRIGHT"]); wb_set_text(wb_get_control($mainwin, ID_VERSION), @$ttf_strings["VERSION"]); wb_set_text(wb_get_control($mainwin, ID_TRADEMARK), @$ttf_strings["TRADEMARK"]); // Enable controls wb_set_enabled(wb_get_control($toolbar, ID_CLEAR), true); wb_set_enabled(wb_get_control($mainmenu, ID_CLEAR), true); // Set title bar with font name wb_set_text($mainwin, basename($fontfile) . " - " . APPNAME); } //---------------------------------------------------- GENERAL-PURPOSE FUNCTIONS // utf8_decode dos not work for TrueType fonts function unicode2ansi($string) { $string = (string)$string; if(!is_string($string)) return $string; // Is it an empty string? if(strlen($string) == 0) return $string; // Is it Unicode? if(ord($string[0]) != 0) return $string; // Do the conversion $len = strlen($string); $out = ""; for($i = 0; $i < $len; $i += 2) { if(ord($string[$i]) == 0 && ord($string[$i + 1]) != 0) $out .= $string[$i + 1]; } return $out; } //-------------------------------------------------------------------------- END ?>