
	FONTY NA KONSOLI LINUXA - TEORIA
	--------------------------------

Oprcz siedmiobitowego ASCII, konsola Linuxa moe wywietla teksty
w rnych omiobitowych zestawach znakw (najczciej ISO-8859-x
albo KOI8-R) i w Unikodzie.

W wywietlaniu znaku bierze udzia kilka tablic przekodowa numerw
znakw, dziki czemu sposb kodowania znakw uywany przez programy jest
niezaleny od zbioru znakw dostpnych w foncie i ich kolejnoci.

Kady znak jest najpierw wewntrznie tumaczony na Unikod, a potem na
numer pozycji w foncie. Co prawda mona te tumaczy znaki bezporednio
z kodw znakw aplikacji na pozycje w foncie, ale lepiej jest korzysta
z tablic przechodzcych przez Unikod, dziki czemu nie tylko ten sam
font moe by uyty do rnych kodowa zawierajcych podobne zbiory
znakw i do Unikodu, ale rwnie ta sama tablica kodw znakw aplikacji
moe by uywana z rnymi fontami.


	SZCZEGӣY

Wybr zestawu znakw aplikacji jest z historycznych powodw bardziej
skomplikowany ni mgby by. S mianowicie cztery zestawy znakw do
wyboru:

- ISO-8859-1. Zawiera litery jzykw zachodnioeuropejskich i troch
symboli specjalnych.

- Grafika VT100. Zamiast maych liter ASCII i paru innych znakw zawiera
pojedyncze ramki i kilka symboli.

- CP-437. Zawiera semigrafik (m.in. pojedycze, podwjne
i pojedynczo-podwjne ramki), cz zachodnioeuropejskich liter (brak
wikszoci duych liter) i symboli.

- Mapa definiowana przez uytkownika. Tutaj mona zaadowa dowoln
tablic kodw znakw, np. ISO-8859-2. W dalszym cigu tego tekstu
ISO-8859-2 bdzie uywane jako przykadowy "dowolny" zestaw.

eby bardziej spraw zagmatwa, nie wybiera si powyszych zestaww
bezporednio: s dwie mapy (o nazwach G0 i G1) i pod kad z nich mona
podczy jeden z powyszych zestaww, a potem przecza si pomidzy
G0 a G1.

