Makrá v OpenOffice.org: Export a import používateľských slovníkov (2.)

Július Pastierik  /  16. 03. 2011, 00:00

V druhom pokračovaní makier pre prácu s používateľskými slovníkmi si uvedieme makrá pre prácu s dialógmi pre export slovníkov a pre vytváranie nových slovníkov.


REM Dialóg pre export používateľských slovníkov
Sub Export_slovnikov
 dim oPom_zoznam, oSlovniky, oZoznam as object
 
 DialogLibraries.LoadLibrary("JP_dictionary_IO") ' Otvorenie knižnice
 oDlge=CreateUnoDialog(DialogLibraries.JP_dictionary_IO.Export_dictionary) ' 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(oDlge, nazov, "Export_dictionary") ' Nastavenie jazyka dialógu
 
 oDlge.model.Medzera.State=1
 oDlge.model.Riadok.State=0
 
 ' Načítanie zoznamu slovníkov
 oPom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 oSlovniky=oPom_zoznam.GetDictionaries ' zoznam slovníkov
 
 oZoznam=oDlge.getControl("zoznam_slovnikov") ' prístup k zoznamu slovníkov v dialógu
 ' Vloženie názvov slovníkov do zoznamu v dialógu
 for i=LBound(oSlovniky) to Ubound(oSlovniky)
  oZoznam.AddItem(oSlovniky(i).Name, oZoznam.ItemCount)
 next i
 oZoznam.Text=oZoznam.Items(0) ' Zobrazenie prvej položky
 Vypis_Popis1 ' Zobrazenie počtu slov v slovníku
  
 oDlge.setVisible(true) ' zviditeľnenie dialógu – namiesto dlg.Execute(), aby sa dalo paralelne pracovať s textom
 while oDlge.isVisible() ' Cyklus, ktorý čaká na stlačenie klávesy "Koniec" v dialógu (kým je dialóg viditeľný)
  wait 500 ' Časová medzera 500 milisekúnd (0,5 sec) na to, aby sa dalo paralelne pracovať s dokumentom
 wend
 oDlge.dispose() ' Zatvorenie dialógu)
End Sub

REM Procedúra pre výpis oznamov
sub VypisOznam(sNazov as string, iKtory as integer)
 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_vypisov(nazov) ' Nastavenie jazyka dialógu
 dim sOznam$
 select case iKtory
  case 1
   sOznam=sOznam1+sNazov+sOznam2
  case 2
   sOznam=sOznam1+sNazov+sOznam3
  case 3
   sOznam=sOznam1+sNazov+sOznam4
 end select
 msgbox(sOznam,48,"Import")
end sub

