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

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

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

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