#!/usr/bin/perl # # Copyright (C) 2005 Luis Gonzalez Miranda # # hex2sfd created in 2005 by Luis Gonzalez Miranda, http://www.lgm.cl # # LICENSE: # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # %combining = (); # open(A, ") { # chomp; # $combining{$A} = 1; # } # close(A); # # Modified by Paul Hardy, June 2008. # # The original code above didn't work properly. The replacement code # below wastes RAM, but it works as a quick fix. # @combining = (); for ($i = 0; $i < 65536; $i++) { push(@combining, 0); } open(A, ") { chomp; $combining[ hex($_) ] = 1; } close(A); # # Modified by Paul Hardy, July 2008. # # Make pixel 64 units for greatest scale; floating point numbers in # TrueType have 6 fractional bits, so this works out well (2^6 = 64). # Also, make size of font a power of 2 (16 * 64) for efficient scaling # to any point size in TrueType. Made bitmask a variable for easy # experimenting. # $pixel = 64; $descent = 2 * $pixel; $ascent = 16 * $pixel - $descent; $bitmask = 25; # round in x (doesn't really work), corner point selected print << "END"; SplineFontDB: 1.0 FontName: unifont FullName: GNU Unifont FamilyName: unifont Weight: Medium Comments: Created from the 2008-07-06 version of the GNU Unifont Comments: with Luis Gonzalez Miranda's Perl and FontForge scripts. Comments: See http://www.lgm.cl/trabajos/unifont/index.en.html for Comments: information on Luis' scripts. Comments: See http://czyborra.com/unifont Comments: and http://unifoundry.com/unifont.html Comments: for information on GNU Unifont. Comments: See http://fontforge.sf.net for information on FontForge. Version: 1.00 ItalicAngle: 0 UnderlinePosition: -100 UnderlineWidth: 40 Ascent: $ascent Descent: $descent NeedsXUIDChange: 1 XUID: [1021 140 1293607838 5610107] FSType: 0 PfmFamily: 33 TTFWeight: 500 TTFWidth: 5 Panose: 2 0 6 4 0 0 0 0 0 0 LineGap: 72 VLineGap: 0 OS2WinAscent: 0 OS2WinAOffset: 1 OS2WinDescent: 0 OS2WinDOffset: 1 HheadAscent: 0 HheadAOffset: 1 HheadDescent: 0 HheadDOffset: 1 ScriptLang: 1 1 latn 1 dflt Encoding: UnicodeBmp UnicodeInterp: none DisplaySize: -24 AntiAlias: 1 FitToEm: 1 WinInfo: 0 50 22 TeXData: 1 0 0 346030 173015 115343 0 1048576 115343 783286 444596 497025 792723 393216 433062 380633 303038 157286 324010 404750 52429 2506097 1059062 262144 BeginChars: 65536 3 END $count=0; while() { chomp; ($c,$d)=split(/:/); $width=length($d)/4; $ptwidth=$pixel * $width; # if($combining{$c}) { # this was the original "if" if ($combining[ hex($c) ]) { $ptwidth = 0; } $cn=hex($c); # Changed "Flags: H" to "Flags: HW" to fix spaces - Paul Hardy, 2008 print << "END"; StartChar: $c Encoding: $cn $cn $count Width: $ptwidth Flags: HW TeX: 0 0 0 0 Fore END for($i=0;$i<16;$i++) { $l=substr($d, $i*$width/4, $width/4); $num=hex($l); $prev=0; for($j=0; $j<$width; $j++) { $x=$width - 1 - $j; $y=15 - $i; if($num%2) { # point at i, width-1-j if(!$prev) { $x1=$x * $pixel + $pixel; $y1=$y * $pixel - $descent; $x2=$x1 + $pixel; $y2=$y1 + $pixel; } $prev=1; } else { if($prev) { $x2=$x * $pixel + $pixel; print << "END"; $x1 $y1 m $bitmask $x1 $y2 l $bitmask $x2 $y2 l $bitmask $x2 $y1 l $bitmask $x1 $y1 l $bitmask END } $prev=0; } $num=int($num/2); } if($prev) { $x2=0; print << "END"; $x1 $y1 m $bitmask $x1 $y2 l $bitmask $x2 $y2 l $bitmask $x2 $y1 l $bitmask $x1 $y1 l $bitmask END } } print << "END"; EndSplineSet EndChar END $count++; } print << "END"; EndChars EndSplineFont END