Rašmenys

Ženklų kodai, šriftai ir rašto sistemos...
Žemė, - nemaža planeta ir joje mes nesame vieni. Tai suprasti sunkiau didelėms tautoms, tačiau apie tai pagalvoti turi ir programuotojai. Daugiakalbiškumo problemos dažniausiai susiveda į teksto išvedimą. Ko gi nori ir tikisi vartotojai?

Rašto sistema susideda iš taisyklių kaip pavaizduoti duomenis toje kalboje naudojant atitinkamą ženklų kodavimo sistemą. Šiuo metu pasaulyje naudojama daugiau nei 30 skirtingų ženklų aibių, tarp kurių paminėtinos kinų, arabų, lotynų, rusų, japonų ir žydų. Šios sistemos skiriasi žodžių grafiniu vaizdavimo būdu. Naudojančiose raides ženklų sistemose (lotynų, graikų ar rusų) simboliai dažniausiai atitinka tos kalbos garsus (t.y. fonemas). Skiemenų pagrindu sukurtose rašto sistemose (pvz., japonų kana) ženklai atitinka skiemenis. Sudėtingos rašto sistemos (pvz., kinų hanzi ar japonų kanji) turi iki 30 tūkst. piktogramų. Jie atitinka atskirus garsus ir reiškia ištisus žodžius.

Programuotojo požiūriu, rašto sistemas galima suskirstyti į:

Kai kurios kalbos (thai, korėjiečių ar žydų) turi ženklų kekes, panašias, tačiau daug sudėtingesnes už lietuvių nosines ar raides su paukščiukais. Žymint teksto dalis, šalinant ženklus ar perkeliant žymeklį tokias kekes reikia traktuoti kaip vientisą simbolį. O į tokią kekę gali įeiti net iki penkių ženklų. Lotynų kalbų ligatūros (dvi raidės žymimos vienu ženklu) yra atskiras kekių atvejis. Keičiant tekstą į didžiąsias raides (pvz., sakinio pradžioje) turi būti pakeistos abu ligatūrą sudarantys ženklai.

Ženklų ir žodžių ribos gali būti randamos įvairiai. Pavyzdžiui, net anglų kalboje prieš daugelį skirtukų nepriimta pradėti naujos eilutės, tačiau ji gali prasidėti skliaustu. Daugelyje Azijos kalbų nėra skirtukų tarp žodžių, todėl joms taikomi savi algoritmai. Pavyzdžiui japonų kalboje pereiti į naują eilutę galima net esant žodžio viduje, tačiau neleidžiama skelti iš kelių ženklų sudarytus simbolius.

Kai kurioms kalboms negalima net naudoti mums įprastų šriftų operacijų, pvz., turėti tekstą pusjuodį, pabrauktą ar kursyvu.

Yra ir daug kitų niuansų. Pavyzdžiui net Europos kalvose (pvz., vokiečių) keliant žodį per brūkšnelį gali keistis žodžio rašyba. Žodžiai ar jų šaknys gali kisti, priklausomai nuo žodžio laiko, giminės ar nuosakos. Daugelis Europos kalbų turi dvi gimines, tačiau vokiečiai tris, o kai kurios kitos kalbos net iki 17-a. Tad pasaulio kalbų Babilono bokšte galima sutikti įvairių nelauktų atvejų.

Į skirtumus reikia atsižvelgti naudojant ir piktogramos, ženklai ir metaforos. Turi įtakos net spalvų parinkimas, pavyzdžiui, Rusijai skirtose programose reiktų vengti geltonos spalvos.

Unicode

Nemažas vartotojų kiekis sakys, kad neprošal turėti ir lietuviškas programų versijas. Tačiau daug didesniam jų kiekiui yra svarbiau, kad jie galėtų sukurti ir paimti lietuviškus duomenis. Programinės įrangos lietuvizavimas gali kainuoti nuo 50-60 tūkst. iki pusės milijono dolerių. Žymiai mažiau užtektų tvarkingam darbui lietuviškos informacijos tvarkymui normalizuoti.

Viena iš galimybių daugiakalbiškumui įveikti yra "Unicode". Kiti alternatyvūs sprendimo būdai nėra tokie paprasti ir patogūs. Dažniausiai jie turi mišrią vieno ir kelių baitų ženklų kodavimo schemą. "Unicode" ISO 10646 standartas numato vieningą 16-os bitų kodavimą visiems dažniau pasaulyje naudojamoms rašto sistemoms.

Jo paskirtis yra turėti vieną kodų sistemą kuo didesnei rašto sistemų aibei. Tą realizuojant dažnai susiduriama ženklavietės ("codepoint") sąvoka, t.y. nekintančiu ženklo indeksu. Pavyzdžiui, įprastinėse kodavimo sistemose diakritiniai ženklai (pvz., nosinės, paukščiukai ar kirčiai) neturi atskiro kodo. O "Unicode" leidžia, kad tuos pačius diakritinius ženklus naudotų keli ženklai. Lyg kelių juostų greitkelyje, panašūs ženklai gali turėti tą patį indeksą. Nedideli skirtumai tarp ženklų sistemų turi atsispindėti šriftuose, o ne ieškant kiekvienam atvejui vis kito kodo. Be to, "Unicode" neaprašo ženklų rūšiavimo tvarkos, - tuo turi pasirūpinti programinė įranga.

Kelios "Unicode" savybės:

  1. nekintantis indeksas. Šiuo metu yra naudojama 38885 ženklų kodai. Ir nors negarantuojama, kad ženklo vieta nekis, tačiau papildoma ženklų sritis išskiriama taip retai, kad ženklų indeksus galima laikyti nekintančiais;
  2. pastovi 16-os bitų apimtis palengvina darbą su juo;
  3. nėra papildomų kodų ("escape" sekų) perjungimui tarp kodų lentelių;
  4. diakritiniai ženklai ir pagrindiniai ženklai. Įvairūs diakritiniai ženklai gali būti suliejami su bet kokiu ženklu darbo metu. Taip taupoma ženklų kodų aibė. Dažniau naudojamoms kombinacijoms yra išankstiniai priskyrimai;
  5. ženklavietės neturi papildomos reikšmės. jos tiesiog vaizduoja ženklą nepriklausomai nuo jokios kalbos;
  6. loginis pagrindas. Ženklai sutvarkyti pagal tvarką, kuri nebūtinai sutampa su jų pavaizdavimu;
  7. asmeninės sritys. Kad nereiktų kurti papildomų ženklų sričių, yra išskirta atskira sritis, kurią galima naudoti ypatingiems specifiniams simboliams žymėti.

Kalbant apie "Unicode" reiktų priminti, kad

  • nors "Unicode" apima didelį rašto sistemų kiekį, tačiau dar nė viena dabartinė operacinė sistema automatiškai nepriima visos "Unicode" ženklų aibės. Juk "Unicode' tėra kodavimo sistema, o ne programavimo biblioteka ar technologija.
  • ženklų vaizdai yra saugomi šriftų failuose, kurie gali skirtis naudojant skirtingas rašto sistemas. Ir nors yra šriftų, apimančių didelę dalį "Unicode" ženklų aibės, nėra "Unicode" šrifto, kuris būtų universalus visoms rašto sistemoms.
  • piniginių vienetų ženklai ir skirtukai nepriskiriami jokiai konkrečiai kalbai. Taip pat "Unicode" nesaugo informacijos apie datos ir laiko vaizdavimo būdus.
  • Kaip priima "Unicode" populiariosios operacinės sistemos?
  • "Apple" turi programą konvertavimui tarp "Unicode" ir paprasto teksto. "QuickDraw GX" leidžia įvesti duomenis "Unicode" formatu. "TrueType" šriftuose naudojama "Unicode" lentelė.
  • "Windows" 3.x neturi "Unicode" palaikymo, tačiau yra galimybė konvertuoti duomenis naudojant "Win32s" išplėtimą.
  • "Windows" 95 sistemos funkcijos gali konvertuoti ir pavaizduoti duomenis "Unicode" ženklų sistemoje. "TrueType" šriftuose naudojama "Unicode" lentelė.
  • "Windows" NT buvo kuriama numatant, kad "Unicode" bus vidinė kodavimo sistema. Visos įvedimo ir išvedimo funkcijos gali būti atliekamos naudojant "Unicode". "TrueType" šriftuose naudojama "Unicode" lentelė. NT 4.0 įtraukė ir UTF-8 duomenų konvertavimą.
  • "Unix" sistema mažai ar visai neturi "Unicode" palaikymo. Planus jį įtraukti teturi tik AT&T;
  • "Java" yra pirmoji programavimo kalba, kurioje duomenų tipas nutylint yra "Unicode". Tačiau ji neturi duomenų vaizdavimo priemonių.

Nelinksma kol kas ir "Internet" peržiūros programų ūkyje. Nė viena šio tipo programa dar neturi pilno "Unicode" palaikymo, nors gali priimti "Unicode", ją konvertuoti ir išvesti informaciją. Nurodžius HTML puslapio simbolių aibę, peržiūros programa jį konvertuoja į "Unicode" ženklų aibę ir tokiu pavidalu siunčia operacinei sistemai.

Microsoft Internet Explorer 3.x gali pavaizduoti daugelio nesudėtingų "Unicode" kalbų ženklus naudodamas operacinės sistemos NLS (National Language Support) lenteles, sistemos "TextOut" funkcijas ir papildomus šriftų rinkinius.

Netscape Navigator 3.x 32-ių bitų "Windows" terpėse gali būti konfigūruojamas "Unicode" naudojimui. Tam tereikia sistemos HKEY_CURRENT_USER\SOFTWARE\NETSCAPE\NETSCAPE_NAVIGATOR_INTL registre (naudojant programą "RegEdit") sukurti naują ("string") režimą "UseUnicodeFont", kuriam po to priskirti reikšmę "1". Tada belieka pasirinkti norimą lietuvišką "Unicode" šriftą.

Tarp kitų peržiūros programų "Unicode" nėra svetimas "Spyglass" bei "Accent Software" firmų programoms.