Archív Inet.sk Pôvodný autor: Július Pastierik
05. 01. 2011 o 08:47 1457x

Makrá v OpenOffice.org: Zrušenie delenia slov na konci strán a odsekov

Potrebujete dosiahnuť, aby slovo na konci strany alebo odseku nebolo delené? V nasledujúcom makre si ukážeme, ako to dosiahnuť.
Makrá v OpenOffice.org: Zrušenie delenia slov na konci strán a odsekov

Z typografického hľadiska nie je vhodné, aby sa slová na konci strán delili, pretože sa takýto text potom ťažšie číta. V niektorých prípadoch je však prípustné, aby zostalo rozdelené na párnej (ľavej) strane, pretože pri prechode očami na nepárnu stranu to nie je až také problematické.

Inokedy je však na prekážku aj to, ak je rozdelené posledné slovo odseku, pretože nepôsobí esteticky, ak sú na riadku povedzme iba dve písmená posledného slova.

Z uvedených dôvodov si pripravíme makro, pomocou ktorého dokážeme automaticky zrušiť delenie takýchto slov. Aby sme mohli pracovať univerzálne (pretože aj naše požiadavky sa môžu dokument od dokumentu líšiť), je potrebné, aby sme si pripravili dialógové okno, v ktorom budeme nastavovať, ktoré slová nechceme deliť – či na konci odsekov alebo na konci strán. Pochopiteľne, na konci strán budeme navyše nastavovať, či chceme zrušiť delenie slov na párnych alebo nepárnych stranách, prípadne na obidvoch.

Vlastné zrušenie delenia slova prevedieme nakoniec tak, že nastavíme jazyk príslušného slova na „žiaden“. Pretože OpenOffice.org pri delení slov používa slovníky podľa príslušného jazyka, takéto slovo nedokáže rozdeliť, čím dosiahneme požadovaný efekt.

Vlastné makrá predpokladajú, že máme z nich urobené rozšírenie, ktoré môžeme jazykovo lokalizovať a preto obsahuje aj funkcie pre nastavenie jazyka dialógového okna.

 

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 = left(MasterKey.getByName("ooLocale"),2) '"sk", "cs", ...
end function

REM Procedúra pre nastavenie jazyka dialógu
Sub Set_jazyk_dialgu(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 = 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 Makro pre odstránenie delenia na konci strany
sub Odstran_delenie_strany(parne, neparne as boolean)
 dim ViditelnyKurzor, AktualnyText, AktualnyKurzor, PovodnyKurzor as object
 dim strana, kolko as long

 if parne=false and neparne=false then exit sub ' Ak sa nič nemení
 ViditelnyKurzor = ThisComponent.getCurrentController().getViewCursor()
 PovodnyKurzor=ViditelnyKurzor.getstart() ' Odpamätanie aktuálnej pozície
 AktualnyText = ThisComponent.getText()

 ViditelnyKurzor.jumpToLastPage
 kolko=ViditelnyKurzor.getpage()

 for strana=1 to kolko-1 ' Na poslednej strane neoznačujeme posledné slovo – už sa nemá kam deliť (ak sa delilo, tak na predposlednej strane).
  if (parne and (strana mod 2 = 0)) or (neparne and (strana mod 2 = 1)) then ' Podľa nastavenia párnych/nepárnych strán rušíme delenie slov
   ViditelnyKurzor.jumpToPage(strana)
   ViditelnyKurzor.jumpToEndOfPage ' Skočíme na koniec strany
   AktualnyKurzor = AktualnyText.createTextCursorByRange(ViditelnyKurzor.getStart() )
   AktualnyKurzor.gotoStartOfWord(false) ' Označíme posledné slovo
   AktualnyKurzor.gotoEndOfWord(true)
   ViditelnyKurzor.gotoRange(AktualnyKurzor,false)
   zrus_jazyk
  end if
 next strana
 ViditelnyKurzor.gotoRange(PovodnyKurzor,false)
end sub

REM Makro pre odstránenie delenia na konci odsekov
sub Odstran_delenie_odsek
 dim ViditelnyKurzor, AktualnyText, AktualnyKurzor, PovodnyKurzor as object

 ViditelnyKurzor = ThisComponent.getCurrentController().getViewCursor()
 PovodnyKurzor=ViditelnyKurzor.getstart() ' Odpamätanie aktuálnej pozície

 AktualnyText = ThisComponent.getText()
 AktualnyKurzor = AktualnyText.createTextCursorByRange(ViditelnyKurzor.getStart() )
 AktualnyKurzor.gotoStart(false) ' Skočíme na začiatok dokumentu
 do
  AktualnyKurzor.gotoEndOfParagraph(false)
  AktualnyKurzor.gotoStartOfWord(false) ' Označíme posledné slovo
  AktualnyKurzor.gotoEndOfWord(true)
  ViditelnyKurzor.gotoRange(AktualnyKurzor,false)
  zrus_jazyk
 loop while AktualnyKurzor.gotoNextParagraph(false)
 ViditelnyKurzor.gotoRange(PovodnyKurzor,false)
end sub

REM Procedúra pre zrušenie jazyka (z nahrávania makra)
sub zrus_jazyk
 dim document as object
 dim dispatcher as object
 document = ThisComponent.CurrentController.Frame
 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
 dim args1(0) as new com.sun.star.beans.PropertyValue
 args1(0).Name = "Language"
 args1(0).Value = "Current_LANGUAGE_NONE"
 dispatcher.executeDispatch(document, ".uno:LanguageStatus", "", 0, args1())
end sub

REM Procedúra pre zmenu viditeľnosti políčiek párne/nepárne strany podľa toho, či rušíme strany alebo odseky
sub Strany_Initiated
 if dlg.model.Strany.State=1 then ' Ak rušíme delenie strán, tak sa nastavuje párne/nepárne
  dlg.getControl("Parne").Visible = true
  dlg.getControl("Neparne").Visible = true
 else ' Inak nie
  dlg.getControl("Parne").Visible = false
  dlg.getControl("Neparne").Visible = false
 endif
end sub

REM Vlastná procedúra pre otvorenie dialógu a zrušenie delenia slov
sub Zakaz_Delenie
 dim nazov as string
 DialogLibraries.LoadLibrary("JP_delenie_strany")
 dlg=CreateUnoDialog(DialogLibraries.JP_delenie_strany.Strana_Odsek) ' Sprístupnenie dialógu

 kde=basiclibraries.getLibraryLinkURL("JP_delenie_strany") ' Adresár, kde je rozšírenie nainštalované
 nazov=left(kde,len(kde)-10)+"jp_delenie_strany_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou

 Set_jazyk_dialgu(dlg, nazov, "Strana_Odsek") ' Nastavenie jazyka dialógu
 dlg.model.Strany.State=1 ' Prednastavené nastavenie rušenie delenia na konci strán
 dlg.model.Odseky.State=0

 dlg.model.Parne.State=1 ' Prednastavené nastavenie je nedelenie slov na všetkých stranách
 dlg.model.Neparne.State=1

 if dlg.execute() then
  if dlg.model.Strany.State=1 then
   Odstran_delenie_strany(dlg.model.Parne.State=1, dlg.model.Neparne.State=1)
  else
   Odstran_delenie_odsek
  end if
 end if
 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í.

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