Na úvod si urobme krátky prehľad doteraz naprogramovaných makier pre formátovanie dokumentov:
– makro pre odstraňovanie viacnásobných medzier „Viacnasobna_Medzera“
– makro pre vkladanie nezalomiteľných medzier za predložky a spojky „ Nezalomitelne_Spojky“
– makro pre vkladanie nezalomiteľných medzier pred a za akademické tituly „ Nezalomitelne_tituly“
– makro pre vkladanie nezalomiteľných medzier do dátumov „ Nezalomitelne_datumy“
– makro pre vkladanie nezalomiteľných medzier medzi jednociferné čísla a text „Nezalomitelne_Jednociferne_Cisla“
– makro pre vkladanie nezalomiteľných medzier v telefónnych číslach „Nezalomitelne_Telefonne_Cisla“
– makro pre vkladanie nezalomiteľných medzier medzi čísla a merné jednotky „Nezalomitelne_Merne_Jednotky“
– makro pre mazanie nadbytočných medzier pri interpunkčných znamienkach „Zmaz_Interpunkcia_Medzera“
– makro pre vkladanie chýbajúcich medzier pri interpunkčných znamienkach „ Vloz_Interpunkcia_Medzera“
K tomu ešte musíme pridať makro pre zámenu troch bodiek za „trojbodku“, ktoré sme naznačili ešte v štvrtom pokračovaní prvej časti tohto seriálu a ktoré môžeme nazvať „Rozne_Zameny“.
Pri praktickej úprave dokumentov je veľmi nepohodlné, aby sme každé makro spúšťali osobitne a tak isto nechceme, aby sme museli pri ich spoločnom spustení osobitne potvrdzovať zistené počty jednotlivých prevedených zámen. Na druhej strane však niekedy potrebujeme práve osobitné, resp. selektívne spúšťanie. Aby sme toto všetko mohli vyriešiť, musíme si uvedené makrá prispôsobiť.
Každé makro rozdelíme na dve časti. Prvá časť bude funkcia, ktorá prevedie príslušné formátovanie a ako výsledok nám vráti počet výmien (opráv) bez toho, aby ho vypisovala na obrazovku. Druhá časť bude malý podprogram, ktorý bude predmetnú funkciu volať a následne aj vypisovať počet prevedených opráv.
Aby sme si udržali potrebný prehľad, rozdelíme si tieto dve časti do osobitných modulov v rámci skupín makier. Cez menu „Nástroje – Makrá – Správca makier – OpenOffice.org Basic…“ si otvoríme dialógové okno „Makrá v OpenOffice.org Basic“. V skupine makier „Vlastne_makra“ si vytvoríme dva moduly, ktoré nazveme „Formatovanie“ a „Formatovanie_funkcie“. V module „Formatovanie“ budeme mať malé podprogramy, ktoré budú volať vlastné formátovacie funkcie, ktoré uložíme do modulu „Formatovanie_funkcie“.
Aby sme rozlíšili funkciu od podprogramu, vložíme na jej začiatok písmeno „f“. Celý modul „Formatovanie_funkcie“ bude vyzerať nasledovne:
REM Definície spoločných premenných sú úplne pred definíciou podprogramov
dim Dokument, Vymena, Hladaj as object
dim NM as string
REM Inicializácia spoločných premenných
sub Init
Dokument=ThisComponent
Vymena=Dokument.createReplaceDescriptor()
Hladaj=Dokument.createSearchDescriptor()
NM=chr$(&HA0) ' Nezalomiteľná medzera – hexadecimálny kód A0
end sub
REM Výmena reťazca Co za reťazec Za
function Vymen(Co, Za as string, Regularne, Cele_slova, Velke_pismena as Boolean) as long
Vymena.SearchString=Co
Vymena.ReplaceString=Za
Vymena.SearchRegularExpression=Regularne
Vymena.SearchWords=Cele_slova
Vymena.SearchCaseSensitive=Velke_pismena
Vymen=Dokument.replaceAll(Vymena)
end function
REM Vlastná výmena reťazca Co za reťazec Za vo vnútri reťazca V_Com
function Zamen_Vo_Vnutri (V_Com, Co, Za as string) as string
dim pom as string
dim i, j as long
pom=V_Com
i=instr(V_Com,Co)
j=len(V_Com)-i-len(Co)+1
if i>0 then
pom=left(V_Com,i-1)+Za
if j>0 then
pom=pom+right(V_Com,j)
end if
end if
Zamen_Vo_Vnutri=pom
end function
REM Výmena vnútorného raťazca Co za reťazec Za hľadaním reťazca V_Com
function Vymen_hladanim(V_Com, Co, Za as string, Regularne, Cele_slova, Velke_pismena as Boolean) as long
dim nasiel as object
dim kolko as long
Hladaj.searchString=V_Com
Hladaj.SearchRegularExpression=Regularne
Hladaj.SearchWords=Cele_slova
Hladaj.SearchCaseSensitive=Velke_pismena
kolko=0
nasiel = Dokument.findFirst(Hladaj)
Do While NOT isNull(nasiel)
if len(nasiel.String)>0 then
nasiel.String=Zamen_Vo_Vnutri(nasiel.String,Co,Za)
kolko=kolko+1
end if
nasiel = Dokument.findNext( nasiel.End, Hladaj)
Loop
Vymen_hladanim=kolko
end function
REM Vyhľadanie reťazca V_Com a na pozíciu Kde do neho vloží reťazec Co
function Vloz_hladanim(V_Com, Co as string, Kde as long, Regularne, Cele_slova, Velke_pismena as Boolean) as long
dim nasiel as object
dim kolko, i, j as long
dim pom as string
Hladaj.searchString=V_Com
Hladaj.SearchRegularExpression=Regularne
Hladaj.SearchWords=Cele_slova
Hladaj.SearchCaseSensitive=Velke_pismena
kolko=0
i=kde+1
nasiel = Dokument.findFirst(Hladaj)
Do While NOT isNull(nasiel)
if len(nasiel.String)>0 then
j=len(nasiel.String)-i+1
pom=left(nasiel.String,i-1)+Co
if j>0 then
pom=pom+right(nasiel.String,j)
end if
nasiel.String=pom
kolko=kolko+1
end if
nasiel = Dokument.findNext( nasiel.End, Hladaj)
Loop
Vloz_hladanim=kolko
end function
REM Makro pre odstraňovanie viacnásobných medzier
function f_Viacnasobna_Medzera as long
dim kolko AS Long
kolko=Vymen(" +"," ",TRUE,false,false)
kolko=kolko+Vymen(" "+NM+" |"+NM+" | "+NM,NM,TRUE,false,false)
kolko=kolko+Vymen(" \t |\t | \t","\t",TRUE,false,false)
kolko=kolko+Vymen("^[:space:]*|[:space:]*$","",TRUE,false,false)
kolko=kolko+Vymen("^\t*|\t*$","",TRUE,false,false)
f_Viacnasobna_Medzera=kolko
end function
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
function f_Nezalomitelne_Spojky as long
f_Nezalomitelne_Spojky=Vymen_hladanim("\<(a|i|k|o|s|u|v|z) "," ",NM,true,false,false)
end function
REM Makro pre vkladanie nezalomiteľných medzier pred a za akademické tituly
function f_Nezalomitelne_Tituly as long
dim Tituly_pred(), Tituly_pred_spec(), Tituly_za() as string
dim i, kolko as long
Tituly_pred()=array("Bc", "Dr", "Ing", "JUDr", "Mgr", "MUDr", "MVDr", "PaedDr", "PharmDr", "PhDr", "PhMr", "RNDr", "ThDr")
Tituly_pred_spec()=array("akad", "Akad", "arch", "Arch", "doc", "Doc", "prof", "Prof")
Tituly_za()=array("CSc","DrSc")
kolko=Vymen("h. c.","h."+NM+"c.",false,false,false)
kolko=kolko+Vymen(" h.c.",NM+"h.c.",false,false,false)
kolko=kolko+Vymen(" h."+NM+"c.",NM+"h."+NM+"c.",false,false,false)
for i=lbound(Tituly_pred()) to ubound(Tituly_pred())
kolko=kolko+Vymen("\<"+Tituly_pred(i)+"\. ",Tituly_pred(i)+"."+NM,true,false,false)
next i
for i=lbound(Tituly_pred_spec()) to ubound(Tituly_pred_spec())
kolko=kolko+Vymen("\<"+Tituly_pred_spec(i)+"\. ",Tituly_pred_spec(i)+"."+NM,true,false,true)
next i
for i=lbound(Tituly_za()) to ubound(Tituly_za())
kolko=kolko+Vymen(" "+Tituly_za(i)+".",NM+Tituly_za(i),false,false,false)
next i
f_Nezalomitelne_Tituly=kolko
end function
REM Makro pre vkladanie nezalomiteľných medzier do dátumov
function f_Nezalomitelne_Datumy as long
dim kolko as long
kolko=Vymen_hladanim("[0-9]\. [0-9]"," ",NM,true,false,false)
kolko=kolko+Vymen_hladanim("[0-9]\. [0-9]"," ",NM,true,false,false)
f_Nezalomitelne_Datumy =kolko
end function
REM Makro pre vkladanie nezalomiteľných medzier medzi jednociferné čísla a text
function f_Nezalomitelne_Jednociferne_Cisla as long
f_Nezalomitelne_Jednociferne_Cisla =Vymen_hladanim("\<[0-9] "," ",NM,true,false,false)
end function
REM Makro pre vkladanie nezalomiteľných medzier v telefónnych číslach
function f_Nezalomitelne_Telefonne_Cisla as long
f_Nezalomitelne_Telefonne_Cisla =Vymen_hladanim("[0-9] [0-9]"," ",NM,true,false,false)
end function
REM Makro pre vkladanie nezalomiteľných medzier medzi čísla a merné jednotky
function f_Nezalomitelne_Merne_Jednotky as long
f_Nezalomitelne_Merne_Jednotky=Vymen_hladanim("[0-9] (m|km|mm|cm)"," ",NM,true,false,false)
end function
REM Makro pre mazanie nadbytočných medzier pri interpunkčných znamienkach
function f_Zmaz_Interpunkcia_Medzera as long
dim kolko as long
kolko=Vymen_hladanim("(„|«|"+chr$(&H22)+"|\(|\[|{) "," ","",true,false,false)
kolko=kolko+Vymen_hladanim(" (“|»|"+chr$(&H22)+"|\)|\]|}|\,|\.|!|\?|;|:)"," ","",true,false,false)
f_Zmaz_Interpunkcia_Medzera=kolko
end function
REM Makro pre vkladanie chýbajúcich medzier pri interpunkčných znamienkach
function f_Vloz_Interpunkcia_Medzera as long
dim kolko as long
kolko=Vloz_hladanim("(\?|!|;)[:alnum:]{1}"," ",1,true,false,false)
kolko=kolko+Vloz_hladanim("[^0-9](\,|\.|:)[:alnum:]{1}"," ",2,true,false,false)
f_Vloz_Interpunkcia_Medzera=kolko
end function
REM Makro pre rôzne zámeny (napr. troch bodiek za „trojbodku“)
function f_Rozne_zameny as long
dim Co(), Za() as string
dim n as long
dim kolko as long
Co()=array("...")
Za()=array("…")
kolko=0
for n=lbound(Co()) to ubound(Za())
kolko=kolko+Vymen(Co(n),Za(n),false,false,false)
next n
f_Rozne_zameny=kolko
end function
Všimnite si zaujímavú zmenu makra pre vkladanie nezalomiteľných medzier za jednoznakové predložky a spojky, pretože sme aj pri ňom využili našu vlastnú funkciu pre výmenu.
Na budúce: Modul „Formatovanie“, alebo ako to všetko spolu vlastne funguje.