Kody przeczajce mapowania s opisane w `man console_codes'.

Domylnie G0 wskazuje na ISO-8859-1, a G1 - na grafik VT100. Domyln
zawartoci czwartej, definiowalnej mapy ACM jest specjalna mapa
oznaczajca kolejne fizyczne znaki z fontu, nie patrzc na ich kody.
Znaki wedug pozycji w foncie s dostpna w linuksowym Unikodzie
w zakresie U+F000...U+F1FF (font moe mie 256 albo 512 znakw).

W praktyce przez wikszo czasu aktywna jest mapa G0, do ktrej jest
podczone albo ISO-8859-1, albo odpowiednio zdefiniowany zestaw
uytkownika, jeli ma by inny ni ISO-8859-1. Niektre programy
przeczaj si na chwil na CP-437 albo VT100, eby dosta si do
semigrafiki. Informacje, jak naley si przecza na jaki zestaw
z ramkami i pod jakimi kodami kryj si niektre symbole, s zapisane
w termcapie i terminfo. Dla konsoli Linuxa domylnie ramki s uzyskiwane
poprzez CP-437.

Powysze mapy nazywaj si ACM - application-charset map i tumacz
znaki uywane przez programy na Unikod. Kiedy konsola jest w trybie
unikodowym, znaki s emitowane bezporednio w UTF-8, bez powyszego
mapowania. Drugi etap tumaczenia jest taki sam, jak w przypadku trybu
jednobajtowego - opisany poniej:

Mapa tumaczca Unikod na fizyczne pozycje znakw w foncie jest zwykle
wbudowana w font i nazywa si SFM - screen font map. Rnym znakom
Unikodu mog odpowiada te same znaki fizycznego fontu - dziki temu
mona uwsplni rne znaki wygldajce tak samo (np. aciskie H,
greck ET i rosyjskie EN), a dodatkowo jeli font nie cakiem pasuje do
mapy ACM oraz w trybie unikodowym otrzymamy np. litery z obcitymi
akcentami zamiast jakich kwadracikw albo pytajnikw zastpujcych
niedostpne znaki (normalnie gdy jakiego znaku brakuje w foncie, to
jest wywietlany jako znak U+FFFD, dlatego kady font powinien zawiera
taki znak).

Console-tools implementuj mechanizm uatwiajcy zaadowanie
odpowiedniej tablicy przyblie: tzw. tablice fallback. We waciwej
tablicy SFM wystarczy zapisa tylko dokadne znaczenia poszczeglnych
znakw, a informacje o mapowaniu przyblie zostan utworzone
automatycznie na podstawie pliku wymieniajcego moliwe przyblienia
poszczeglnych znakw Unikodu. Podobna idea suy do budowania tablic
konwersji z Unikodu na inne zestawy znakw w pakiecie Konwert.

Tak wic fizyczna kolejno znakw w foncie nie ma wikszego znaczenia.
Kady znak jest opisany numerami Unikodu i prawie zawsze jest
identyfikowany wanie poprzez nie, a nie przez pozycj w foncie. Font
zawiera jakby tylko _zbir_ znakw, bez okrelonej ich kolejnoci. Zbir
ten nie musi si pokrywa z adnym konkretnym kodowaniem, takim jak
ISO-8859-2. W praktyce jednak font najczciej zawiera znaki jakiego
omiobitowego zestawu, np. z ISO-8859-2, oraz co najmniej cz ramek,
tak eby po przeczeniu na CP-437 albo VT100 waniejsze znaki byy
dostpne, i by moe dodatkowe znaki do uycia w trybie unikodowym.
Fonty zaprojektowane z myl o uywaniu ich gwnie w trybie unikodowym
mog zawiera bardziej dowolne podzbiory znakw.

Uniezalenienie pozycji znakw w foncie od kodw aplikacji jest o tyle
wane, e na karcie VGA cz znakw ramek z powodu swojego wygldu musi
by umieszczona w zakresie 0xC0...0xDF, a niektre inne znaki nie mog
by w tym zakresie. Standardowo znaki maj bowiem 9 pikseli szerokoci,
a pamitanych jest tylko 8 pikseli z lewej. Ostatni piksel w znakach
0xC0...0xDF jest powieleniem poprzedniego, a w pozostaych jest pusty.
Ramki dotykajce prawej krawdzi znaku musz wic by w tym zakresie,
eby czyy si ze sob bez przerw, a szerokie znaki sigajce blisko
prawej krawdzi znaku nie mog si tam znale. Tymczasem zestawy
ISO-8859-x zajmuj wszystkie ramkowe pozycje rnymi literami.


	KOPIOWANIE TEKSTU MYSZ
	I UWSPLNIANIE IDENTYCZNIE WYGLDAJCYCH ZNAKW

Jeli uywamy gpm do kopiowania tekstu mysz, Linux musi przekodowywa
znaki w drug stron - z pozycji w foncie (odczytanej bezporednio
z ekranu) na kody aplikacji. S tutaj dwie moliwe przyczyny przekama.

Po pierwsze, jeli znak by wypisany na ekran uywajc innej mapy ACM
ni aktualnie wybrana albo przez Unikod, to nie mona go przetumaczy
przez odwrotn ACM, jeli go w niej nie ma.

Po drugie, mapa SFM nie musi by rowartociowa, wic jeli jeden
fizyczny znak na ekranie odpowiada kilku znakom Unikodu, to przy
pobieraniu go z ekranu zostanie uyty niekoniecznie ten z nich, za
pomoc ktrego ten znak by oryginalnie wyprodukowany.

Druga przyczyna teoretycznie mogaby by wyeliminowana, gdyby sterownik
konsoli przechowywa zawarto ekranu w Unikodzie, ale w jdrach 2.0.x
i 2.1.x na razie tak nie jest.

Dlatego fonty nie powinny bez potrzeby wsadza tak samo wygldajcych
znakw do jednego. To co prawda wyglda zupenie poprawnie, ale le si
kopiuje mysz. Jednak GPM nie obsuguje Unikodu, wic w przypadku trybu
unikodowego rozszerzone znaki i tak niepoprawnie si skopiuj. W fontach
przeznaczonych bardziej do trybu unikodowego mona miao uwsplnia
rysunki znakw. Rwnie jeli na zmieszczeniu moliwie duej liczby
znakw w foncie zaley nam bardziej ni na poprawnym kopiowaniu tekstu
gpmem, mona uwsplnia.


-- 
 __("<   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-
