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

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.


Neprehliadnite: