File: format_sbf

package info (click to toggle)
fonty 1.0-8
  • links: PTS
  • area: main
  • in suites: potato
  • size: 1,988 kB
  • ctags: 112
  • sloc: perl: 2,097; cpp: 1,114; makefile: 133; sh: 97
file content (253 lines) | stat: -rw-r--r-- 8,665 bytes parent folder | download | duplicates (4)
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-