Pri práci so slovníkmi sa neraz stretávate s tým, že dokument máte skontrolovaný, čiže všetky slová, ktoré sú v ňom napísané, sú správne, ale váš slovník ich neobsahuje. V takomto prípade je vkladanie týchto slov do slovníka po jednom niekedy veľmi zdĺhavé, hlavne ak je tých slov dosť veľa.
Preto je vhodné naprogramovať si makro, ktoré to urobí za vás – jednoducho prejde celý dokument a slová, ktoré sú označené ako chybné automaticky vloží do slovníka. Okrem toho sa však určite hodia aj funkcie, ako je automatické vloženie aktuálneho slova do používateľského slovníka, export a import slovníkov, vytvorenie vlastného slovníka a pod.
Z uvedených dôvodov si v troch dieloch uvedieme makrá, ktoré budú uvedené funkcie robiť za nás. Aby sme mohli s makrami pracovať pohodlne, samozrejme, ich súčasťou sú aj pracovné okná pre export slovníkov, import slovníkov a z dôvodu časovej náročnosti kontroly celého dokumentu aj zobrazovanie priebehu spracovania, do ktorého zakomponujeme možnosť prerušenia tejto kontroly.
V prvom dieli si uvedieme makrá pre jazykovú lokalizáciu dialógových okien a makro pre export slovníka do aktuálneho dokumentu.

dim oDlge, oDlgi, oDlgp, oAktualnySlovnik as object
dim sOznam1$, sOznam2$, sOznam3$, sOznam4$, sSlovnik$, sPopis1
dim bKoniecIE as boolean
REM Funkcia pre zistenie jazyka OO.o
function Jazyk_OOo as string
dim ConfigProvider, MasterKey as object
dim NodePath(0) as new com.sun.star.beans.PropertyValue
NodePath(0).Name = "nodepath"
NodePath(0).Value = "org.openoffice.Setup/L10N/"
ConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
MasterKey = ConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", NodePath())
Jazyk_OOo = left(trim(MasterKey.getByName("ooLocale")),2) '"sk", "cs", …
end function
REM Procedúra pre nastavenie jazyka dialógu
Sub Set_jazyk_dialogu(oDlg, sNazov, sZahlavie)
dim riadok, premenna, definicia as string
dim rovna as integer
dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
on error resume next
sPopis1="Exportovaný slovník" ' Popis meníme podľa počtu slov v slovníku
if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
inStream = sf.openFileRead(sNazov)
inFile = createUnoService("com.sun.star.io.TextInputStream")
inFile.InputStream = inStream
inFile.Encoding = "UTF-8" ' lokalizačný súbor musí byť v UTF-8, inak nebude dobrá diakritika
Do While not inFile.IsEOF
riadok = inFile.readLine ' namiesto Line Input #subor, riadok
rovna=instr(riadok,"=")
if rovna<>0 then
premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
definicia=trim(right(riadok,len(riadok)-rovna))
select case premenna
case sZahlavie
oDlg.Title=definicia
case "Popis1"
sPopis1=definicia
oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
case else
oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
end select
end if
loop
' Zatvorenie definičného súboru – namiesto close #subor
inStream.closeInput
inFile.closeInput
end if
end sub
REM Procedúra pre nastavenie textov výpisov
Sub Set_jazyk_vypisov(sNazov)
dim riadok, premenna, definicia as string
dim rovna as integer
dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
' Inicializácia slovenských výpisov
sOznam1="Slovník '"
sOznam2="' je plný!"
sOznam3="' nie je možné vytvoriť!"
sOznam4="' existuje!"
on error resume next
if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
inStream = sf.openFileRead(sNazov)
inFile = createUnoService("com.sun.star.io.TextInputStream")
inFile.InputStream = inStream
inFile.Encoding = "UTF-8" ' lokalizačný súbor musí byť v UTF-8, inak nebude dobrá diakritika
Do While not inFile.IsEOF
riadok = inFile.readLine ' namiesto Line Input #subor, riadok
rovna=instr(riadok,"=")
if rovna<>0 then
premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
definicia=trim(right(riadok,len(riadok)-rovna))
select case premenna
case "Oznam1"
sOznam1=definicia+" '"
case "Oznam2"
sOznam2="' "+definicia
case "Oznam3"
sOznam3="' "+definicia
case "Oznam4"
sOznam4="' "+definicia
end select
end if
loop
' Zatvorenie definičného súboru – namiesto close #subor
inStream.closeInput
inFile.closeInput
end if
end sub
REM Funkcia pre vloženie počtu slov do popisu "Exportovaný slovník"
sub Vypis_Popis1
dim sPom$
dim oPom_zoznam, oSlovniky, oZoznam as object
oPom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
NazovSlovnik=oDlge.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
oSlovnik=oPom_zoznam.GetDictionaryByName(NazovSlovnik) ' Sprístupnenie zadaného slovníka
sPom=sPopis1+" ("+trim(str(oSlovnik.Count))+")"
oDlge.model.getByName("Popis1").setpropertyvalue("Label",sPom)
end sub
REM Makro, ktoré zneviditeľní dialóg – volané stlačením klávesy "Koniec" v exportnom dialógu
sub Koniec_Export_Initiated
oDlge.setVisible(false )' Zneviditeľnenie dialógu
end sub
Rem Procedúra pre vlastný export vybraného slovníka do aktuálneho textového dokumentu (volá sa stlačením klávesy Export)
Sub Export_slovnika_initiated
dim oPom_zoznam, oSlovnik, oKurzor, oPriebeh as object
dim NazovSlovnik$, Slovo$, Oddelovac$
' Podľa prepínača nastavíme oddeľovanie exportovaných slov medzerou alebo novým riadkom
if oDlge.model.Medzera.State=1 then
Oddelovac=" "
else
Oddelovac=chr$(13)
endif
oKurzor=ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
oKurzor.collapseToEnd() ' ak je niečo označené, tak zrušíme výber
oPom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
NazovSlovnik=oDlge.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
oSlovnik=oPom_zoznam.GetDictionaryByName(NazovSlovnik) ' Sprístupnenie zadaného slovníka
' Budeme exportovať všetky slová
DialogLibraries.LoadLibrary("JP_dictionary_IO") ' Otvorenie knižnice
oDlgp=CreateUnoDialog(DialogLibraries.JP_dictionary_IO.Priebeh) ' Sprístupnenie dialógu
kde=basiclibraries.getLibraryLinkURL("JP_dictionary_IO") ' Adresár, kde je rozšírenie nainštalované
nazov=left(kde,len(kde)-10)+"jp_dictionary_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou
Set_jazyk_dialogu(oDlgp, nazov, "Priebeh") ' Nastavenie jazyka dialógu
oPriebeh=oDlgp.getModel().getByName("Priebeh") ' Panel priebehu v dialógovom okne exportu
oPriebeh.setPropertyValue("ProgressValueMin", LBound(oSlovnik.Entries)) ' Nastavenie minimálnej hodnoty priebehu
oPriebeh.setPropertyValue("ProgressValueMax", UBound(oSlovnik.Entries)) ' Nastavenie maximálnej hodnoty priebehu (počet exportovaných slov
oDlgp.setVisible(true) ' zviditeľnenie dialógu priebehu
bKoniecIE=False
for i=LBound(oSlovnik.Entries) to Ubound(oSlovnik.Entries)
if (i mod 10)=0 then oPriebeh.setPropertyValue("ProgressValue",i) ' Nastavenie aktuálnej hodnoty priebehu
Slovo=oKurzor.getstring()+oSlovnik.Entries(i).DictionaryWord+Oddelovac
oKurzor.setstring(Slovo) ' Vlastné vloženie slova zo slovníka
oKurzor.collapseToEnd() ' Zrušíme označený vložený text
if bKoniecIE then ' Prerušenie exportu
oDlgp.dispose()
exit sub
endif
next i
oDlgp.dispose()
End Sub