Archív Inet.sk Pôvodný autor: Július Pastierik
16. 06. 2010 o 08:34 2135x

Makrá v OpenOffice.org – vkladanie NBSP priamo počas písania (1)

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ť.
Makrá v OpenOffice.org – vkladanie NBSP priamo počas písania (1)

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

 

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac
Plánovaná údržba v datacentre (20.09.2026) Oznamy
07. 09. 2026

Plánovaná údržba v datacentre (20.09.2026)

Stabilita a nepretržitá dostupnosť vašich webov je pre nás kľúčová. Aby sme tento štandard nielen udržali, ale neustále zvyšovali, naši p...

Čítať viac
Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030) Oznamy
31. 08. 2026

Aktualizujte ihneď svoj Wordpress - Kritická zraniteľnosť (CVE-2026-63030)

Bezpečnostný tím WordPressu vydal núdzovú bezpečnostnú záplatu pre kritickú chybu označenú ako CVE-2026-63030. Táto zraniteľnosť dosiahla...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies