🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.ogonki
Article #7054

Re: Quenejskie locale

#7054
From: Marcin 'Qrczak' Kowalczyk
Date: Mon, 31 Aug 1998 19:02
263 lines
11994 bytes
On Mon, 31 Aug 1998, Gwidon S. Naskrent wrote:

> Uff, teraz rozumiem! Ale przeciez to dosc skomplikowane;

Ano :-)

> no i jak oblozyles ten zakres Exxx? Na priva napisales mi ze te znaki
> nie maja kodow, a teraz sie okazuje ze sa w zakresie.

Przepraszam, miało być Fxxx.

_Każdy_ znak jest w zakresie U+F000..U+F0FF (albo U+F000..U+F1FF
w przypadku 512 znaków). Jest coś takiego (szkic):

unsigned short potrzeba_znaku (numer znak)
{
    if (w_ogole_nie_znamy_takiego_znaku (znak)) znak = 0xFFFD;
    unsigned short nowy = daj_nowy_numer_znaku (znak);
    if (nowy == 0xFFFF)  // Nie mamy teraz takiego znaku w foncie na ekranie
    {
        nowy = znajdz_najdawniej_uzywany_znak ();
        do_wywalenia = daj_stary_numer_znaku (nowy);
        wywal_znak_z_fontu (do_wywalenia);
        dodaj_znak_do_fontu (nowy, znak);
        zmien_font_na_ekranie ();
        uaktualnij_tablice_sfm_na_ekranie ();
    }
    zaznacz_jako_ostatnio_uzywany_znak (nowy);
    return w_jednym_kawalku (znak) && znak.nr[0] < 0x10000 &&
        !znak.bold ** !znak.underline ? znak.nr[0] : 0xF000 | nowy;
}

void wyswietl_znak (char c)
{
    ...
    unsigned long utf8 = zdekodowany_utf8;
    if (to_jest_znak_do_wyswietlenia_a_nie_sekwencja_sterujaca ())
    {
        if (to_jest_dokladany_akcent (utf8) &&
            ostatnio_wyswietlalismy_jakis_znak_a_nie_sekwencje_sterujaca ())
        {
            dodaj_fragment_do_znaku (z, utf8);
            cout << '\b';
        }
        else
            z = utf8;
        narysuj_znak_z_akcentow_jesli_go_nie_mamy_i_jesli_sie_uda (z);
        wypisz_utf8 (potrzeba_znaku (z));
    }
    else
        cout << c;
}

main()
{
    ...
    while ((c = cin.get ()) != -1) wyswietl_znak (c);
    ...
}

Dodatkowo trochę skomplikowane przez aliasy (znaki wyglądające tak samo,
np. rosyjskie R i polskie P, zajmują wspólną pozycję), wsadzanie do
odpowiedniego zakresu ze względu na 9ą kolumnę i opcjonalne zachowywanie
ASCII bez zmian.

> #>Zlozenia sa uzywane kiedy program wyemituje kolejne znaki bezposrednio po
> #>sobie, bez kodow sterujacych pomiedzy. Program pisze np. E (dynafont pisze
> #>E), program pisze ogonek (dynafont pisze \b oraz E [E z ogonkiem], przy
> 
> \b = backspace, ^H?

Tak.

> Teraz wreszcie rozumiem w calosci... na jakim poziomie zaimplementowano
> obsluge zlozen? Filterm czy mapa klawiatury?

Powyższy program (nazywa się dynafont) jest puszczany pod filtermem jako
konwersja wyjścia, czyli ekranu. Jeśli w mapie klawiatury będą nakładające
się akcenty, to zakładając, że program prześle je bez zmian na ekran,
zostaną wyświetlona. Akurat nie mam takich map klawiatur i testowałem
przez Alt-numerek. Tyle że wyświetlenie takiego znaku nie przesuwa kursora
w prawo.

> A ja tylko mowie jak to wyglada w windzianych TT - wlasnie jako zlozenie z
> tym cudzyslowem. "Wyglada jak przecinek" - sformulowanie godne laika, gdyby
> to widzial Adam Twardoch... ;-)

Przecinek wygląda jak apostrof :-P  tyle że u dołu.

> #>> :( A co z owa slynna poprawka do basha?
> #>
> #>Tez zglupieje oczywiscie.
> 
> Znaczy piszesz poprawke do poprawki?

Nie bardzo, bo nie ma jak rozpoznać, które znaki mają jaką szerokość.
Przecież najczęściej będzie używana bez filterma.

Chyba żeby jakoś wbudować listę akcentów na sztywno... Właśnie dodałem do
fontu informacje również o znakach, których w nich nie ma, więc traktuje
jako nakładane akcenty również znaki, których nie ma w foncie, i ten
zestaw będzie w miarę stały. Więc teoretycznie można by w basha wbudować
tę listę znaków na stałe i testować np. jeden z nich. Ale ogólnie
przydałaby się lepsza metoda testowania niż wypisanie na ekranie
i sprawdzenie, o ile się przesunął kursor... Pogadam jeszcze na ten temat
z Yannem Dirsonem.

Od bashowców nie dostałem na razie żadnej odpowiedzi (wcześniej, zanim
zrobiłem poprawkę, powiedzieli, że jeśli to w żaden sposób nie popsuje
trybu nieunikodowego, to może ją dodadzą, chociaż niekoniecznie
natychmiast)...

> #>Ilekolwiek, moze byc za duzo. W ekstremalnym przypadku moze sie zdarzyc
> #>6 * szerokosc ekranu w znakach, a z dokladanymi akcentami jeszcze wiecej.
> 
> Ale ja musze miec jakas sensowna stala wartosc, bo przeciez nie bede
> mu pokazywal za kazdym razem ile kolumn?

Ja pokazuję za każdym razem - tak często unikodowych tekstów nie oglądam
:-)

> Wiem o tym i ubolewam; niestety webmaster nie chce nawet slyszec o
> Unikodzie, bo sie po prostu nie zna. Mimo ze polecalem mu twoj konwerter.
> Jesli ci sie chce, to sprobuj go przekonac, ale watpie czy dasz rade...

Oj, ciężko... A jakiej przeglądarki on używa? Nie zgodzi się nawet jeśli
mu pokażemy gotową nową stronę wraz z demonstracją krzaków, jakie są w tej
chwili, i z poprawnym wyświetleniem nowej?

> Nie znam takiego jezyka (ktory by mial wszystkie znaki skladane); CJK
> pomijam.

Teoretycznie można składać i polski.

W tej chwili znam jeden program, który produkuje tekst zawierający znaki
"niepotrzebnie" złożone z akcentów, nawet kiedy istnieją samodzielnie:
mój konwerter na alfabet do polskiego zaznaczający samogłoski akcentami,
a spółgłoski dużymi i małymi literami łacińskimi. Chociaż i tak nic tutaj
nie pomoże, jeśli niektóre złożenia zastąpimy samodzielnymi znakami -
mnóstwo pozostanie.

> Jesli znasz sie na lexie to dysponuje plikami z regulami (.l) Martina
> Kutschkera. Obiecalem mu z tego zrobic wersje w awk, ale nie wyszlo.

Najprawdopodobniej znam się w wystarczającym stopniu, żeby zrozumieć;
do tej pory pisałem w leksie jedną własną rzecz. To jest w sumie podobne
w idei do trs, powinno się łatwo przetłumaczyć.

> Podzial podzialem, ale kazdy znak musi miec opisane wlasciwosci (jak
> widziales na ftp.unicode.org, to wiesz co to jest - takie scisnieta
> baza danych z : jako separatorem pol).

Nazwy znaków są tam opisane w HTMLu, a pozostałe informację, które
importuję do fontu (kategorię i rozkład) dodałem ręcznie. Na razie mam
tylko 40 znaków + tehty, bez pozostałych i bez żadnych złożeń. Całościowe
uzupełnienie tej bazy danych nie jest chyba na razie potrzebne; skrypt
uaktualniający te dane w foncie pozostawia bez zmian opisy znaków, których
nie ma w bazie, więc wystarczy dodać ręcznie te konieczne.

> No dobra, niech bedzie "fonty TT" (tm).

Ja i tak wolę trutajpy :-P

> Ale poniewaz rysujacy fonty sa leniwi, a poza tym to sa
> imperialistyczni i antyslowianscy, nie chce im sie rysowac ogonkow i
> wszystko jest skladane.

To już nie wina idei, tylko ich.

> No tak, ksztalt litery tez sie oczywiscie zmienia (zwlaszcza na dole ;)

Etam, e jest podzbiorem właściwym ę [e z ogonkiem]! Co więcej, upierałbym
się, że w większości fontów istnieje taki kształt ogonka, że ą [a z ogonkiem]
= a + ów ogonek umieszczony w odpowiednim miejscu itd. dla wszystkich
liter z ogonkami. Tym bardziej dla akcentów nieprzyklejonych (np. akuta
trzeba tylko dwie wersje - do dużych liter oraz małych z górnymi
wydłużeniami jest bardziej płaski niż do pozostałych małych).

> #>W takim razie co znaczy slowo "tengwar"?
> 
> L.mn. od tengwa "znak, naciecie, litera".

Czyli znaki, czyli alfabet :-P

> #>Nie szkodzi, skladanie moze byc u mnie wielokrotne, a maksymalna ilosc
> #>akcentow jest kwestia z#definiowania jednej stalej. Funkcja starajaca sie
> 
> Bardzo przepraszam, czy to "z#definiowania" to liter#owka, czy kolejny
> genialny pomysl na uzdrowienie polskiej ortografii?

Spolszczenie #define z C :-)

> #>> #>Akurat z ostatnimi szescioma wyrazami sie zgadzam :-)
> #>> 
> #>> A z czym sie nie zgadzasz?
> #>
> #>Wlasciwie to z reszta tez sie zgadzam :-)
> 
> Znaczy podoba ci sie moj uklad (bez rozszerzen)?

AFAIR tam było napisane coś wręcz przeciwnego!

