Archív Inet.sk Pôvodný autor: Július Pastierik
19. 01. 2006 o 00:00 4608x

Makrá v OpenOffice.org 2/III. – nezalomiteľná medzera

V dnešnom dieli nášho seriálu začneme rozširovať funkcie, ktorými budeme formátovať dokument. A začneme hneď jedným z najviac žiadaných makier, pomocou ktorého budeme podľa typografických pravidiel zamieňať zalomiteľné medzery za nezalomiteľné.
Makrá v OpenOffice.org 2/III. – nezalomiteľná medzera
V minulom dieli sme si naprogramovali funkciu „Vymen“ a procedúru „Init“, pomocou ktorých sme následne značne zjednodušili naše makro pre opravu viacnásobných medzier. V nasledujúcich dieloch nášho seriálu tieto podprogramy už budeme štandardne využívať, takže sa k nim budeme vracať iba v nevyhnutných prípadoch, keď ich budeme meniť – teda napríklad aj v dnešnom dieli.

Nezalomiteľné medzery podľa typografických pravidiel

Pozrime sa teraz bližšie na ďalší problém, z ktorým sa pri praktickej práci stretávame. Je to ten fakt, že OpenOffice.org nevkladá automaticky nezalomiteľné medzery napr. za jednoznakové predložky. Toto však odporuje zásadám typografie, v ktorých sa o.i. hovorí, že k zalomeniu riadku nemá dôjsť pred jednociferným číslom bez bernej jednotky (napríklad „1 človek“), medzi rádovými skupinami cifier vo vnútri čísla alebo pri telefónnych číslach (napr. „1 587 235“), medzi číslom a značkou mernej jednotky (napr. „123 km“), medzi skratkami akademických titulov, vojenskými a vedeckými hodnosťami a menom (napr. „Ing. Pastierik“), medzi skratkou krstného mena a priezviskom (napr. „J. Pastierik“), za číslicami v dátumoch (napr. „16. 1. 2006“) a ani za jednoznakovou predložkou alebo spojkou.

