Makrá v OpenOffice. org 2/XI. – Záverečné úpravy

Július Pastierik  /  16. 03. 2006, 00:00

V poslednom dieli druhej časti seriálu o programovaní makier v OpenOffice. org dokončíme prvú (ale nie poslednú) komplexnú verziu makier pre formátovanie dokumentov.

Naposledy sme si povedali, že makrá pre formátovanie dokumentov rozdelíme do dvoch modulov, pričom sme si uviedli zdrojové texty modulu „Formatovanie_funkcie“. Dnes si ukážeme, ako budeme tieto funkcie volať v procedúrach, ktoré uložíme do modulu „Formatovanie“. Prístup k podprogramom, ktoré sa nachádzajú v iných moduloch nám umožňuje zápis, ktorý je podobný zápisu pri volaní metód v rámci objektových premenných:

meno_modulu. meno_podprogramu

Ako sme si spomínali minule, chceme zároveň naprogramovať procedúru, ktorá bude volať všetky formátovacie funkcie. Pri ich volaní však nemôžeme použiť hocijaké poradie, pretože potom by sme nedosiahli požadovaný výsledok. Ako prvé musia byť prevedené rôzne zámeny, pretože napr. pred „trojbodkou“ nechávame medzeru, ale pred bodkou nie. Následne je potrebné vymazať viacnásobné medzery, lebo potom by v prípade ich výskytu napr. za spojkou zostala kombinácia nezalomiteľná + zalomiteľná medzera. Ešte pred opravou zalomiteľných medzier za spojkami a predložkami sa najprv musí vložiť medzera za interpunkčné znamienka, lebo potom by mohla zostať zalomiteľná medzera za spojkou, ak predtým pred ňou chýbala. Takisto pre opravou predložiek a spojok musíme zmazať nadbytočné medzery pri interpunkčných znamienkach, pretože v prípade, že napr. na konci zátvorky je iba spojka, zbytočne sa najprv zamení medzera za nezalomiteľnú, aby sa za chvíľu úplne vymazala. Pretože sme vo funkcii pre mazanie nadbytočných medzier pri pri interpunkčných znamienkach neuvažovali s možnosťou nezalomiteľnej medzery a tabelátora, musíme si najprv v module „Formatovanie_funkcie“ opraviť túto funkciu:

function f_Zmaz_Interpunkcia_Medzera as long
 dim TAB as string
 dim kolko as long
 TAB=chr$(&H09) ' Tabelátor
 kolko=Vymen_hladanim("(„|«|"+chr$(&H22)+"|(|[|{)","","", true, false, false)
 kolko=kolko+Vymen_hladanim("(„|«|"+chr$(&H22)+"|(|[|{)"+NM, NM,"", true, false, false)
 kolko=kolko+Vymen_hladanim("(„|«|"+chr$(&H22)+"|(|[|{)"+TAB, TAB,"", true, false,false)
 kolko=kolko+Vymen_hladanim("(“|»|"+chr$(&H22)+"|)|]|}|,|.|!|?|;|:)","","", true,false,false)
 kolko=kolko+Vymen_hladanim(NM+"(“|»|"+chr$(&H22)+"|)|]|}|,|.|!|?|;|:)", NM,"", true, false, false)
 kolko=kolko+Vymen_hladanim(TAB+"(“|»|"+chr$(&H22)+"|)|]|}|,|.|!|?|;|:)", TAB,"", true, false, false)
 f_Zmaz_Interpunkcia_Medzera=kolko
end function

V prípade, že budete potrebovať znak tabelátora aj v iných funkciách, je vhodné zaradiť jeho definíciu medzi spoločné premenné a následne jeho inicializáciu zaradiť do podprogramu Init. To však ponecháme prípadným záujemcom ako domácu úlohu. Modul „Formatovanie“, kde sú definované podprogramy pre formátovanie dokumentu môže pri dodržaní vyššie uvedených podmienok vyzerať napr. takto:

REM Makro pre odstraňovanie viacnásobných medzier
sub Viacnasobna_Medzera
 Formatovanie_funkcie. Init
 msgbox("Vymazanie"+Formatovanie_funkcie. f_Viacnasobna_Medzera()+"viacnásobných medzier.", 0,"Viacnásobné medzery")
end sub

REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
sub Nezalomitelne_Spojky
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Nezalomitelne_Spojky()+"nezalomiteľných medzier.", 0,"Nezalomiteľné spojky a predložky")
end sub

REM Makro pre vkladanie nezalomiteľných medzier pred a za akademické tituly
sub Nezalomitelne_Tituly
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Nezalomitelne_Tituly()+"nezalomiteľných medzier.", 0,"Nezalomiteľné tituly")
end sub

REM Makro pre vkladanie nezalomiteľných medzier do dátumov
sub Nezalomitelne_Datumy
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Nezalomitelne_Datumy()+"nezalomiteľných medzier.", 0,"Nezalomiteľné dátumy")
end sub

REM Makro pre vkladanie nezalomiteľných medzier medzi jednociferné čísla a text
sub Nezalomitelne_Jednociferne_Cisla
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Nezalomitelne_Jednociferne_Cisla()+"nezalomiteľných medzier.", 0,"Nezalomiteľné jednociferné čísla")
end sub

REM Makro pre vkladanie nezalomiteľných medzier v telefónnych číslach
sub Nezalomitelne_Telefonne_Cisla
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Nezalomitelne_Telefonne_Cisla()+"nezalomiteľných medzier.", 0,"Nezalomiteľné telefónne čísla")
end sub