> Co zdobyc? Dodatek D i E? Dowolna biblioteka, wydanie Atlantisu (duze
> z obrazkami), albo WILu (trzytomowe, twarda okladka).

Ech, musi mi się chcieć pójść do biblioteki (i muszę mieć czas)...

> No to co? l/ istnialo w jezykach Srodziemia, a c' nie. To co zrobilem, to
> nadbudowa. Nie ruszylem w gruncie rzeczy struktury tabelki (poza czwarta
> kolumna, ale gdzies trzeba bylo upchnac z/, sz, dz/, cz, czego znowu
> w Srodziemiu nie znano).

Angielski w zasadzie też nie rusza struktury, a jednak k i g przeniosło
się w inne miejsce.

No więc zobaczyłem, jak sprawa wygląda, i zdaje się, że z małą pomocą
sześciu spośród tych "rozszerzonych" wersji z telco w górę i w dół daje
się zrobić przyporządkowanie wszystkich spółgłosek oddzielnym tengwom.
Dodatkowe samogłoski też się zmieszczą: ó [o z kreską] zamiast długiego o,
symetrycznie (zamiast u oraz uu) wychodzi mi ę [e z ogonkiem] i ą [a
z ogonkiem] - to jest chyba _jedyny_ przypadek, w którym chcąc zachować
logikę, przesuwam jakąś literę w inne miejsce - oprócz tego do dodatkowych
polskich głosek używam tylko liter, które i tak nie są potrzebne do
oryginalnych celów. Dla u pozostaje takie coś wyglądające jak v. y jest
razem z i - przy odpowiednich zasadach można ściśle wydedukować, jak się
to wymawia, w zależności od poprzedzającej spółgłoski, i tak jest
w większości moich ortografii. Miękkość w sumie wyszła trochę
niejednorodnie, tzn. odpowiedniki twarda-miękka są różnego rodzaju
w różnych przypadkach - trudno, nie chciałem za bardzo rozwalać
istniejących znaczeń.

Z grubsza kolejność spółgłosek wychodzi mi taka (według draftu od E000
poczynając):

t p cz k/k' d b dż[dz.] g/g'
f' f sz ch w' w ż[z.] h n m ń[n'] m'
- - j - r rz ł[l/] l/l' s ś[s'] z ź[z']
- - - - - nośnik - - ć[c'] p' - c dź[dz'] b' - dz

k/k' itd. oznacza k albo k' w zależności od samogłoski, jak w większości
moich ortografii.

Najbardziej jest to podobne do angielskiego przyporządkowania.

Mogę się zgodzić na pojedyncze zmiany, ale nie uznaję zmiany idei :-P

Oczywiście np. "ortografii" powinno się pisać przez f' + j + i na końcu.
Takoż sporo innych słów z podobnymi połączeniami.

O ile g+e to gie, o tyle żeby zapisać ge, wystarczy zrobić g osobno
i e z nośnikiem osobno. Takoż dla chi, ri, szi, dżi[dz.i] itp.

Wypadałoby też pisać swoji, szyji, przyzwyczajić, jich, słojik itp.
W końcy ilość liter się nie zmieni :-)

Można jeszcze dodać indywidualną literę dla y w wyjątkowych pozycjach
(po samogłoskach, na początku wyrazu, jy, ly, ky, siy, wiy itd.).

-- 
 __("<   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-
Technical Details
Message-ID: <Pine.LNX.4.01.9808311942001.18538-100000@qrnik.knm.org.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!orion.cst.tpsa.pl!news.tpnet.pl!not-for-mail
References: <Pine.BSF.4.02A.9808291039420.263-100000@hoth.amu.edu.pl> <Pine.LNX.4.01.9808291346360.1092-100000@qrnik.knm.org.pl> <Pine.BSF.4.02A.9808311635010.29291-100000@hoth.amu.edu.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!news.icm.edu.pl!orion.cst.tpsa.pl!news.tpnet.pl!not-for-mail
From: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl>
Newsgroups: pl.comp.ogonki
Subject: Re: Quenejskie locale
Organization: Klub Nieszkodliwych Manjaków
Lines: 264
Message-ID: <Pine.LNX.4.01.9808311942001.18538-100000@qrnik.knm.org.pl>
References: <Pine.BSF.4.02A.9808291039420.263-100000@hoth.amu.edu.pl> <Pine.LNX.4.01.9808291346360.1092-100000@qrnik.knm.org.pl> <Pine.BSF.4.02A.9808311635010.29291-100000@hoth.amu.edu.pl>
Mime-Version: 1.0
In-Reply-To: <Pine.BSF.4.02A.9808311635010.29291-100000@hoth.amu.edu.pl>
Date: Mon, 31 Aug 1998 19:02:33 GMT
NNTP-Posting-Host: 194.204.131.172
X-Complaints-To: abuse@tpsa.pl
X-Trace: news.tpnet.pl 904590153 194.204.131.172 (Mon, 31 Aug 1998 21:02:33 MET DST)
NNTP-Posting-Date: Mon, 31 Aug 1998 21:02:33 MET DST
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit