Chýba vám v OpenOffice.org vkladanie nezalomiteľných medzier priamo počas písania textu? V nasledujúcich dvoch dieloch seriálu o makrách si ukážeme makro, pomocou ktorého to dokážete vyriešiť.
Mnohým používateľom OpenOffice.org chýba v tomto kancelárskom balíku možnosť vkladania nezalomiteľných medzier za jednoznakové predložky a spojky priamo počas písania textu. Pravdaže, ani tento problém nie je neprekonateľný a preto si ukážeme makrá, pomocou ktorých tento problém vyriešite.
Aby sme sa v makre neobmedzili iba na jednoznakové predložky a spojky, pokúsime sa vyriešiť túto problematiku komplexnejšie – makro vyriešime univerzálne tak, že dokáže vkladať nezalomiteľné medzery za ľubovoľné slovo, napríklad aj za akademické tituly a pod., čím sa priblížime viac typografickým požiadavkám.
Pretože pri vkladaní týchto medzier musíme v niektorých prípadoch rozoznávať veľkosť písmen (napríklad niekto nechce vkladať nezalomiteľnú medzeru za spojku „a“, ale za verzálku „A“ áno), umožníme zadefinovať slová do troch skupín. V prvej budeme rozoznávať veľké a malé písmená, v druhej nie a v tretej (napríklad akademické tituly) budeme slovo dokonca opravovať tak, aby bolo správne napísané veľkými a malými písmenami. A aby sme riešenie urobili ešte komplexnejšie, umožníme vkladať nezalomiteľné medzery nielen za slová, ale aj pred ne (napríklad pred niektoré akademické tituly či skratky merných jednotiek).
Pravdaže, ani toto riešenie nie je ešte úplné a preto navyše pridáme automatické rozoznávanie jazyka dokumentu, aby sme slová pre nezalomiteľné medzery mohli definovať pre každý jazyk osobitne a, ako inak, pridáme možnosť vkladania nielen znaku NBSP, ale aj kombinácie znakov WJ+medzera.

Na tento účel si pripravíme dialógové okno, v ktorom budeme zadávať jazyk a podľa neho definovať šesť textových reťazcov, ktoré budú obsahovať príslušné definície slov. Pre jednoduchosť zadávania aj vyhľadávania budeme v rámci jednotlivých reťazcov oddeľovať príslušné slová medzerou, čo je jednoduché ako z hľadiska programovania, tak aj ich zadávania. Okrem toho musíme nastaviť, aký znak (NBSP alebo WJ) chceme vlastne vkladať.

Pri práci s dialógom musíme ešte zabezpečiť, aby sme príslušné definície textov videli až po nastavení jazyka. Pravdaže, po seriáli o jazykovom lokalizovaní rozšírení, sú súčasťou makra aj funkcie pre jazykovú lokalizáciu dialógového okna (čo je napokon vidno na zosnímaných obrazovkách, pretože osobne používam OpenOffice.org v češtine).

