Archív Inet.sk Pôvodný autor: Július Pastierik
21. 03. 2007 o 00:00 3079x

Makrá v OpenOffice.org 5/XIII. – Formátovanie dokumentu 5

V už trinástom dieli piatej časti seriálu o programovaní makier v OpenOffice.org sa znovu vrátime k on-line vkladaniu nezalomiteľných medzier za jednoznakové predložky a spojky.
Makrá v OpenOffice.org 5/XIII. – Formátovanie dokumentu 5

V rámci formátovania dokumentu má osobitné postavenie vkladanie nezalomiteľných medzier za jednoznakové predložky a spojky, pretože pri týchto máme možnosť ich vkladania priamo počas písania textu, a, pravdaže, aj počas celkového formátovania dokumentu.

Čiastočne sa teda musíme vrátiť k štvrtej časti tohto seriálu, kde sme sa zmieňovanou problematikou zaoberali. Pravdaže, nemá zmysel, aby sme znovu rozoberali všetky podrobnosti, ktoré sme vtedy uviedli a preto sa hneď budeme venovať príslušným makrám.

V zozname modulov si zadefinujeme modul – „Nezalomitelna_predlozky_funkcie“, kde si naprogramujeme príslušné funkcie pre vkladanie nezalomiteľných medzier priamo počas písania textu. Pravdaže, v príslušných funkciách už budeme využívať nastavenia, ktoré sme si nastavili a vybrali podľa nami definovaných používateľských profilov.

Aby sme sa v nových nastaveniach (príznakoch) lepšie orientovali, ešte raz si v krátkosti zopakujme ich význam aj s príslušnými hodnotami. Príznaky sú definované v globálnej premennej „Priznaky_formatovania“, ktorú sme zadefinovali v module „Profily_funkcie“:

Priznaky_formatovania(1) – príznak (=1) vkladania nezalomiteľných medzier za jednoznakovými predložkami a spojkami.
Priznaky_formatovania(2) – znak, ktorý sa vkladá za jednoznakové predložky a spojky (NBSP=1, WJ=2).
Priznaky_formatovania(3) – príznak, či sa má vkladať nezalomiteľná medzera aj za predložku „a“ (=1).
Priznaky_formatovania(4) – príznak, či sa majú nezalomiteľné medzery vkladať za jednoznakové spojky (ak je to povolené) priamo (ON-line) počas písania textu (=1).
Priznaky_formatovania(5) – príznak (=1) vkladania nezalomiteľných medzier za akademické tituly.
Priznaky_formatovania(6) – znak, ktorý sa vkladá za akademické tituly (NBSP=1, WJ=2).
Priznaky_formatovania(7) – príznak (=1) vkladania nezalomiteľných medzier za číslice a dátumy.
Priznaky_formatovania(8) – znak, ktorý sa vkladá za číslice a dátumy (NBSP=1, WJ=2).
Priznaky_formatovania(9) – príznak (=1), či sa majú odstrániť viacnásobné medzery.
Priznaky_formatovania(10) – príznak (=1), či sa majú odstrániť viacnásobné medzery na začiatku a konci odstavcov.
Priznaky_formatovania(11) – príznak (=1), či sa majú odstrániť medzery medzi zátvorkami a textom.
Priznaky_formatovania(12) – príznak (=1), či sa majú odstrániť medzery medzi úvodzovkami a textom.
Priznaky_formatovania(13) – príznak (=1), či sa majú odstrániť medzery medzi interpunkčnými znamienkami a textom.
Priznaky_formatovania(14) – príznak (=1), či sa majú odstrániť prázdne odstavce.
Priznaky_formatovania(15) – príznak (=1), či sa má vložiť medzera medzi bodku a text.
Priznaky_formatovania(16) – príznak (=1), či sa má vložiť medzera medzi dvojbodku a text.

Ale teraz sa už venujme vlastným makrám pre vkladanie nezalomiteľných medzier za jednoznakové spojky a predložky priamo počas ich písania:

global ObsluhaDokumentu, ObsluhaKlavesnice as object
global PosledneSlovo, OddelovaceSlov as string
global Obsluhovat_Klavesnicu as boolean

function JednoznakovePredlozky as string
 ' Pretože počas písania môžeme zmeniť nastavenie profilu,
 ' definícia zoznamu predložiek je definovaná ako funkcia
 JednoznakovePredlozky="AiIkKoOsSuUvVzZ"
 if Profily_funkcie.Priznaky_formatovania(3)=1 then
  JednoznakovePredlozky="a"+JednoznakovePredlozky
 endif
end function

sub SpustiObsluhuKlavesnice
 on error goto next
 ' Obsluhu klávesnice spustíme iba vtedy, ak vôbec povolili zámenu predložiek
 ' a zároveň chceme túto zámenu robiť ON-line
 Obsluhovat_Klavesnicu=(Profily_funkcie.Priznaky_formatovania(1)=1) and (Profily_funkcie.Priznaky_formatovania(4)=1)
 PosledneSlovo = ""
 ' medzera, nezalomiteľná medzera, tabelátor, CR, LF
 OddelovaceSlov=" "+chr(&HA0)+chr(&H09)+chr(&H0A)+chr(&H0D)
 ' pomlčka, lomítko, bodka, čiarka, výkričník, otáznik, bodkočiarka, trojbodka
 OddelovaceSlov=OddelovaceSlov+"-/.,!?;…"
 ' zátvorky
 OddelovaceSlov=OddelovaceSlov+"()[]{}"
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Sme v textovom dokumente, kde chceme nahrádzať medzery
  ObsluhaDokumentu = ThisComponent.getCurrentController
  ObsluhaKlavesnice = createUnoListener("Klavesnica_","com.sun.star.awt.XKeyHandler")
  ObsluhaDokumentu.addKeyHandler(ObsluhaKlavesnice)
 endif