REM Funkcia vráti True, ak slovník so zadaným názvom existuje
function testSlovnik (sPom as string) as boolean
 dim oPom_zoznam, oZoznam as object
 dim JeSlovnik as boolean : jeSlovnik=False ' Predpokladáme, že slovník neexistuje
 
 oPom_zoznam=createUnoService("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 oZoznam=oPom_zoznam.GetDictionaries ' zoznam slovníkov
 ' Testovanie, či názov je v zozname slovníkov
 for i=LBound(oZoznam) to Ubound(oZoznam)
  JeSlovnik=JeSlovnik or (lcase(oZoznam(i).Name)=lcase(sPom)) ' Pre jednoduchosť prejdeme názvy všetkých slovníkov a testujeme bez ohľadu na veľkosť písmen
 next i
 testSlovnik=JeSlovnik
end function

REM Uloženie názvu vybraného slovníka do súboru
sub UlozNazovSlovnika
 dim sf, outStream, outFile ' Pre zápis do súboru
 dim sNazov$, kde$
 
 kde=basiclibraries.getLibraryLinkURL("JP_dictionary_IO") ' Adresár, kde je rozšírenie nainštalované
 sNazov=left(kde,len(kde)-10)+"jp_dictionary_import.txt" ' Súbor s odpamätaným názvom slovníka
 sf = createUnoService("com.sun.star.ucb.SimpleFileAccess")
 outStream = sf.openFileWrite(sNazov)
 outFile = createUnoService("com.sun.star.io.TextOutputStream")
 outFile.OutputStream = outStream
 outFile.Encoding = "UTF-8" ' Súbor bude v UTF-8 aby bola dobrá diakritika
 outStream.truncate() ' Vymazanie predchádzajúceho obsahu
 outFile.writeString(sSlovnik)
 outStream.closeOutput
 outFile.closeOutput
end sub

REM Makro, ktoré zneviditeľní dialóg – volané stlačením klávesy "Zruš" v importnom dialógu
sub Koniec_Import_Initiated
 oDlgi.setVisible(false )' Zneviditeľnenie dialógu
end sub

REM Procedúra volaná pri stlačení klávesy "Vyber"
sub Vyber_Initiated
 dim sPom$ : sPom=oDlgi.getControl("zoznam_slovnikov").Text ' Názov vybraného slovníka
 dim oPom_zoznam : oPom_zoznam=createUnoService ("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 dim oSlovnik : oSlovnik=oPom_zoznam.GetDictionaryByName(sPom) ' Sprístupnenie zadaného slovníka
 if oSlovnik.isFull() then
  VypisOznam(sPom,1) ' Oznam, že slovník je plný – preto sa do neho nedá importovať
 else
  sSlovnik=sPom
  UlozNazovSlovnika
  Koniec_Import_Initiated
 end if
end sub

REM Procedúra volaná pri stlačení klávesy "Vytvor"
sub Vytvor_Initiated
 dim sAdresar$ : sAdresar=trim(oDlgi.getControl("zoznam_adresarov").Text) 'Adresár, kde chceme vytvoriť slovník
 dim sPom$ : sPom=lcase(trim(oDlgi.model.nazovs.Text)) 'Názov vytváraného slovníka malými písmenami
 dim vytvoril as boolean : vytvoril=False ' Predpokladáme, že slovník nevytvoríme
 dim oSlovniky, oJazyk, oStandard, oSlovnik
 
 if sPom="ignorealllist" or sPom="ignorealllist.dic" then ' Slovník IgnoreAllList testujeme osobitne, lebo ten nemá príponu .dic v zozname slovníkov
  VypisOznam(sPom,2) ' Oznam, že slovník (súbor) sa nevytvoril
  exit sub
 endif
 
 if sPom="" then ' Ak je názov prázdny, nemôžeme vytvoriť slovník
  VypisOznam(sPom,2) ' Oznam, že slovník '' nie je možné vytvoriť
  exit sub
 end if
 if right(Spom,4)<>".dic" then sPom=sPom+".dic" 'Názov musí obsahovať príponu .dic – nemal ju, tak ju pridávame
 oDlgi.model.nazovs.Text=sPom
 if testSlovnik(sPom) then ' Testovanie, či odpamätaný názov je v zozname slovníkov
  VypisOznam(sPom,3) ' Oznam, že slovník existuje – nie je ho možné vytvoriť!
  exit sub
 end if
 ' Slovník neexistuje, pokúsime sa ho vytvoriť
 sAdresar=ConvertToURL(sAdresar+sPom) ' Nastavenie cesty k novému slovníku
 oSlovniky=createUnoService ("com.sun.star.linguistic2.DictionaryList") ' sprístupnenie zoznamu slovníkov
 oJazyk=createUnoService ("com.sun.star.linguistic2.LinguProperties")
 oStandard=oJazyk.defaultLocale ' Slovník vytvoríme pre všetky jazyky
 oSlovnik=oSlovniky.createdictionary(sPom,oStandard,False,sAdresar) ' Pokus o vytvorenie slovníka
 if not fileexists(sAdresar) then ' Nevytvoril sa slovníkový súbor
  VypisOznam(sPom,2) ' Oznam, že slovník (súbor) sa nevytvoril
  exit sub
 end if
 if not oSlovniky.addDictionary(oSlovnik) then
  ' Slovník sa nepridal do OO.o
  VypisOznam(sPom,2) ' Oznam, že slovník sa nevytvoril
  exit sub
 end if
 ' Slovník sa vytvoril a pridal do OO.o, nastavíme ho na aktívy a vyberieme ho zároveň na import
 oSlovnik.setActive(true)
 sSlovnik=sPom
 UlozNazovSlovnika
 Koniec_Import_Initiated
end sub

REM Funkcia pre načítanie názvu slovníka pre import zo súboru – vracia True, ak je názov odpamätaný a slovník existuje
function NacitajNazovSlovnika as boolean
 dim riadok, sNazov as string
 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
 dim nacital as boolean
 
 sSlovnik="" ' Predpokladáme, že žiaden názov nie je zadaný
 
 on error resume next
 nacital=false ' Predpokladáme, že súbor neexistuje, že slovník neexistuje...
 kde=basiclibraries.getLibraryLinkURL("JP_dictionary_IO") ' Adresár, kde je rozšírenie nainštalované
 sNazov=left(kde,len(kde)-10)+"jp_dictionary_import.txt" ' Súbor s odpamätaným názvom slovníka
 
 if fileexists(sNazov) then ' Ak súbor existuje, tak načítame názov slovníka
  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
  riadok=trim(inFile.readLine) ' namiesto Line Input #subor, riadok
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
  nacital=testSlovnik(riadok) ' Testovanie, či odpamätaný názov je v zozname slovníkov (slovník mohol byť z OO.o vymazaný)
 end if
 if nacital then sSlovnik=Riadok
 NacitajNazovSlovnika=nacital
end function

Neprehliadnite: