Archív Inet.sk Pôvodný autor: Július Pastierik
20. 07. 2011 o 00:00 2320x

Makrá v OpenOffice.org: Typografické úpravy textu (7)

V ďalších pokračovaniach seriálu o typografických makrách sa budeme venovať problematike zalomiteľných medzier a ich rôznych náhrad za nezalomiteľné medzery.
Makrá v OpenOffice.org: Typografické úpravy textu (7)

 

Medzi základné typografické úpravy patrí o. i. to, že na konci riadku nezostáva zalomiteľná medzera napr. za jednoznakovou predložkou a spojkou. V prvých dieloch sme si už ukázali základné funkcie pre zámenu zalomiteľných medzier za nezalomiteľné. Nie vždy však chceme, aby sa úpravy robili automaticky v celom dokumente, ale požadujeme, aby sa urobili iba v označenom texte resp. iba na konci riadkov a pod.

Tieto požiadavky vychádzajú napr. z toho, že znak nezalomiteľnej medzery (NBSP) sa v OpenOffice.org (na rozdiel od DTP programov) nezobrazuje „pružne“ a znak Word Joiner nie vždy zabráni nesprávnemu zalomeniu. Inokedy vložená nezalomiteľná medzera bráni vo vyhľadávaní slovných spojení, pretože musíme hľadať spojenia ako s obyčajnou, tak aj s nezalomiteľnou medzerou.

Za účelom riešenia uvedenej problematiky si preto teraz ukážeme rad funkcií, pomocou ktorých dokážeme hľadať a nahrádzať medzery navzájom – zalomiteľné za nezalomiteľné a naopak a to v celom dokumente, v označenom texte alebo na konci riadku. Všetky funkcie uložíme do modulu Medzery_ex.

V dnešnej časti si na úvod uvedieme funkcie pre jazykovú lokalizáciu, pre vyhľadávanie v označenom texte alebo v celom dokumente a procedúry pre prácu s dialógovým oknom,pomocou ktorého voláme príslušné funkcie zámen medzier.



dim oDlgm as object

REM Procedúra pre nastavenie jazyka dialógu s dvojriadkovými výpismi
Sub Set_jazyk_dvoj_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
  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 = trim(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
     select case sZahlavie' Dvojriadkové a iné výpisy
      case "Dialog_Zamena_medzier"
       select case premenna
        case "CB17a", "CB18a", "CB27a", "CB28a", "CB35a" ' Prvý riadok popisu
         nnn=left(premenna,4)
         oDlg.model.getByName(nnn).setpropertyvalue("Label",definicia)
        case "CB17b", "CB18b", "CB27b", "CB28b", "CB35b" ' Druhý riadok popisu
         nnn=left(premenna,4)
         pom=oDlg.model.getByName(nnn).getpropertyvalue("Label")
         oDlg.model.getByName(nnn).setpropertyvalue("Label",pom+chr$(&H0A)+definicia)
        case else
         oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
        end select
      case "Dialog_Odsadenie_riadkov"
       select case premenna
        case "Label2a", "Label3a", "Label4a" ' Prvý riadok popisu
         nnn=left(premenna,6)
         oDlg.model.getByName(nnn).setpropertyvalue("Label",definicia)
        case "Label2b", "Label3b", "Label4b" ' Druhý riadok popisu
         nnn=left(premenna,6)
         pom=oDlg.model.getByName(nnn).getpropertyvalue("Label")
         oDlg.model.getByName(nnn).setpropertyvalue("Label",pom+chr$(&H0A)+definicia)
        case else
         oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
        end select
      case else
       oDlg.model.getByName(premenna).setpropertyvalue("Label",definicia)
     end select
    end if
   end if
  loop
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
 end if
end sub

REM Makro pre zámenu textu v označenom/celom texte
sub Zamen_hladany_text(co, zaco as string, cely as boolean)
 ' co – hľadaný text
 ' zaco – text, ktorým sa nahrádza hľadaný text
 ' cely – TRUE, ak v celom dokumente, inak FALSE
 
 dim dokument, dispatcher, kurzor as object
 dim args(18) as new com.sun.star.beans.PropertyValue ' Parametre pre nastavenie hľadania

 args(0).Name = "SearchItem.StyleFamily"
 args(0).Value = 2
 args(1).Name = "SearchItem.CellType"
 args(1).Value = 0
 args(2).Name = "SearchItem.RowDirection"
 args(2).Value = true
 args(3).Name = "SearchItem.AllTables"
 args(3).Value = false
 args(4).Name = "SearchItem.Backward"
 args(4).Value = false
 args(5).Name = "SearchItem.Pattern"
 args(5).Value = false
 args(6).Name = "SearchItem.Content"
 args(6).Value = false
 args(7).Name = "SearchItem.AsianOptions"
 args(7).Value = false
 args(8).Name = "SearchItem.AlgorithmType"
 args(8).Value = 1 ' Regulárne výrazy
 args(9).Name = "SearchItem.SearchFlags"
 if cely then
  args(9).Value = 65536 ' Hľadá sa v celom dokumente
 else
  args(9).Value = 71680 ' Hľadá sa v označenom texte (výbere)
 endif
 args(10).Name = "SearchItem.SearchString"
 args(10).Value = co
 args(11).Name = "SearchItem.ReplaceString"
 args(11).Value = zaco
 args(12).Name = "SearchItem.Locale"
 args(12).Value = 255
 args(13).Name = "SearchItem.ChangedChars"
 args(13).Value = 2
 args(14).Name = "SearchItem.DeletedChars"
 args(14).Value = 2
 args(15).Name = "SearchItem.InsertedChars"
 args(15).Value = 2
 args(16).Name = "SearchItem.TransliterateFlags"
 args(16).Value = 1280
 args(17).Name = "SearchItem.Command"
 args(17).Value = 3
 args(18).Name = "Quiet"
 args(18).Value = true

 dokument=ThisComponent.CurrentController.Frame
 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 dispatcher.executeDispatch(dokument, ".uno:ExecuteSearch", "", 0, args())
end sub

REM Makro, ktoré zneviditeľní dialóg – t.j. nastaví, že sa má ukončiť čakací cyklus (volané stlačením klávesy "Koniec" v dialógu)
sub Koniec_Medzery_Initiated
 oDlgm.setVisible(false) ' Zneviditeľnenie dialógu
end sub

Rem Volanie dialógu a makra pre nastavenie medzier
sub Nastav_medzery
 dim kurzor as object
 
 DialogLibraries.LoadLibrary("JP_typografia") ' Otvorenie knižnice
 
 if not isnull(oDlgm) then exit sub ' Ak je okno otvorené, neotvárame druhé
 
 oDlgm=CreateUnoDialog(DialogLibraries.JP_typografia.Dialog_Zamena_medzier) ' Sprístupnenie dialógu
 nazov=inicializacny_subor("JP_Zamena_medzier_"+Jazyk_OOo) ' Súbor s jazykovou lokalizáciou
 Set_jazyk_dvoj_dialogu(oDlgm, nazov, "Dialog_Zamena_medzier") ' Nastavenie jazyka dialógu
 
 oDlgm.model.Vymeny.State=0 ' Nebudeme vypisovať koniec výmen
 
 oDlgm.setVisible(true) ' zviditeľnenie dialógu – namiesto dlg.Execute(), aby sa dalo paralelne pracovať s textom
 while oDlgm.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
 oDlgm.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í.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
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

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