Toľko úvodu stačí a teraz si ukážeme prvé funkcie, pomocou ktorých budeme ovládať dialógové okno. Ostatné funkcie si následne ukážeme v nasledujúcom dieli tohto seriálu.
dim dlg as object
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 = MasterKey.getByName("ooLocale") '"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
if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
' Namiesto postupu, v ktorom sa nedá definovať kódová stránka:
' subor = Freefile
' open nazov for Input as #subor
' While not eof(subor)
' ...
' close #subor
' Použijeme postup s definovaním kódovej stránky TXT súboru:
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))
if premenna=sZahlavie then
oDlg.Title=definicia
else
oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
endif
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 NBSP/WJ
Sub Set_NBSP_WJ
dim riadok, premenna, definicia as string
dim rovna as integer
dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
kde=basiclibraries.getLibraryLinkURL("JP_on_line_NBSP") ' Adresár, kde je rozšírenie nainštalované
sNazov=left(kde,len(kde)-10)+"Dialog_on_line_NBSP.txt"
on error resume next
JP_WJ=false
if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných
' Namiesto postupu, v ktorom sa nedá definovať kódová stránka:
' subor = Freefile
' open nazov for Input as #subor
' While not eof(subor)
' ...
' close #subor
' Použijeme postup s definovaním kódovej stránky TXT súboru:
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))
if premenna="NBSP" then
JP_WJ=(definicia="0")
endif
end if
loop
' Zatvorenie definičného súboru – namiesto close #subor
inStream.closeInput
inFile.closeInput
end if
end sub
REM Procedúra pre zrušenie viditeľnosti okien pre textové nastavenia
sub Jazyk_Initiated
dlg.getControl("pred_ts").Visible = false
dlg.getControl("pred_tb").Visible = false
dlg.getControl("pred_to").Visible = false
dlg.getControl("za_ts").Visible = false
dlg.getControl("za_tb").Visible = false
dlg.getControl("za_to").Visible = false
dlg.getControl("Nastav").Visible = false
dlg.getControl("Vyber").Visible = true
end sub
REM Procedúra pre zviditeľnenie okien pre textové nastavenia
sub Text_Initiated
dim jazyk as string
jazyk=trim(left(dlg.model.sk.text,2))
if len(jazyk)=2 then
dlg.model.pred_ts.text=nacitaj_subor("JP_pred_vm",jazyk)
dlg.model.pred_to.text=nacitaj_subor("JP_pred_oprava",jazyk)
dlg.model.pred_tb.text=nacitaj_subor("JP_pred_bez",jazyk)
dlg.model.za_ts.text=nacitaj_subor("JP_za_vm",jazyk)
dlg.model.za_to.text=nacitaj_subor("JP_za_oprava",jazyk)
dlg.model.za_tb.text=nacitaj_subor("JP_za_bez",jazyk)
dlg.getControl("pred_ts").Visible = true
dlg.getControl("pred_tb").Visible = true
dlg.getControl("pred_to").Visible = true
dlg.getControl("za_ts").Visible = true
dlg.getControl("za_tb").Visible = true
dlg.getControl("za_to").Visible = true
dlg.getControl("Vyber").Visible = false
dlg.getControl("Nastav").Visible = true
endif
end sub
REM Procedúra pre zápis definície
sub Zapis_Initiated
dim jazyk as string
jazyk=trim(left(dlg.model.sk.text,2))
if len(jazyk)=2 then
zapis_subor("JP_pred_vm",jazyk,trim(dlg.model.pred_ts.text))
zapis_subor("JP_pred_oprava",jazyk,trim(dlg.model.pred_to.text))
zapis_subor("JP_pred_bez",jazyk,trim(dlg.model.pred_tb.text))
zapis_subor("JP_za_vm",jazyk,trim(dlg.model.za_ts.text))
zapis_subor("JP_za_oprava",jazyk,trim(dlg.model.za_to.text))
zapis_subor("JP_za_bez",jazyk,trim(dlg.model.za_tb.text))
if dlg.model.NBSP.State=1 then
zapis_subor("Dialog_on_line","NBSP","NBSP=1")
else
zapis_subor("Dialog_on_line","NBSP","NBSP=0")
endif
Jazyk_Initiated
endif
end sub
Rem Nastavenie reťazcov pre NBSP v dialógu
Sub Nastav_retazec
DialogLibraries.LoadLibrary("JP_on_line_NBSP")
dlg=CreateUnoDialog(DialogLibraries.JP_on_line_NBSP.Dialog_on_line_NBSP) ' Sprístupnenie dialógu
kde=basiclibraries.getLibraryLinkURL("JP_on_line_NBSP") ' Adresár, kde je rozšírenie nainštalované
nazov=left(kde,len(kde)-10)+"JP_on_line_NBSP_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou
Set_jazyk_dialogu(dlg, nazov, "Dialog_on_line_NBSP") ' Nastavenie jazyka dialógu
Set_NBSP_WJ
if JP_WJ then
dlg.model.NBSP.State=0
dlg.model.WJ.State=1 ' Prednastavené vkladanie WJ
else
dlg.model.NBSP.State=1 ' Prednastavené vkladanie NBSP
dlg.model.WJ.State=0
endif
Jazyk_Initiated ' Až po výbere jazyka sa zobrazia ostatné položky
dlg.execute()
JP_AktualnyJazyk=""
dlg.dispose() ' Zatvorenie dialógu
end sub
Copyright © 2002 - 2012 Inet.sk, s. r. o.Všetky práva vyhradenéNeprešlo jazykovou úpravouISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Webhosting Inet.sk