1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
|
FORMAT FONTW SBF
-----------------
SBF to skrt od Simple Bitmap Font, czyli Prosty Font Bitmapowy (co nie
ma nic wsplnego z formatem fontw PFB). Format SBF jest tekstowy,
dziki czemu mona edytowa fonty zwykym edytorem tekstowym, bez
specjalistycznego edytora fontw.
Font SBF skada si ze znakw i dodatkowych informacji o foncie. Kady
znak jest identyfikowany przez nazw, a oprcz nazwy i rysunku znaku
moe zawiera dodatkowe informacje. Rne znaki wygldajce tak samo
mog dzieli pomidzy siebie jeden rysunek znaku; znaki te nazywaj si
wtedy swoimi aliasami.
SKADNIA PLIKU SBF
Plik SBF skada si z akapitw oddzielonych od siebie pustymi liniami.
Kady akapit zawiera albo nagwek fontu, albo nagwki kilku znakw
wraz ze wsplnym dla nich rysunkiem. Nagwek znaku rozpoczyna si od
linii zawierajcej nazw znaku w nawiasach kwadratowych [...]. Znak jest
narysowany za pomoc `.' (zgaszone piksele) i `0' (zapalone). Jeli
akapit nie zaczyna si od `[', to zawiera nagwek fontu, a nagwki
znaku nie mog zaczyna si od `.' ani `0'. W ten sposb pierwszy znak
kadej linii wyznacza jej rodzaj. Nagwkw fontu moe by wiele i mog
by umieszczone w rnych miejscach pliku. Na kocu pliku powinna by
co najmniej jedna pusta linia.
Jeli jaka nazwa znaku si powtarza, to liczy si tylko pierwsze
wystpienie. Dziki temu mona czy fonty przez fizyczne sklejanie
plikw, z czego wyjdzie font skadajcy si ze wszystkich znakw
pierwszego fontu, tych znakw drugiego, ktrych nie byo w pierwszym,
itd.
Rysunku jakiego znaku moe nie by. Wtedy font zawiera tylko dane
o znaku zawarte w jego nagwku, a oprcz tego cz informacji moe by
zawarta w tym, ktre znaki s zgrupowane razem, wsplnie korzystajc
z rysunku znaku, ktrego nie ma.
Wszystkie znaki fontu powinny mie tak sam wysoko. Wysoko fontu
nie jest nigdzie jawnie zapisana i programy mog j wywnioskowa
z wymiarw pierwszego niepustego znaku, po czym zaprotestowa, jeli
jaki znak bdzie mia inn wysoko.
Z drugiej strony, szeroko moe by staa albo zmienna, zalenie od
przeznaczenia i rodzaju fontu.
KONWENCJE ORAZ DODATKOWE INFORMACJE ZAWARTE W FONCIE
Nazwa znaku najczciej ma posta U+xxxx, gdzie xxxx to szesnastkowy
numer znaku w Unikodzie (uzupeniony zerami do 4 cyfr, jeli jest
mniejszy od 1000).
Format informacji o foncie oraz nagwkw znakw jest dosy dowolny,
zaleny od przeznaczenia fontu i danych, ktre chcemy w foncie umieci.
Waniejsze dane maj jednak ustandaryzowan posta. Oglnie, znaczenie
linii jest wyznaczone przez jej pocztek.
Linie zaczynajce si od znaku # to komentarze, ignorowane podczas
interpretowania fontu.
Linia nagwka fontu zaczynajca si od Copyright: okrela licencj
fontu. Kady font powinien zawiera t informacj!
UNIDATA
Na <ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData-Latest.txt> jest
baza danych o znakach Unikodu. Jeli chcemy zapisa cz tych
informacji wraz z fontem SBF, to kolejne pola rekordu umieszczamy w
nagwku znaku w liniach opatrzonych nastepujcymi etykietami:
1. Name:
2. Category:
3. Combining-Class:
4. Bidirectional:
5. Decomposition:
6. Decimal-Digit-Value:
7. Digit-Value:
8. Numeric-Value:
9. Mirrored:
12. Uppercase:
13. Lowercase:
14. Titlecase:
Oprcz albo zamiast pola Decomposition rozkad na skadowe powinien
by zaznaczony w inny sposb: W przypadku kanonicznych rozkadw (bez
dodatkw typu <medial> albo <super>) naley porobi aliasy znaku
o nazwach typu U+xxxx+yyyy+zzzz, gdzie xxxx yyyy zzzz jest rozkadem
znaku, i to nie tylko pierwszy krok rozkadu, ale wszystkie stopnie.
Na przykad znak GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND
YPOGEGRAMMENI powinien by umieszczony pod nazwami U+1F82, U+1F02+0345,
U+1F00+0300+0345 i U+03B1+0313+0300+0345. W ten sposb dany znak bdzie
dostpny zarwno pod swoim pojedynczym kodem, jak i pod swoim rozkadem,
a dodatkowo mona rysowa zoone znaki nie posiadajce indywidualnego
kodu.
KOLEJNO ZNAKW I UWSPLNIANIE RYSUNKW ZNAKW
Kolejno znakw w zasadzie nie ma znaczenia. Jednak konwertery z SBF na
inne formaty fontw oraz programy wywietlajce znaki na ekranie mog
zachowywa kolejno bez zmian w przypadkach, w ktrych w docelowym
formacie kolejno jest wana - dlatego w pewnych kontekstach kolejno
znakw moe by wana.
Jeli font jest przeznaczony do konwersji albo wywietlenia w sytuacji,
w ktrej kolejno znakw bdzie wana, to "puste" znaki wypeniajce
tylko pozycje powinny mie nagwek [dummy] i mie rysunek np. spacji
(jako e znaki bez rysunku mog by pomijane).
Kanoniczna kolejno aliasw danego znaku to od najkrtszych nazw do
najduszych, a w obrbie tej samej dugoci - kolejno alfabetyczna
nazw. Kanoniczn kolejnoci znakw jest wtedy kolejno alfabetyczna
nazw, ktra w przypadku nazw typu U+xxxx pokrywa si z kolejnoci
numerw.
Tak samo wygldajce znaki mog mie uwsplniony rysunek znaku nawet
jeli poza tym nie maj ze sob nic wsplnego. Z reguy font jest
rwnowany swojej "rozwinitej" wersji, w ktrej nie ma aliasw, oraz
maksymalnie "zwinitej", w ktrej wszystkie zdefiniowane (tzn. niepuste)
znaki majce taki sam rysunek s umieszczone razem. Rnice mog si
jednak pojawi w przypadku konwersji na inne formaty i mog mie wpyw
na efektywno uywania fontu - wikszo programw robicych uytek
z aliasw zakada, e ju s porobione.
Narzdzia przetwarzajce fonty powinny w miar monoci zachowywa
stopie uwsplnienia rysunkw znakw.
DZIEWITA KOLUMNA VGI
W trybie tekstowym karty VGA standardowo znaki maj 9 pikseli
szerokoci, ale pamitanych jest tylko 8 pikseli z lewej. Ostatni piksel
w znakach 0xC0...0xDF jest powieleniem poprzedniego, a w pozostaych
jest pusty. Na konsoli Linuxa fizyczna kolejno znakw w foncie jest
niezalena od ich kodw, wic znaki mog by ustawiane w odpowiednich
zakresach fontu w zalenoci od ich wygldu - od tego, czy piksele
znajdujce si w smej kolumnie powinny by powielone w dziewitej,
czy te dziewita powinna pozosta pusta.
Fonty przeznaczone do wywietlania w trybie tekstowym powinny by
narysowane w szerokoci 9 pikseli. Dziewita kolumna suy tylko do
decydowania, ktre znaki musz by umieszczone w zakresie 0xC0...0xDF,
ktre nie mog, a ktrym wszystko jedno. Standardowa interpretacja jest
taka: Jeli jaki piksel jest zapalony w dziewitej kolumnie, to znak
musi by w tym zakresie; w przeciwnym przypadku jeli jaki piksel jest
zapalony w smej kolumnie, to znak nie moe by w tym zakresie;
w przeciwnym przypadku wszystko jedno. Tak wic ten rysunek w dziewiciu
kolumnach niekoniecznie wywietli si dokadnie tak jak jest narysowany:
jeli jaki piksel jest zapalony w dziewitej kolumnie, to caa ta
kolumna bdzie powieleniem poprzedniej. Jeli znak ma narysowany w omiu
pikselach, to w zalenoci od kontekstu albo naley go traktowa tak,
jakby dziewita kolumna bya pusta, albo cay font jest narysowany
w omiu pikselach i naley go wywietli na takiej pozycji, na jakiej
znajduje si w foncie. Drugie podejcie przy tworzeniu fontw jest
niezalecane: kady font przeznaczony do trybu tekstowego powinien mie
narysowane 9 pikseli.
PRZYKAD
Oto przykadowe kilka znakw w formacje SBF:
[U+0048]
Name: LATIN CAPITAL LETTER H
Category: Lu
[U+0397]
Name: GREEK CAPITAL LETTER ETA
Category: Lu
[U+041D]
Name: CYRILLIC CAPITAL LETTER EN
Category: Lu
.........
.........
.........
.00...00.
.00...00.
.00...00.
.00...00.
.0000000.
.00...00.
.00...00.
.00...00.
.00...00.
.00...00.
.........
.........
.........
[U+006A+0301]
Name: LATIN SMALL LETTER J WITH ACUTE
Category: Ll
Decomposition: 006A 0301
.........
.........
.........
.....00..
....00...
.........
....00...
....00...
....00...
....00...
....00...
....00...
....00...
....00...
.00.00...
..000....
[U+0118]
Name: LATIN CAPITAL LETTER E WITH OGONEK
Category: Lu
Decomposition: 0045 0328
[U+0045+0328]
Name: LATIN CAPITAL LETTER E WITH OGONEK
Category: Lu
Decomposition: 0045 0328
.........
.........
.........
.0000000.
.00......
.00......
.00......
.00000...
.00......
.00......
.00......
.00......
.0000000.
......0..
.....00..
......00.
[U+FB1F]
Name: HEBREW LIGATURE YIDDISH YOD YOD PATAH
Category: Lo
Decomposition: 05F2 05B7
[U+05F2+05B7]
Name: HEBREW LIGATURE YIDDISH YOD YOD PATAH
Category: Lo
Decomposition: 05F2 05B7
--
__("< Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.home.ml.org/
\__/ GCS/M d- s+:-- a21 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++
^^ W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK 5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-
|