Július Pastierik / 29. 06. 2011, 00:00
V už štvrtom dieli typografických makier si ukážeme ďalšie funkcie pre vkladanie nezalomiteľných medzier a funkciu, pomocou ktorej spustíme celkové formátovanie dokumentu.
Okrem predložiek a akademických titulov sa vkladajú nezalomiteľné medzery aj v iných prípadoch – napr. medzi čísla a merné jednotky, v skratkách typu „o. i.“ a pod., a práve preto si dnes ukážeme tieto funkcie. Podobne, ako minule, aj teraz budeme pri merných jednotkách predpokladať, že ich máme zadefinované v externom súbore, pretože nie každý používa všetky a pri definícii veľkého množstva týchto jednotiek by sa zbytočne spomaľoval beh makra.
Zároveň si dnes ukážeme poslednú funkciu modulu Formatovanie_funkcie, pomocou ktorej spúšťame vlastné typografické úpravy dokumentu. Týmto, samozrejme, nekončíme seriál o typografických makrách, pretože množstvo funkcií, vlastné definície už spomínaných zoznamov budeme predstavovať postupne v ďalších a ďalších moduloch typografického rozšírenia.
REM Makro pre vkladanie nezalomiteľných medzier medzi čísla a merné jednotky
function f_Nezalomitelne_Jednotky (NM as integer) as long
dim kolko as long
dim merne_jednotky as string
dim znak as string
' Definícia znaku, za ktorý budeme meniť zalomiteľnú medzeru
if NM=1 then
znak=NBSP
else
znak=WJ+" "
endif
kolko=0
' Načítanie zoznamu merných jednotiek zo súboru ako regulárny výraz
merne_jednotky=UpravNaRV(trim(nacitaj_subor("ProfilM_"+Profily_funkcie.JP_aktualny_profil+"_jednotky")))
if merne_jednotky<>"" then
kolko=Vymen_hladanim("(\<([:digit:]+)) (("+merne_jednotky+")\>)"," ",znak,true,false,true)
endif
f_Nezalomitelne_Jednotky=kolko
end function
REM Makro pre vkladanie nezalomiteľných medzier medzi čísla a text
function f_Nezalomitelne_Cisla (NM as integer) as long
dim kolko as long
dim znak as string
' Definícia znaku, za ktorý budeme meniť zalomiteľnú medzeru
if NM=1 then
znak=NBSP
else
znak=WJ+" "
endif
' 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("\<([:digit:]) "," ",znak,true,false,false)
' Medzi čísla (napr. telefónne)
kolko=kolko+Vymen_hladanim("[0-9] [0-9]"," ",znak,true,false,false)
f_Nezalomitelne_Cisla=kolko
end function
REM Makro pre vloženie NBSP v skratkách typu t.č., t.j., a. s., o. i.
function f_skratky as long
dim kolko as long
kolko=Vymen_hladanim("\<[:alpha:]\.[:alpha:]\.",".","."+NBSP,true,false,false) ' Vloženie chýbajúceho NBSP
kolko=kolko+Vymen_hladanim("\<[:alpha:]\. [:alpha:]\.",". ","."+NBSP,true,false,false) ' Oprava nesprávneho SP za NBSP
f_skratky=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
kolko=Vloz_hladanim("[:alnum:]\.[:alnum:]{1}"," ",2,true,false,false) ' Vloženie chýbajúcej medzery medzi text bodku a text
kolko=kolko+Vloz_hladanim("(\?|!)[:alnum:]{1}"," ",1,true,false,false) ' Vloženie chýbajúcej medzery za otáznik a výkričník
kolko=kolko+Vloz_hladanim("[^0-9]:[:alnum:]{1}"," ",2,true,false,false) ' Vloženie chýbajúcej medzery medzi číslo dvojbodku a text
endif
if ostatne=1 then
kolko=kolko+Vloz_hladanim("(;|…)[:alnum:]{1}"," ",1,true,false,false) ' Vloženie chýbajúcej medzery za bodkočiarku a výpustku
kolko=kolko+Vloz_hladanim(",[:alpha:]{1}"," ",1,true,false,false ' Vloženie chýbajúcej medzery medzi čiarku a text
kolko=kolko+Vloz_hladanim("[^0-9],[:alnum:]{1}"," ",2,true,false,false) ' Vloženie chýbajúcej medzery za čiarku, ak to nie je desatinná čiarka
endif
f_Vloz_Interpunkcia_Medzera=kolko
end function
REM Makro pre celkové formátovanie dokumentu
sub Formatuj_dokument
dim kolko as long
' Ak nie je vybraný iný profil, nastaví sa defaultný profil
if Profily_funkcie.JP_aktualny_profil="" then Profily_funkcie.JP_aktualny_profil="Default"
' Načítame parametre
Citaj_definiciu_profilu
Init ' Inicializácia hlavných premenných (Dokument, NBSP, WJ, JazykDokumentu, …)
' Zámena troch bodiek
kolko=rozne.f_Tri_bodky(iTri_Bodky_2, iTri_Bodky_3)
' NBSP pred výpustku a nastavenie zliatkov
kolko=rozne.f_Rozne_zameny(JP_priznaky_formatovania(16), iFi_2)
' Špeciálne formátovanie – Vlož Word Joiner za .!? (náhrada .. za .WJ, !! za !WJ, ?? za ?WJ)
if JP_priznaky_formatovania(19)=1 then kolko=kolko+rozne.Vloz_WJ_za_bodku
' Poradie úprav pri medzerách je dôležité, aby sa urobili všetky:
' Najrpv treba vymazať viacnásobné a nadbytočné medzery
' Potom treba vložiť chýbajúce medzery
' Nakoniec treba zamieňať za NBSP, lebo niektoré z vložených sa pritom môžu zameniť
' Odstránenie nadbytočných medzier. Poradie parametrov:
' viacnasobne – odtsránenie viacnásobných medzier v strede dokumentu
' odseky – odstránanie viacnásobných medzier na začiatku
' konce – a na konci odseku
' zatvorky – odstránenie medzery medzi zátvorkou a textom
' uvodzovky – odstránenie medzery medzi úvodzovkou a textom
' znamienka – odstránenie medzery medzi znamienkami a textom
' tribodky – odstránenie medzery pred výpustkou
' sp_nbsp_zac – náhrada SP za NBSP na začiatku odseku (tieto NBSP sa nemažú)
kolko=kolko+f_Viacnasobna_Medzera(JP_priznaky_formatovania(5),_
JP_priznaky_formatovania(6),_
JP_priznaky_formatovania(7),_
JP_priznaky_formatovania(8),_
JP_priznaky_formatovania(9),_
JP_priznaky_formatovania(10),_
JP_priznaky_formatovania(11),_
JP_priznaky_formatovania(17))
' Odstránenie prázdnych odsekov
if JP_priznaky_formatovania(12)=1 then kolko=kolko+f_Prazdny_odsek
' Vloženie chýbajúcej medzery pri znakoch bodky a (alebo) interpunkcie
kolko=kolko+f_Vloz_Interpunkcia_Medzera(JP_priznaky_formatovania(13), JP_priznaky_formatovania(15))
' Náhrada SP za NBSP podľa definičných súborov
if JP_priznaky_formatovania(1)=1 then kolko=kolko+f_Nezalomitelne_Spojky(iNBSP1)
' Náhrada SP za NBSP v číslach
if JP_priznaky_formatovania(3)=1 then kolko=kolko+f_Nezalomitelne_Cisla(iNBSP3)
' Náhrada SP za NBSP medzi číslom a mernou jednotkou
if JP_priznaky_formatovania(2)=1 then kolko=kolko+f_Nezalomitelne_Jednotky(iNBSP2)
' Vloženie NBSP do skratiek typu a. s.
if JP_priznaky_formatovania(14)=1 then kolko=kolko+f_skratky
' Zámena nesprávnych WJ za NBSP na konci riadku
if JP_priznaky_formatovania(4)=1 then kolko=kolko+rozne.WJ_za_NBSP_na_konci_riadku
' Špeciálne formátovanie – Vymaž Word Joiner za .!?
if JP_priznaky_formatovania(20)=1 then kolko=kolko+rozne.Zrus_WJ_za_bodkou
' Zámena spojovníkov za typografické spojovníky
if JP_priznaky_formatovania(18)=1 then kolko=kolko+rozne.Vymen_spojovniky
VypisSpravu(11, trim(str(kolko)))
end sub
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