
	TWORZENIE FILTRW KONWERTA ORAZ JAK TO DZIAA
	---------------------------------------------

Instalacja okrela bazowy katalog Konwerta, domylnie /usr/local. Pliki
danych Konwerta i pomocnicze skrypty s instalowane w jego podkatalogu
share/konwert, ktry jest podzielony jak nastpuje:

filters - Pliki wykonywalne z tego katalogu s atomowymi filtrami
programu konwert. Wikszo z nich jest skryptami trsa, basha albo perla
albo ich kombinacjami.

aux - Dane i pomocnicze skrypty uywane przez niektre filtry. Nie s
woane bezporednio przez konwerta.

devel - Pliki rdowe filtrw i skrypty suce do budowania z nich
tych filtrw. Nie s potrzebne do normalnego uywania programu konwert,
ale s przydatne do budowania nowych tablic konwersji, wic s
instalowane rwnie.

Katalog lib/konwert zawiera pliki binarne, ktre nie powinny znale si
w katalogu share. Zamiast nich w share/konwert s mikkie linki do nich.

konwert przekazuje swoim filtrom argumenty przez zmienn rodowiskow
ARG, a nie jako normalne argumenty programu. Jest tak poniewa wikszo
filtrw potraktowaaby te argumenty jako pliki rdowe do
przetumaczenia zamiast standardowego wejcia. Argumenty te s
oddzielone spacjami (w wywoaniu konwerta s oddzielone znakami `/').

Obejrzyj Makefile eby zobaczy, jak s budowane konkretne filtry.
Wicej szczegw jest poniej.

Oglna zasada jest taka, e Makefile nie ma zapisanych w sobie na stae
nazw filtrw. Zawiera on tylko reguy ich budowania, a waciwe listy
przetwarzanych plikw s tworzone dynamicznie, na podstawie zawartoci
odpowiednich katalogw rdowych.

Kiedy mwimy o konwersjach zestaww znakw, format U konwerta oznacza
UTF-8 (Unikod). Kady zestaw znakw ma filtr konwertujcy go na UTF-8
i z powrotem. Wikszo konwersji na UTF-8 to proste skrypty trsa.

Trs nie wymaga okrelonego rozmieszczenia sw w swoim skrypcie - musz
one tylko by oddzielone odstpami. Inne narzdzia zarzdzajce
tablicami konwersji wymagaj jednake, eby reguy byy umieszczane w
oddzielnych liniach; kada regua skada si z pojedynczego znaku TAB,
napisu do przetumaczenia, drugiego znaku TAB i napisu zastpujcego
poprzedni.


	SCALANIE TABLIC KONWERSJI

Wiele zestaww znakw bazuje na innych, zmieniajc tylko kilka liter.
Tablice konwersji tych zestaww na UTF-8 s tworzone przez scalenie
definicji zmienionych liter z oryginaln tablic.

Te rnice s zapisane w plikach w katalogach devel/mergewith*, gdzie *
okrela bazowy zestaw znakw. Na przykad devel/mergewithcp437/mazovia-UTF8
zawiera litery mazovii rnice si od cp437. Skrypt devel/mergetrs
czy ze sob dwie tablice albo wicej. Tablice wymienione wczeniej
maj pierwszestwo (jest ono wane tylko kiedy te tablice s pniej
odwracane).


	TRS I UTF-8

Trsowe okrelenie zbioru moliwych znakw przez \[...\] wymaga, eby te
znaki byy pojedynczymi bajtami. Niestety w UTF-8 znaki mog by
zapisane w kilku bajtach. Skrypt devel/fixtrsutf8 upraszcza
przygotowanie waciwych skryptw trsa konwertujcych UTF-8, nawet jeli
uywaj \[...\].

Przyjmuje on niby-trsowy skrypt zawierajcy znaki UTF-8 wewntrz \[...\]
i produkuje skrypt ktry bdzie jednak dziaa. Wyrzuca on wsplne
przedrostki przed \[...\], powielajc linie w razie potrzeby. Wynikowy
plik nie jest poprawnym UTF-8, ale dziaa z trsem.


	KONWERSJE Z UTF-8

Konwersje z UTF-8 s budowane zupenie automatycznie, na podstawie
konwersji odwrotnej i jednej due tablicy opisujcej moliwoci
zastpienia znakw innymi. Tablica ta mwi, e jeli dany znak jest
niedostpny, to powinien by zastpiony takim a takim (albo napisem);
jeli tamten wci jest niedostpny, to jeszcze innym; itd. Ostatnia
moliwo to zawsze ASCII, o ktrym zakadamy, e jest zawsze dostepne
(konwersje na zestawy znakw nie oparte na ASCII nie mog by tworzone
w ten sposb). Tablica owa jest pamitana w pliku devel/UTF8-charset
i jest cakowicie w UTF-8.

Przyblienie moe mie doczone `\}' z cigiem znakw. Bdzie wtedy
uyte tylko jeli wszystkie te znaki bd dostpne, mimo e nie
wystpuj we waciwym przyblieniu. Niektre znaki wymagaj bowiem
rnych przyblie w zalenoci od dostpnoci innych znakw.

Najczciej niedostpne znaki s zamieniane przyblieniami ASCII,
zamiast rnymi omiobitowymi napisami. Tablica konwersji z UTF-8 jest
wic konstruowana z trzech czci:

* Znaki cakowicie dostpne w docelowym zestawie (nie liczc ASCII).
  Tablica ta jest czytana z pliku zajmujcego si konwersj odwrotn
  (na UTF-8).

* Znaki, ktre powinny by zastpione jakimi omiobitowymi napisami.
  Te i tylko te znaki s zapisane we waciwym filtrze z UTF-8.

* Znaki przybliane przez ASCII. Ta tablica jest w aux/UTF8-ascii. Opisuje
  ona rwnie znaki z poprzednich czci (poniewa jest jedna dla
  wszystkich zestaww), ale jest adowana po nich, wic tumaczenia tych
  samych znakw maj niszy priorytet. Ta tablica jest pierwsz
  i ostatni kolumn pliku devel/UTF8-charset.

Skrypt aux/UTF8-charset jest uywany przez prawie wszystkie konwersje
z UTF-8. Obsuguje on argumenty przekazane przez konwerta w zmiennej
ARG i skada odpowiednie tablice razem. Waciwe filtry z UTF-8 woaj
go tylko z pewnymi argumentami.

Katalog aux/argcharset zawiera kilka wsplnych filtrw, przez ktre jest
przepuszczany konwertowany tekst, jeli przekaemy odpowiedni argument
filtrowi UTF8-charset (argument jest nazw pliku z tego katalogu).


	BEZPOREDNIE KONWERSJE MIDZY ZESTAWAMI ZNAKW

Pomidzy niektrymi parami zestaww znakw s bezporednie konwersje,
oprcz konwersji przez tymczasowy format UTF-8. Daje to przyspieszenie
konwersji (i nic wicej).

Filtry takie s tworzone automatycznie. W pliku devel/charset-charset
zapisane s tylko nazwy zestaww znakw, pomidzy ktrymi bd tworzone
konwersje. Z linijki zawierajcej wicej ni jedno sowo tworzone s
kombinacje kady z kadym, przy czym sowa zaczynajce si albo koczce
na `-' s brane pod uwag tylko w jednym kierunku. Na przykad jeli
mamy:

iso2 cp1250 cp852 -ascii

to zostan utworzone konwersje iso2-cp1250, iso2-cp852, iso2-ascii,
cp1250-iso2, cp1250-cp852, cp1250-ascii, cp852-iso2, cp852-cp1250
i cp852-ascii. Przykadowa konwersja cp1250-iso2 zostanie utworzona na
podstawie tabel charsets/cp1250-UTF8, charsets/iso2-UTF8
i devel/UTF8-charset.

Utworzone w ten sposb filtry uywaj wsplnego skryptu
aux/charset-charset. Jeli wrd argumentw konwersji bd takie, ktre
wymagaj poredniej postaci UTF-8, to konwersja odbdzie si tak jak
pomidzy formatami nie posiadajcymi bezporedniej konwersji.


	ROZPOZNAWANIE ZESTAWW ZNAKW - KONWERSJA `any'

Specjalny format wejciowy any/JZYK (np. any/pl) rozpozna kodowanie
automatycznie, na podstawie czstoci znakw znalezionych w tekcie.
Z kadym jzykiem jest skojarzony zbir moliwych kodowa uywanych dla
niego i rednie czstoci jego liter (wyczajc litery ASCII).

Oczekiwane czstoci znakw kadego kodowania s mnoone przez
odpowiednie czstoci z konwertowanego tekstu i dodawane razem.
Kodowanie z najwiekszym wynikiem jest wtedy uywane do konwersji.

Skrypt filters/any-UTF8 pobiera informacje o jzyku z odpowiedniego
pliku aux/any/* (prbujc kady argument z ARG jako kod jezyka - zbir
dostpnych jzykw jest wyznaczony przez zawarto tego katalogu).

Format tych plikw jest prosty: Kada linia skada si z oddzielonych
odstpami nazwy kodowania (jak w filters/*-UTF8) i reprezentacji kadego
znaku w tym kodowaniu. `-' zamiast niego oznacza, e ten znak nie bdzie
brany pod uwag. Reprezentacje te s uywane tylko do rozpoznania
kodowania - ostatecznie normalna konwersja jest wykonywana przez
filters/*-UTF8.

Specjalne kodowanie o nazwie `%' zawiera tylko czstoci tych znakw
(niekoniecznie w procentach).

Nazwa kodowania moe skada si z kilku konwersji oddzielonych przez
`|'. Do ostatniej bdzie doczone `-UTF8' i kada zostanie wzita
z katalogu filters.

iso1 nie jest tutaj uywane, bo jest podzbiorem cp1252.

Pliki rdowe dla aux/any/* znaduj si w katalogu devel/any. Jedyna
rnica jest taka, e niektre nazwy kodowa mog by wypisane bez
reprezentacji znakw. Drugim kodowaniem, po tym specjalnym `%', musi by
utf8, i zostanie ono uyte do uzupenienia tamtych opisw kodowa.

Majc przykadowe teksty w jakim jzyku, do zrobienia tych statystyk
moemy uy skryptw devel/whichletters i devel/frequencies. Tekst musi
by w jakim omiobitowym kodowaniu (np. ISO-8859-x, ale nie UTF-8 ani
SGMLowe encje). `whichletters pliki... >l' wyszukuje znaki o kodach
128..255. Moemy je teraz przejrze usuwajc ewentualne mieci. Dalej
`frequencies l pliki... | konwert X-utf8 >f', gdzie X jest oznaczeniem
odpowiedniego kodowania, i dopisujemy co trzeba.

Konwersja filter/htmlchariso1-iso1 jest wewntrznie uywana przez
niektre automatycznie rozpoznawane konwersje. Jest ona podobna do
htmlchar-iso1, ale idzie bezporednio do iso1 pomijajc utf8
i konwertuje rwnie &#128;...&#159;, ktre bdnie s uywane przez
niektre edytory HTMLa do reprezentacji rozszerzonych znakw z kodowa
innych ni ISO-8859-1.

Filtr obsuguje teraz jzyki cs (czeski), de (niemiecki), el (grecki),
eo (Esperanto), es (hiszpaski), fr (francuski), he (hebrajski),
it (woski), pl (polski), pt (portugalski), ru (rosyjski)
i sv (szwedzki).


	ALIASY

Niektre zestawy znakw s dostpne pod wieloma nazwami, np. cp1250 albo
wince. Jest to zaimplementowane przez twarde linki tworzone podczas
instalacji, na podstawie informacji z pliku devel/aliases.


	TWORZENIE TABLIC KONWERSJI Z INNYCH FORMATW

Skrypt devel/hex-trs konwertuje tablic z formatu ftp.unicode.org na format
trs. Nie jest tutaj uywany, ale zaczony dla wygody.


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