V prípade predložiek a spojok je otázka nezalomiteľných medzier trochu nejednoznačná. Ide o to, že niektoré zdroje (napr.
http://www.typo.cz) uvádzajú, že spojka „a“ (ale nie verzálka „A“) je výnimka a ďalej, že v prípade úzkej sadzby (do 25 znakov) sú možné výnimky aj za ostatnými jednoznakovými predložkami a spojkami. Iné pramene popisujú ako výnimku iba spojku „a“ a aj to iba v prípade úzkej sadzby. Pretože rozhodnutie leží na každom používateľovi, budeme sa snažiť vyriešiť otázku okolo spojky „a“ tak, aby si každý mohol urobiť jednoduchú úpravu podľa svojich požiadavok.

Nezalomiteľné medzery za spojkami

Ako vidíme, problematika nezalomiteľných medzier je pomerne široká a preto sa ňou budeme zaoberať postupne. Ako prvé, čo si budeme v spomínanej oblasti programovať, bude makro pre zámenu zalomiteľných medzier za jednoznakovými predložkami a spojkami, pretože toto je najčastejšie požadované od používateľov OpenOffice.org. Jednoduchá verzia tohto makra by mohla vyzerať takto (predložky rozpoznáme tak, že pred nimi a za nimi je medzera):

sub nezalomitelne_Spojky

 dim predlozky() as string
 dim i, kolko as long

 predlozky()=array("a","i","k","o","s","u","v","z")

 kolko=0

 REM pre všetky predložky
 for i=lbound(predlozky()) to ubound(predlozky())
  kolko=kolko+vymen(" "+predlozky(i)+" "," "+predlozky(i)+NM,false)
 next i

 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné medzery")
end sub


Podobne, ako v prípade prvej verzie makra pre mazanie viacnásobných medzier, aj toto makro má veľa nedostatkov. Ten najhlavnejší je však ten, že ak máme spojku napísanú veľkými písmenami, tak ju zamení za malé písmeno. Je jasné, že pri zámene musíme rozpoznávať veľké a malé písmena. Na tento účel si preto najprv musíme upraviť funkciu „Vymen“. Aby sme jej úpravu nemuseli robiť tak často, hneď si uvedieme aj ďalší parameter, pomocou ktorého budeme rozpoznávať, či hľadáme celé slová, alebo iba ich časti:

function Vymen(Co, Za as string, Regularne, Cele_slova, Velke_pismena as Boolean) as long
 rem Funkcia vymení reťazec Co za reťazec Za a vráti počet výmien
 rem Regularne - určuje, či vyhľadávaný výraz je (true) alebo nie je (false) regulárny výraz
 rem Cele_slova - určuje, či vyhľadávaný výraz je (true) alebo nie je (false) celé slovo
 rem Velke_pismena - určuje, či sa majú (true) alebo nemajú (false) rozoznávať veľké a malé písmená

 Vymena.SearchString=Co
 Vymena.ReplaceString=Za
 Vymena.SearchRegularExpression=Regularne
 Vymena.SearchWords=Cele_slova
 Vymena.SearchCaseSensitive=Velke_pismena
 Vymen=Dokument.replaceAll(Vymena)
end function

Pravdaže, teraz si musíme upraviť aj makro pre zámenu viacnásobných medzier, pretože sme tam nepočítali s novými parametrami:

SUB Viacnasobna_medzera

 DIM kolko AS Long

' Inicializácia spoločných premenných
 Init

 ' Výmena viacnásobných medzier za jednoduchú
 kolko=Vymen("  +"," ",TRUE,false,false)
 ' Kombinácie nezalomiteľných a zalomiteľných medzier
 kolko=kolko+Vymen(" "+NM+" |"+NM+" | "+NM,NM,TRUE,false,false)
 ' Kombinácie tabelátorov a medzier
 kolko=kolko+Vymen(" \t |\t | \t","\t",TRUE,false,false)
 ' Medzery na začiatku a konci odstavca
 kolko=kolko+Vymen("^[:space:]*|[:space:]*$","",TRUE,false,false)
 ' Tabelátory na začiatku a konci odstavca
 kolko=kolko+Vymen("^\t*|\t*$","",TRUE,false,false)

 msgbox("Nahradených "+kolko+" viacnásobných medzier.",0,"Viacnásobne medzery")

END SUB

Makro pre zámenu zalomiteľných medzier za predložkami a spojkami by teraz mohlo vyzerať takto:

sub nezalomitelne_Spojky

 dim predlozky() as string
 dim i, kolko as long

 predlozky()=array("a","i","k","o","s","u","v","z")

 kolko=0

 REM pre všetky predložky
 for i=lbound(predlozky()) to ubound(predlozky())
  rem malé predložky
  kolko=kolko+vymen(" "+predlozky(i)+" "," "+predlozky(i)+NM,false,false,TRUE)
  rem veľké predložky – funkcia uCase prevedie malé znaky na veľké
  kolko=kolko+vymen(" "+ucase(predlozky(i))+" "," "+ucase(predlozky(i))+NM,false,false,TRUE)
 next i

 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné medzery")
end sub

V tejto verzii makra sa však vkladá nezalomiteľná medzera aj za spojku „a“, čo nie každému vyhovuje. Tento stav sa dá ošetriť napríklad tak, že budeme túto výnimku testovať:

sub nezalomitelne_Spojky

 dim predlozky() as string
 dim i, kolko as long

 predlozky()=array("a","i","k","o","s","u","v","z")

 kolko=0

 REM pre všetky predložky
 for i=lbound(predlozky()) to ubound(predlozky())
  rem malé predložky
  if predlozky(i)<>"a" then
   kolko=kolko+vymen(" "+predlozky(i)+" "," "+predlozky(i)+NM,false,false,TRUE)
  end if
  rem veľké predložky – funkcia uCase prevedie malé znaky na veľké
  kolko=kolko+vymen(" "+ucase(predlozky(i))+" "," "+ucase(predlozky(i))+NM,false,false,TRUE)
 next i

 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné medzery")
end sub

Alebo, ešte jednoduchšie, vymenovaním všetkých malých aj veľkých spojok a predložiek osobitne:

sub nezalomitelne_Spojky

 dim predlozky() as string
 dim i, kolko as long

 predlozky()=array("A","i","I","k","K","o","O","s","S","u","U","v","V","z","Z")

 kolko=0

 REM pre všetky predložky
 for i=lbound(predlozky()) to ubound(predlozky())
  kolko=kolko+vymen(" "+predlozky(i)+" "," "+predlozky(i)+NM,false,false,TRUE)
 next i

 msgbox("Nahradených "+kolko+" zalomiteľných medzier.",0,"Nezalomiteľné medzery")
end sub

Ten, kto chce vkladať aj za spojku „a“ nezalomiteľnú medzeru, si ju môže do zoznamu jednoducho doplniť. Ani toto riešenie nie je však úplne dobré, pretože niekto môže chcieť, aby sa za touto spojku nevkladala nezalomiteľná medzera iba v prípade úzkej sadzby. Toto však budeme riešiť až niekedy inokedy.

Na budúce: Zlepšujeme makro pre nezalomiteľné medzery, alebo predložky bývajú aj v kombináciách či na začiatkoch odstavca.


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í.

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.

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

Výborný pomer
cena / výkon

Ponúkame kvalitné a stabilné služby za rozumnú cenu 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ý.

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 1000 klientov.

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.

"Mal som možnosť vyskúšať rôzne webhostingy, ale nakoniec som sa rozhodol všetky moje stránky zveriť Inet.sk. Webhosting zvláda jednoduché, ale aj veľmi náročné stránky a magazíny. Podporuje najnovšie technológie a má veľmi prehľadnú a jednoduchú správu domén. Komunikácia s technickou podporou Inet.sk je vynikajúca a za mňa môžem túto firmu iba doporučiť."

Richard Horný
Final Vision, s. r. o.

"Mám u Inet.sk zaparkovanú jednu doménu a mám pocit, že tam zaparkujem aj všetky ostatné domény, ktoré mám, pretože po dlhoročných skúsenostiach s rôznymi inými firmami, mi Vaše služby vyhovujú zatiaľ najviac. Odporúčam kvôli dobrej konektivite a primeranej cene + rýchly support."

Ladislav Kéry
vypnutieimobilizera.sk

"Po rokoch skúšania dodávateľov na poli webhostingových služieb sme našli svojho spoľahlivého a stabilného partnera tu. Stabilita, ochota, znalosť, dobrá cena a rýchle vyriešenie prípadných problémov - to je pre nás Inet.sk."

Jaroslav Mráz
Allycom, s.r.o.

"Máme u Vás doménu a hosting. So službami sme nadmieru spokojní. Z Vašej strany máme pozitívne skúsenosti ako sú: rýchle jednanie, znalosť v problematike, ochota pomôcť, stabilita, zavádzanie noviniek, ak ich klient vyžaduje a dobrá cena. Za nás môžeme Inet.sk len odporučiť. Ďakujeme."

Mgr. Zuzana Valovičová
BL servis, s.r.o.

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