REM Makro pre vkladanie nezalomiteľných medzier medzi čísla a merné jednotky
sub Nezalomitelne_Merne_Jednotky
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Nezalomitelne_Merne_Jednotky()+"nezalomiteľných medzier.", 0,"Nezalomiteľné merné jednotky")
end sub

REM Makro pre vloženie nezalomiteľných medzier za čísla ako také
sub Nezalomitelne_Cisla
 dim kolko as long
 Formatovanie_funkcie. Init
 kolko=Formatovanie_funkcie. f_Nezalomitelne_Datumy()
 kolko=kolko+Formatovanie_funkcie. f_Nezalomitelne_Jednociferne_Cisla()
 kolko=kolko+Formatovanie_funkcie. f_Nezalomitelne_Telefonne_Cisla()
 kolko=kolko+Formatovanie_funkcie. f_Nezalomitelne_Merne_Jednotky()
 msgbox("Vložených"+kolko+"nezalomiteľných medzier.", 0,"Nezalomiteľné čísla")
end sub

REM Makro pre mazanie nadbytočných medzier pri interpunkčných znamienkach
sub Zmaz_Interpunkcia_Medzera
 Formatovanie_funkcie. Init
 msgbox("Vymazaných"+Formatovanie_funkcie. f_Zmaz_Interpunkcia_Medzera()+"nadbytočných medzier.", 0,"Nadbytočné interpunkčné medzery")
end sub

REM Makro pre vkladanie chýbajúcich medzier pri interpunkčných znamienkach
sub Vloz_Interpunkcia_Medzera
 Formatovanie_funkcie. Init
 msgbox("Vložených"+Formatovanie_funkcie. f_Vloz_Interpunkcia_Medzera()+"chýbajúcich medzier.", 0,"Chýbajúce interpunkčné medzery")
end sub

REM Makro pre opravu (vloženie/vymazanie) medzier pri interpunkčných znamienkach
sub Oprav_Interpunkcia_Medzera
 Formatovanie_funkcie. Init
 msgbox("Opravených"+Formatovanie_funkcie. f_Zmaz_Interpunkcia_Medzera()+Formatovanie_funkcie. f_Vloz_Interpunkcia_Medzera()+"medzier.", 0,"Nesprávne interpunkčné medzery")
end sub

REM Makro pre rôzne zámeny (napr. troch bodiek za „trojbodku“)
sub Rozne_zameny
 Formatovanie_funkcie. Init
 msgbox("Vykonaných"+Formatovanie_funkcie. f_Rozne_zameny()+"výmien.", 0,"Rôzne zámeny")
end sub

REM Makro pre celkové formátovanie dokumentu
sub Formatuj_Dokument
 dim kolko as long
 Formatovanie_funkcie. Init
 ' Prvé musia byť rôzne zámeny
 kolko=Formatovanie_funkcie. f_Rozne_Zameny()
 ' Potom odstránime viacnásobné medzery
 kolko=kolko+Formatovanie_funkcie. f_Viacnasobna_Medzera()
 ' Opravíme medzery pri interpunkčných znamienkach
 kolko=kolko+Formatovanie_funkcie. f_Zmaz_Interpunkcia_Medzera()+Formatovanie_funkcie. f_Vloz_Interpunkcia_Medzera()
 ' Vložíme nezalomiteľné medzery k číslam
 kolko=kolko+Formatovanie_funkcie. f_Nezalomitelne_Datumy()+Formatovanie_funkcie. f_Nezalomitelne_Jednociferne_Cisla()+Formatovanie_funkcie. f_Nezalomitelne_Telefonne_Cisla()+Formatovanie_funkcie. f_Nezalomitelne_Merne_Jednotky()
 ' Opravíme nezalomiteľné medzery pri akademických tituloch
 kolko=kolko+Formatovanie_funkcie. f_Nezalomitelne_Tituly()
 ' A nakoniec opravíme nezalomiteľné medzery pri spojkách a predložkách
 kolko=kolko+Formatovanie_funkcie. f_Nezalomitelne_Spojky()
 msgbox("Prevedných"+kolko+"náhrad.", 0,"Formátovanie textu")
end sub


Skončili sme druhú veľkú časť seriálu o programovaní makier v OpenOffice. org. Ako ste si mohli všimnúť aj v dnešnom dieli, uvedené funkcie určite neposkytujú všetky možnosti, ktoré pri práci potrebujeme. Na základe doterajších príkladov si však už určite dokážete naprogramovať aj prípadné úpravy, pomocou ktorých vhodne upravíte alebo rozšírite ich možnosti. V našom seriáli budeme teraz pokračovať treťou veľkou časťou, v ktorej si naznačíme možnosti programovania makier pre OpenOffice.org v oblasti vstupov a výstupov, t.j. budeme programovať rôzne vstupné formuláre (dialógové okná) a pod. Pri tomto programovaní sa stále budeme zaoberať funkciami pre formátovanie dokumentov, takže tieto znovu prekonajú niekoľko zmien.

Pre všetkých záujemcov sme zároveň pripravili PDF verziu práve ukončenej druhej časti seriálu o programovaní makier v OpenOffice.org – makra_v_ooo_2.pdf (379kB, MD5 kontrolný súčet – 458D576061D19D55F0D2FF7FD1C6C745). Ako príloha sú priamo v ňom vložené aj zdrojové texty makier v TXT formáte.

Neprehliadnite: