Ауторска права © 2003. Страхиња Радић. Штампање, расподела и преглед овог документа су дозвољени уколико је очувано ово обавештење, а измене нису дозвољене. Формат Хекс и списе hexdraw.pl и hex2bdf.pl је саставио Роман Чибора (Roman Czyborra), http://www.czyborra.com. Спис hex2bdf.pl је незнатно изменио Страхиња Радић.
На Интернету постоји много (бесплатних и куповних) фонтова, али мало их садржи све или бар већину знакова Уникода. Још је мање бесплатних фонтова који их садрже. Пошто су за развој фонтова у ЧруТајп (TrueType) или Тип 1 (Type 1) форматима потребни време, много пажње и скупи програми, па стога и новац, за развој ГНУ-овог Унифонта је измишљен формат Хекс (Hex), са ким се уз помоћ обичног уређивача могу мењати знакови у фонту.
Формат Хекс је релативно једноставан. За сваки знак се у датотеку уписују, раздвојени двотачком, његов хексадекадни код у Уникоду и битмапа од 8×16 или 16×16 тачака представљених битовима, а ради практичнијег записа сваки бајт битмапе се записује као пар хексадекадних цифара. Све ово се уписује у датотеку у обичном текстуалном формату, тј. аски (ASCII) 8-битним кодовима (користе се доњих 7 битова: 0-127).
У пракси: знак 0463 = CYRILLIC SMALL LETTER
YAT (мало слово јат), који, на пример, изгледа овако (у матрици
8×16):
-------- -------- -------- -------- -------- -------- -------- -------- ---#---- -#####-- -#-#-#-- ---#---- ---###-- ---#--#- ---#---# ---##### |
Легенда:# = бит 1- = бит 0
|
може се представити бинарним бројем
00000000 00000000 00000000 00000000 00000000 \ 00000000 00000000 00000000 00010000 01111100 \ 01010100 00010000 00011100 00010010 00010001 \ 00011111кога ради краћег записа претварамо у хексадекадни облик:
00 00 00 00 00 00 00 00 10 7C 54 10 1C 12 11 1Fи, најзад, добијамо коначни облик знака у фонту:
0463:0000000000000000107C54101C12111F
Од програма који подржавају формат Хекс се истиче уређивач Јудит, кога можете преузети са адресе http://www.yudit.org. Тај програм директно подржава формат Хекс, па за приказ фонта није потребно његово претварање у неки други формат. У наставку ћу се позабавити изменом фонтова у формату Хекс.
Овакав начин записа има два очигледна недостатка:
Први недостатак се отклања употребом програма за компресију, као што је нпр.
gzip, док се други лако отклања следећим списом (датотека hexdraw.pl):
#!/usr/bin/perl -p
sub unpack {
local ($_) = @_;
$_ = unpack ("B*", pack ("H*", $_));
$width=length($_)/16;
s/(.{$width})/\t$1\n/g;
y/01/-#/;
$_;
};
sub pack {
local ($_) = @_;
y/-#/01/;
$_= unpack ("H*", pack ("B*", $_));
y/a-f/A-F/;
$_;
}
s/([0-9A-F]{64})/&unpack($1)/ie ||
s/([0-9A-F]{32})/&unpack($1)/ie ||
s/\t([-#]+)\n/&pack($1)/e;
|
$ grep 0463 mojfont.hex | perl hexdraw.pl > jat.txtПосле измена, знак додајемо у фонт директно, у уређивачу, или на следећи начин из љуске:
$ sh -c 'dodaj.sh 0463 jat.txt mojfont.hex'Фајл
dodaj.sh изгледа овако:
#!/bin/sh hex=`echo $2 | sed -e's/\.txt/.hex/g'` cat $2 | perl hexdraw.pl > $hex grep -v $1 $3 > $3~ cat $hex >> $3~ sort $3~ > $3 rm -f $3~ |
Фонтови у формату Хекс се, наравно, могу претворити у било који други
формат који подржава битмапе. Тако, на пример, уз помоћ списа
hex2bdf.pl:
#!/usr/bin/perl
while (<>) { $glyph{$1} = $2 if /(....):(.+)\n/; }
@chars = sort keys %glyph; $[ = 1;
dbmopen (%charname, "/usr/share/unicode/unidata/charname.db", 0);
print "STARTFONT 2.1
FONT -gnu-$ARGV[0]-medium-r-normal--16-160-75-75-c-80-iso10646-1
SIZE 16 75 75
FONTBOUNDINGBOX 16 16 0 -2
STARTPROPERTIES 2
FONT_ASCENT 14
FONT_DESCENT 2
ENDPROPERTIES
CHARS $#chars\n";
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;
$character = "$character $charname"
if $charname = $charname{pack("n",hex($character))};
print "STARTCHAR U+$character
ENCODING $encoding
SWIDTH $swidth 0
DWIDTH $dwidth 0
BBX $dwidth 16 0 -2
BITMAP $glyph
ENDCHAR\n";
}
print "ENDFONT\n";
|
$ perl hex2bdf.pl mojfont < mojfont.hex > mojfont.bdf $ bdftopcf -o mojfont.pcf mojfont.bdf $ gzip -9 mojfont.pcf
Уколико наиђете на проблеме приликом употребе фонтова у формату Хекс,
напишите ми писмо на адресу mr99164 at alas.matf.bg.ac.yu.
Уколико будем имао времена и уколико ми тог дана не стигне брдо
нежељене поште, пробаћу да вам одговорим.
Срећно!
Страхиња Радић,
у Београду, 5. јуна 2003. (за верзију 1.0)