end sub

sub UkonciObsluhuKlavesnice
 on error goto next
 if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
  ' Sme v textovom dokumente a chceme ukončiť obsluhu klávesnice
   ObsluhaDokumentu.removeKeyHandler(ObsluhaKlavesnice)
   PosledneSlovo = ""
 endif
end sub

function VlozZnak(Retazec as string)
 ' Na aktuálnu pozíciu v dokumente vložíme reťazec
 dim ViditelnyKurzor, AktualnyText, AktualnyKurzor as object

 ViditelnyKurzor = ThisComponent.getCurrentController().getViewCursor()
 AktualnyText = ThisComponent.getText()
 AktualnyKurzor = AktualnyText.createTextCursorByRange(ViditelnyKurzor.getStart())
 AktualnyText.insertString(AktualnyKurzor.getStart(), Retazec, true)
end function

function Klavesnica_KeyPressed(StlacenaKlavesa) as boolean
' Obsluha stlačenej klávesy
 dim Obsluzena as boolean
 'Predpokláme, že nebudeme vkladať nezalomiteľnú medzeru
 Obsluzena=False
 if instr(OddelovaceSlov, StlacenaKlavesa.KeyChar)<>0 then
  ' Došli sme na koniec slova
  if Obsluhovat_Klavesnicu then
   ' Ak máme vôbec meniť medzery za nezalomiteľné
   if ZistiPredlozku and (StlacenaKlavesa.KeyChar=" ") then
    ' Je to predložka, ktorá končí zalomiteľnou medzerou - túto nahradíme
    if Profily_funkcie.Priznaky_formatovania(2)=1 then
     VlozZnak(chr$(&HA0)) ' No Break Space (NBSP)
     ' Sami sme vložili medzeru - obslúžili sme stlačenú klávesu
     Obsluzena=true
    else
     VlozZnak(chr$(&H2060)) ' Word Joiner (WJ)
     ' V tomto prípade sa musí ešte vložiť aj zadaná medzera a preto sme neobslúžili stlačenú klávesu
    endif
   endif
  endif
  PosledneSlovo=""
 else
  ' Ešte musíme otestovať riadiace znaky, ktoré nebudeme sledovať v zadávanom slove
  select case StlacenaKlavesa.KeyChar
   case chr$(&H00) to chr$(&H07)
    PosledneSlovo=""
   case chr$(&H08) ' BS
    if len(PosledneSlovo)>0 then
     PosledneSlovo=left(PosledneSlovo, len(PosledneSlovo)-1)
    else
     PosledneSlovo=""
    endif
   case chr$(&H09) to chr$(&H1F)
    PosledneSlovo=""
   case chr$(&H20) to chr$(&H7E)
    PosledneSlovo=PosledneSlovo+StlacenaKlavesa.KeyChar
   case chr$(&H7F) ' CTRL BS
    PosledneSlovo=""
   case else
    PosledneSlovo=PosledneSlovo+StlacenaKlavesa.KeyChar
  end select
 endif
 Klavesnica_KeyPressed=Obsluzena
end function

function Klavesnica_KeyReleased(StlacenaKlavesa) as boolean
' Obsluha pustenej klávesy
 Klavesnica_KeyReleased = False
end function

function ZistiPredlozku as boolean
dim JePredlozka as boolean
 JePredlozka=false
 if len(PosledneSlovo)=1 then
  ' Ak je to jednoznakové slovo, tak to môže byť predložka
  JePredlozka=instr(1,JednoznakovePredlozky, PosledneSlovo, 0)
 endif
 ZistiPredlozku=JePredlozka
end function

Pravdaže, nesmieme zabudnúť ani na funkcie, ktoré nám zjednodušujú prístup k uvedeným makrám. Na tieto funkcie si zadefinujeme nový modul „Nezalomitelne_predlozky“:

sub Automaticky_Obsluhuj_Klavesnicu
 ' Procedúra pre automatické spustenie vkladania nezalomiteľných medzier
 ' ktorú môžeme volať počas otvárania súboru. Spustenie závisí od nastavených
 ' parametrov v používateľskom profile.
 Formatovanie.Nastav_formatovanie
 ' Podľa aktuálneho profilu sa zistia príznaky
 if (Profily_funkcie.Priznaky_formatovania(1)=1) and (Profily_funkcie.Priznaky_formatovania(4)=1) then
  Nezalomitelne_predlozky_funkcie.SpustiObsluhuKlavesnice
 endif
end sub

sub Obsluhuj_Klavesnicu
 ' Spustenie automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
 Nezalomitelne_predlozky_funkcie.SpustiObsluhuKlavesnice
 Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=True
end sub

sub Neobsluhuj_Klavesnicu
 ' Zastavenie automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
 Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=False 
 Nezalomitelne_predlozky_funkcie.UkonciObsluhuKlavesnice
end sub

sub Povol_Klavesnicu
 ' Povolenie pozastaveného automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
 Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=True
end sub

sub Pozastav_Klavesnicu
 ' Pozastavenie automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
 Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=False
end sub

Na budúce: Ďalšie funkcie pre formátovanie dokumentu, alebo dávame to čoraz viac dohromady.


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