Číta nás cez 130 tisíc ľudí | Autori | O Inet.sk | OZ IPV | Referáty | Reklama | RSS
3. 7. 2008, Programovanie, Július Pastierik, 0 komentárov
V ďalšom dieli seriálu o programovaná makier v OpenOffice.org si ukážeme už avizované makro pre prípravu slov pre slovenský slovník (jeho prvú časť).
Dnešný diel seriálu makier bude trochu netradičný, pretože si uvedieme makro pre prácu so slovníkmi. Preto netradičný, lebo sa jedná o veľmi špecifické makro, ktoré je viazané nielen na rozšírenie, pomocou ktorého je šírené, ale aj na konkrétnu verziu tvarovania slov v slovníku slovenského jazyka.
Pre pochopenie, ako je makro vytvorené si musíme aspoň v skratke uviesť, ako sú definované slovníky v programoch OpenOffice.org, Mozilla Thunderbird a Mozilla Firefox. Slovníky sa vlastne skladajú z dvoch súborov. Prvý má príponu „.dic“ a v ňom sú definované vlastné slová v tvare: slovo/tvarovanie (napríklad „tvar/B“, „nakázaný/NY“ ...).
Tvarovanie je vlastne definícia prefixov a sufixov, ktorými sa slovo môže upravovať. Táto definícia sa skladá z piatich častí. Prvá časť (PFX alebo SFX) určuje, či sa jedná o tvarovanie na začiatku (prefix) alebo konci (sufix) slova. Druhá časť je definičné písmeno príslušného tvarovania (to, ktoré je uvedené v slovníku za znakom lomky). Tretia časť je časť slova, ktorá sa nahrádza, štvrtá časť sú znaky, ktorými sa nahrádza a piata časť sú podmienky (definované pomocou regulárnych výrazov).
Napríklad definícia: „SFX z a e [^euo]a“ hovorí, že v slove, ktoré tvarujeme podľa vzoru žena (to hovorí časť „SFX z“) sa nahrádza posledné písmeno „a“ za „e“ ak slovo končí na písmeno „a“, pred ktorým však nesmú byť znaky „eou“. Vďaka tomuto zápisu stačí mať v slovníku slovo „žena/z“ a automaticky sa za správne považuje aj slovo „žene“.
Pri tvarovaní nájdeme aj špecifické tvarovania, kde sa nič nenahrádza, ale iba s pridáva. Vtedy sa namiesto znaku, ktorý sa má nahradiť píše číslo 0. Napríklad definícia „PFX N 0 ne.“ je určená pre zápory, teda definíciou slova „nakázaný/NY“ automaticky definujeme aj slovo „nenakázaný“.
Pred vlastným uvedením makra ešte musíme spomenúť, že ako prvý riadok definícii tvarovania je vždy uvedený ich počet, napríklad „SFX Z Y 157“. Pretože tento sa môže meniť, musíme pri čítaní definičného súboru tento počet zisťovať.
OpenOffice.org pri čítaní textových súborov používa kódovú stránku OpenOffice.org. Preto sme museli pripraviť definičné súbory špeciálne pre rôzne kódové stránky, pretože sa tam, prirodzene, nachádzajú aj znaky s diakritikou. Aby sme tieto súbory nemuseli hľadať, vložili sme ich priamo do rozšírenia.
Rozsah makier je naozaj veľký a preto ho rozdelíme do viacerých dielov tohto seriálu. Dnes začneme funkciami, ktoré sú uložené v module „Slovnik_init“ a sú určené pre počiatočnú prípravu rozšírenia pre spracovanie slova. Upozorňujeme, že makrá nie sú veľmi okomentované a preto sú určené pre vyspelejších programátorov.
Tak isto sa nebudeme bližšie zaoberať dialógmi, pretože to, ako sú definované (ich premenné) sa dá pozrieť v ich definícii.
sub slovnik_init(oDialog)
dim Kurzor, Povodny as object
dim riadok, slovo, parametre as string
dim i, kolko as integer
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
Povodny=kurzor.getstart()
kurzor.collapsetostart()
Kurzor.gotoStartOfLine(false)
Kurzor.gotoEndOfLine(true)
riadok=trim(Kurzor.getstring())
Kurzor.collapseToEnd()
kurzor.gotoRange(Povodny,false)
if riadok<>"" then
slovo=riadok
parametre=""
i=instr(riadok,"/")
if i<>0 then
slovo=left(riadok,i-1)
parametre=right(riadok,len(riadok)-i)
endif
oDialog_slovnik.model.Slovo_slovnika.Text=slovo
if instr(1,parametre,"N",0)<>0 then oDialog_slovnik.model.pfx_N.State=1
if instr(1,parametre,"F",0)<>0 then oDialog_slovnik.model.pfx_F.State=1
if instr(1,parametre,"Z",0)<>0 then oDialog_slovnik.model.sfx_Z.State=1
if instr(1,parametre,"z",0)<>0 then oDialog_slovnik.model.sfx_mz.State=1
if instr(1,parametre,"U",0)<>0 then oDialog_slovnik.model.sfx_U.State=1
if instr(1,parametre,"D",0)<>0 then oDialog_slovnik.model.sfx_D.State=1
if instr(1,parametre,"K",0)<>0 then oDialog_slovnik.model.sfx_K.State=1
if instr(1,parametre,"M",0)<>0 then oDialog_slovnik.model.sfx_M.State=1
if instr(1,parametre,"S",0)<>0 then oDialog_slovnik.model.sfx_S.State=1
if instr(1,parametre,"V",0)<>0 then oDialog_slovnik.model.sfx_V.State=1
if instr(1,parametre,"A",0)<>0 then oDialog_slovnik.model.sfx_A.State=1
if instr(1,parametre,"C",0)<>0 then oDialog_slovnik.model.sfx_C.State=1
if instr(1,parametre,"H",0)<>0 then oDialog_slovnik.model.sfx_H.State=1
if instr(1,parametre,"B",0)<>0 then oDialog_slovnik.model.sfx_B.State=1
if instr(1,parametre,"b",0)<>0 then oDialog_slovnik.model.sfx_mb.State=1
if instr(1,parametre,"o",0)<>0 then oDialog_slovnik.model.sfx_mo.State=1
if instr(1,parametre,"O",0)<>0 then oDialog_slovnik.model.sfx_O.State=1
if instr(1,parametre,"J",0)<>0 then oDialog_slovnik.model.sfx_J.State=1
if instr(1,parametre,"L",0)<>0 then oDialog_slovnik.model.sfx_L.State=1
if instr(1,parametre,"Q",0)<>0 then oDialog_slovnik.model.sfx_Q.State=1
if instr(1,parametre,"Y",0)<>0 then oDialog_slovnik.model.sfx_Y.State=1
if instr(1,parametre,"I",0)<>0 then oDialog_slovnik.model.sfx_I.State=1
if instr(1,parametre,"P",0)<>0 then oDialog_slovnik.model.sfx_P.State=1
if instr(1,parametre,"X",0)<>0 then oDialog_slovnik.model.sfx_X.State=1
if instr(1,parametre,"E",0)<>0 then oDialog_slovnik.model.sfx_E.State=1
if instr(1,parametre,"W",0)<>0 then oDialog_slovnik.model.sfx_W.State=1
if instr(1,parametre,"T",0)<>0 then oDialog_slovnik.model.sfx_T.State=1
if instr(1,parametre,"R",0)<>0 then oDialog_slovnik.model.sfx_R.State=1
if instr(1,parametre,"č",0)<>0 then oDialog_slovnik.model.sfx_c_c.State=1
endif
end sub
function citaj_definiciu as boolean
' dim cesty as object
dim subor as integer
dim riadok as string
dim prvy as long
dim cesta as string
dim nacital as boolean
dim nazov as string
'cesty=CreateUnoService("com.sun.star.util.PathSettings")
' DialogLibraries.LoadLibrary("SK_SK_Slovnik")
oDialog_CP=CreateUnoDialog(DialogLibraries.SK_SK_Slovnik.Dialog_CP)
oDialog_CP.model.UTF_8.state=1
oDialog_CP.model.CP_1250.state=0
oDialog_CP.model.ISO_8859_2.state=0
nacital=false
if oDialog_CP.Execute()=1 then
if oDialog_CP.model.UTF_8.state=1 then nazov="sk_SK_aff_UTF_8.txt"
if oDialog_CP.model.CP_1250.state=1 then nazov="sk_SK_aff_CP_1250.txt"
if oDialog_CP.model.ISO_8859_2.state=1 then nazov="sk_SK_aff_ISO_8859_2.txt"
REM Cesta, kde je nainštalované rozšírenie SK_SK_Slovnik – treba si najprv nechať vypísať, aby sa zistilo, čo je potrebné ponechať
cesta=basiclibraries.getLibraryLinkURL("SK_SK_Slovnik")
cesta=left(cesta,len(cesta)-10)+nazov
subor = Freefile
open cesta for Input as #subor
'open cesty.Work+"/sk_SK_aff.txt" for Input as #subor
prvy=0
While not eof(subor)
Line Input #subor, riadok
prvy=spracuj_riadok(riadok,prvy)
wend
close #subor
nacital=true
endif
oDialog_CP.dispose()
citaj_definiciu=nacital
end function
| Dátum | Meno | Predmet |
|---|---|---|
| Prejsť na diskusiu | Pridať komentár | ||
| Diskusia momentálne neobsahuje žiadne komentáre | ||
Inet.sk – Internetový denník, ISSN 1336-1899
Copyright 2002 – 2010 Inet.sk, s. r. o., Všetky práva vyhradené, Neprešlo jazykovou úpravou
Partneri:
123velkoformatovatlac.sk
Aaavizitky.sk
Bilancia skrývky
BiznisHosting.sk
CinemaView.sk
Digitálne fotoaparáty
Digitlac.sk
Fotografie
Grafika.sk
HrajSa.sk
Katalog Pozri.sk
Kusi.sk
Manga.sk
Notebooky HP
Predaj PC komponenty
Reality Aaainfo.sk
Reklama.sk
Sladká kytica
StiahniTo.sk
Surf.sk
Toshiba PC akcia
Úvery Aaainfo.sk
Zájazdy