X-Git-Url: http://git.shiar.net/unifont.git/blobdiff_plain/119a78c606ce7e90f07f84f5307628fd5a0837f7..7c29a68c187ca8c0ef5cf975b874a91d0f227800:/src/hex2bdf diff --git a/src/hex2bdf b/src/hex2bdf index fc4f02d..7f600e3 100755 --- a/src/hex2bdf +++ b/src/hex2bdf @@ -17,29 +17,80 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . # +# First, parse command-line options. Two are available: +# +# - Font name (-f name or --font name) +# - Lines per glyph (-lnn or --lines nn, where nn is a decimal number) +# +use Getopt::Long; + +$result = GetOptions ( + "copyright|c=s" => \$copyright, # Copyright string + "font|f=s" => \$font_name, # XLFD FAMILY_NAME + "rows|r=i" => \$vpixels, # XLFD PIXEL_SIZE; vertical pixels + "version|v=s" => \$version # Version of this font + ); -while (<>) { $glyph{$1} = $2 if /(....):(.+)\n/; } +if (not $font_name) { + $font_name = "unifont"; +} +if (not $vpixels) { + $vpixels = 16; +} +if (not $version) { + $version = "1.0"; +} + +$point_size = $vpixels; +$point_size10 = 10 * $point_size; + +while (<>) { chomp; $glyph{$1} = $2 if /(....):(.+)/; } @chars = sort keys %glyph; $nchars = $#chars + 1; -# dbmopen (%charname, "/usr/share/unicode/unidata/charname.db", 0); print "STARTFONT 2.1 -FONT -gnu-unifont-medium-r-normal--16-160-75-75-c-80-iso10646-1 -SIZE 16 75 75 -FONTBOUNDINGBOX 16 16 0 -2 -STARTPROPERTIES 3 +FONT -gnu-${font_name}-Medium-R-Normal-Sans-${vpixels}-${point_size10}-75-75-c-80-iso10646-1 +SIZE $point_size 75 75 +FONTBOUNDINGBOX $vpixels $vpixels 0 -2 +STARTPROPERTIES 24 +COPYRIGHT \"${copyright}\" +FONT_VERSION \"${version}\" +FONT_TYPE \"Bitmap\" +FOUNDRY \"GNU\" +FAMILY_NAME \"${font_name}\" +WEIGHT_NAME \"Medium\" +SLANT \"R\" +SETWIDTH_NAME \"Normal\" +ADD_STYLE_NAME \"Sans Serif\" +PIXEL_SIZE ${vpixels} +POINT_SIZE ${point_size10} +RESOLUTION_X 75 +RESOLUTION_Y 75 +SPACING \"C\" +AVERAGE_WIDTH 80 +CHARSET_REGISTRY \"ISO10646\" +CHARSET_ENCODING \"1\" FONT_ASCENT 14 FONT_DESCENT 2 +UNDERLINE_POSITION -2 +UNDERLINE_THICKNESS 1 +CAP_HEIGHT 10 +X_HEIGHT 8 DEFAULT_CHAR 65533 ENDPROPERTIES CHARS $nchars\n"; +# TODO: $swidth needs to be modified to accomodate different widths better +# for glyphs with height different than 16 pixels. + foreach $character (@chars) { $encoding = hex($character); $glyph = $glyph{$character}; - $width = length ($glyph) > 32 ? 2 : 1; - $dwidth = $width * 8; $swidth= $width * 500; - $glyph =~ s/((..){$width})/\n$1/g; + $width = length ($glyph) / $vpixels; # hex digits per row + $dwidth = $width * 4; # device width, in pixels; 1 digit = 4 px + # scalable width, units of 1/1000th full-width glyph + $swidth = (1000 * $width) / ($vpixels / 4); + $glyph =~ s/((.){$width})/\n$1/g; $character = "$character $charname" if $charname = $charname{pack("n",hex($character))}; @@ -47,7 +98,7 @@ foreach $character (@chars) ENCODING $encoding SWIDTH $swidth 0 DWIDTH $dwidth 0 -BBX $dwidth 16 0 -2 +BBX $dwidth $vpixels 0 -2 BITMAP $glyph ENDCHAR\n"; }