Július Pastierik / 09. 05. 2007, 00:00
V ďalšom dieli seriálu o programovaní makier si doplníme všetky ostatné funkcie pre vlastné formátovanie dokumentu, ktoré sme doteraz v seriáli spomínali.
Minule sme si ukázali veľmi dlhé makro pre vymazávanie viacnásobných medzier. K tomu sme ešte pridali maličké makro pre odstraňovanie prázdnych odstavcov. Dnes k tomu pridáme zvyšné formátovacie funkcie, s ktorými sme sa v tomto seriáli už postupne stretali – nahrádzanie nezalomiteľných medzier za akademickými titulmi, číslami a pod. Pravdaže, nezabudneme ani vložiť chýbajúce medzery medzi interpunkčné znamienka a text.
REM Makro pre vkladanie nezalomiteľných medzier za predložky a spojky
function f_Nezalomitelne_Spojky(spojka_a, NBSP as integer) as long
dim spojky as string
dim znak as string
' Definícia znaku, za ktorý budeme meniť zalomiteľnú medzeru
if NBSP=1 then
znak=NM
else
znak=WJ+" "
endif
' Definícia regulárneho výrazu pre spojky
if spojka_a=1 then ' Yes
spojky="\<(A|a|I|i|K|k|O|o|S|s|U|u|V|v|Z|z) "
else ' No
spojky="\<(A|I|i|K|k|O|o|S|s|U|u|V|v|Z|z) "
endif
f_Nezalomitelne_Spojky=Vymen_hladanim(spojky," ", znak, true, false, true)
end function
REM Makro pre vkladanie nezalomiteľných medzier pred a za akademické tituly
function f_Nezalomitelne_Tituly (NBSP as integer) as long
dim Tituly_pred(), Tituly_pred_spec(), Tituly_za() as string
dim i, kolko as long
dim znak as string
' Definícia znaku, za ktorý budeme meniť zalomiteľnú medzeru
if NBSP=1 then
znak=NM
else
znak=WJ+" "
endif
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.")
' Špeciálne vloženie nezalomiteľnej medzery medzi skratku h. c. a následne pred ňu.
kolko=Vymen("h. c.","h."+znak+"c.", false, false, false)
kolko=kolko+Vymen(" h."+znak+"c.", znak+"h."+znak+"c.", false, false, false)
' Pre všetky tituly pred menom, kde sa opravuje aj veľkosť znakov
for i=lbound(Tituly_pred()) to ubound(Tituly_pred())
kolko=kolko+Vymen("\<"+Tituly_pred(i)+"\. ", Tituly_pred(i)+"."+znak, true, false, false)
next i
' Pre všetky tituly pred menom, kde sa neopravuje aj veľkosť znakov
for i=lbound(Tituly_pred_spec()) to ubound(Tituly_pred_spec())
kolko=kolko+Vymen("\<"+Tituly_pred_spec(i)+"\. ", Tituly_pred_spec(i)+"."+znak, true, false, true)
next i
' Pre všetky tituly za menom
for i=lbound(Tituly_za()) to ubound(Tituly_za())
kolko=kolko+Vymen(" "+Tituly_za(i), znak+Tituly_za(i), false, false, false)
next i
f_Nezalomitelne_Tituly=kolko
end function
REM Makro pre vkladanie nezalomiteľných medzier medzi čísla a text
function f_Nezalomitelne_Cisla (NBSP as integer) as long
dim merne_jednotky as string
dim kolko as long
dim znak as string
' Definícia znaku, za ktorý budeme meniť zalomiteľnú medzeru
if NBSP=1 then
znak=NM
else
znak=WJ+" "
endif
' Definícia regulárneho výrazu pre merné jednotky
merne_jednotky="(m|km|mm|cm)"
' Nezalomiteľné medzery do dátumov
kolko=Vymen_hladanim("[0-9]\. [0-9]"," ", znak, true, false, false)
kolko=kolko+Vymen_hladanim("[0-9]\. [0-9]"," ", znak, true, false, false)
' Jednociferné čísla
kolko=kolko+Vymen_hladanim("\<[0-9] "," ", znak, true, false, false)
' Telefónne čísla
kolko=kolko+Vymen_hladanim("[0-9] [0-9]"," ", znak, true, false, false)
' Merné jednotky
kolko=kolko+Vymen_hladanim("[0-9] "+merne_jednotky," ", znak, true, false, false)
f_Nezalomitelne_Cisla=kolko
end function
REM Makro pre vkladanie chýbajúcich medzier pri interpunkčných znamienkach
function f_Vloz_Interpunkcia_Medzera (bodka, ostatne as integer) as long
dim kolko as long
kolko=0
if bodka=1 then
' Vloženie chýbajúcej medzery medzi znak bodky a text
kolko=Vloz_hladanim("[^0-9]\.[: alnum:]{1}"," ", 2,true, false, false)
endif
if ostatne=1 then
' Vloženie chýbajúcej medzery medzi ostatné znamienka a text
kolko=kolko+Vloz_hladanim("(\?|!|;|…)[: alnum:]{1}"," ", 1,true, false, false)
kolko=kolko+Vloz_hladanim("[^0-9](\,|:)[: alnum:]{1}"," ", 2,true, false, false)
endif
f_Vloz_Interpunkcia_Medzera=kolko
end function
Na budúce: Celkové formátovanie dokumentu, alebo ako to zavolať pomocou niekoľkých procedúr.
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk