Július Pastierik / 15. 06. 2011, 00:00
V druhom dieli typografických makier si ukážeme jednu jedinú funkciu – funkciu pre odstraňovanie viacnásobných a nadbytočných medzier. Prečo iba jednu, to uvidíte z rozsahu možností, ktoré obsahuje.
Odstránenie viacnásobných a nadbytočných medzier je základnou požiadavkou typografických úprav. Ide pri nich napr. o to, že na začiatku odseku sa odsadenie, na rozdiel od písacieho stroja, nerobí medzerami. Ďalej sa nemajú vyskytovať medzery medzi zátvorkou a textom, úvodzovkami a textom a pod. Tieto všetky funkcie (podľa nastavených parametrov) rieši nasledujúca funkcia f_Viacnasobna_Medzera:
REM Makro pre odstraňovanie viacnásobných medzier
function f_Viacnasobna_Medzera (viacnasobne, odseky, konce, zatvorky, uvodzovky, znamienka, tribodky, sp_nbsp_zac as integer) as long
' Funkcia odstráni medzery podľa parametrov (ak sa =1, tak platia):
' 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žú)
dim kolko as Long
dim hladany_retazec as string
kolko=0
if sp_nbsp_zac=1 then ' Ak na začiatku odseku chceme zmeniť SP za nemazané NBSP
kolko=kolko+Vymen_All_hladanim("^ *"," ",NBSP,true,false,false) ' Zámena všetkých SP na začiatku odseku za NBSP
endif
if viacnasobne=1 then
kolko=kolko+Vymen(" +"," ",TRUE,false,false) ' Vymazanie viacnásobných SP
kolko=kolko+Vymen("\t\t+",TAB,TRUE,false,false) ' Vymazanie viacnásobných TAB
if sp_nbsp_zac=1 then ' Ak sú na začiatku odseku nemazané NBSP
kolko=kolko+Vymen_All_hladanim("(^[:space:]| |\t)+"+NBSP+"+",NBSP+NBSP,NBSP,true,false,false) ' Vymazanie viacnásobných NBSP vo vnútri textu
else
kolko=kolko+Vymen_All_hladanim(NBSP+NBSP+"+",NBSP+NBSP,NBSP,true,false,false) ' Vymazanie viacnásobných NBSP
endif
kolko=kolko+Vymen(" "+NBSP+" |"+NBSP+" | "+NBSP,NBSP,TRUE,false,false) ' Ak je SP+NBSP+SP, NBSP+SP alebo SP+NBSP, zameníme za NBSP
kolko=kolko+Vymen(" \t |\t | \t","\t",TRUE,false,false) ' Ak je SP+TAB+SP, TAB+SP, SP+TAB, zameníme za TAB
kolko=kolko+Vymen(NBSP+"\t"+NBSP+"|\t"+NBSP+"|"+NBSP+"\t",TAB,TRUE,false,false) ' Ak je NBSP+TAB+NBSP, NBSP+TAB, TAB+NBSP, zameníme za TAB
'Pretože mohli byť absoútne rôzne kombinácie, preventívne ešte raz vymažeme viacnásobné NBSP a TAB
kolko=kolko+Vymen("\t\t+",TAB,TRUE,false,false) ' Vymazanie viacnásobných TAB
if sp_nbsp_zac=1 then ' Ak sú na začiatku odseku nemazané NBSP
kolko=kolko+Vymen_All_hladanim("(^[:space:]| |\t)+"+NBSP+"+",NBSP+NBSP,NBSP,true,false,false) ' Vymazanie viacnásobných NBSP vo vnútri textu
else
kolko=kolko+Vymen_All_hladanim(NBSP+"+",NBSP+NBSP,NBSP,true,false,false) ' Vymazanie viacnásobných NBSP
endif
endif
if odseky=1 then
if sp_nbsp_zac=1 then
kolko=kolko+Vymen("^ *","",TRUE,false,false) ' Vymazanie viacnásobných SP na začiatku odseku
else
kolko=kolko+Vymen("^[:space:]*","",TRUE,false,false) ' Vymazanie viacnásobných SP a NBSP na začiatku odseku
endif
kolko=kolko+Vymen("^\t*","",TRUE,false,false) ' Vymazanie viacnásobných TAB na začiatku odseku
endif
if konce=1 then
kolko=kolko+Vymen("[:space:]*$","",TRUE,false,false) ' Vymazanie viacnásobných SP a NBSP na konci odseku
kolko=kolko+Vymen("\t*$","",TRUE,false,false) ' Vymazanie viacnásobných TAB na začiatku odseku
endif
' Makro naprogramujeme tak, aby čo nejmenejkrát prechádzalo dokumentom
' T.j. najprv si pripravíme kompletný regulárny výraz a až potom budeme prevádzať výmeny
hladany_retazec=""
if uvodzovky=1 then
' Nastavíme si regulárny výraz pre ľavé úvodzovky
hladany_retazec="(„|«|‚"
endif
if zatvorky=1 then
' Nastavíme si regulárny výraz pre ľavé zátvorky
if hladany_retazec<>"" then
' Ak už máme úvodzovky, musíme pridať znak "alebo"
hladany_retazec=hladany_retazec+"|"
else
' Ešte nemáme nič, musíme zadať začiatok regulárneho výrazu
hladany_retazec="("
endif
hladany_retazec=hladany_retazec+"\(|\[|{"
endif
if hladany_retazec<>"" then
' Ešte ukončíme regulárny výraz
hladany_retazec=hladany_retazec+")"
' Ak máme nastavený výraz pre zátvorky alebo úvodzovky, tak vymažeme nadbytočné medzery
' Za nadbytočné medzery považujeme SP, NBSP a TAB
kolko=kolko+Vymen_hladanim(hladany_retazec+" "," ","",true,false,false)
kolko=kolko+Vymen_hladanim(hladany_retazec+NBSP,NBSP,"",true,false,false)
kolko=kolko+Vymen_hladanim(hladany_retazec+TAB,TAB,"",true,false,false)
endif
hladany_retazec=""
if uvodzovky=1 then
' Nastavíme si regulárny výraz pre pravé úvodzovky
hladany_retazec="(“|»|‘"
endif
if zatvorky=1 then
' Nastavíme si regulárny výraz pre pravé zátvorky
if hladany_retazec<>"" then
' Ak už máme úvodzovky, musíme pridať znak "alebo"
hladany_retazec=hladany_retazec+"|"
else
' Ešte nemáme nič, musíme zadať začiatok regulárneho výrazu
hladany_retazec="("
endif
hladany_retazec=hladany_retazec+"\)|\]|}"
endif
if znamienka=1 then
' Nastavíme si regulárny výraz pre interpunkčné znamienka
if hladany_retazec<>"" then
' Ak už máme úvodzovky alebo zátvorky, musíme pridať znak "alebo"
hladany_retazec=hladany_retazec+"|"
else
' Ešte nemáme nič, musíme zadať začiatok regulárneho výrazu
hladany_retazec="("
endif
hladany_retazec=hladany_retazec+"\,|!|\?|;"
endif
if tribodky=1 then
' Nastavíme si regulárny výraz pre tri bodky
if hladany_retazec<>"" then
' Ak už máme úvodzovky, zátvorky alebo znamienka, musíme pridať znak "alebo"
hladany_retazec=hladany_retazec+"|"
else
' Ešte nemáme nič, musíme zadať začiatok regulárneho výrazu
hladany_retazec="("
endif
hladany_retazec=hladany_retazec+"…" ' trojbodka
endif
if hladany_retazec<>"" then
' Ešte ukončíme regulárny výraz
hladany_retazec=hladany_retazec+")"
' Ak máme nastavený výraz pre zátvorky alebo úvodzovky, tak vymažeme nadbytočné medzery
' Za nadbytočné medzery považujeme obyčajné medzery, NBSP a tabelátory
kolko=kolko+Vymen_hladanim(" "+hladany_retazec," ","",true,false,false)
kolko=kolko+Vymen_hladanim(NBSP+hladany_retazec,NBSP,"",true,false,false)
kolko=kolko+Vymen_hladanim(TAB+hladany_retazec,TAB,"",true,false,false)
endif
if znamienka=1 then
kolko=kolko+Vymen_hladanim("([:alpha:]) (:|\.)"," ","",true,false,false) ' Vymazanie SP medzi písmenom a dvojbodkou a bodkou.
kolko=kolko+Vymen_hladanim("([:alpha:])"+NBSP+"(:|\.)",NBSP,"",true,false,false) ' Vymazanie NBSP medzi písmenom a dvojbodkou a bodkou.
kolko=kolko+Vymen_hladanim("([:alpha:])\t(:|\.)",TAB,"",true,false,false) ' Vymazanie TAB medzi písmenom a dvojbodkou a bodkou.
kolko=kolko+Vymen_hladanim("([:digit:]) \.([:space:]|\t)([:alpha:])"," ","",true,false,false) ' Vymazanie prvej SP medzi číslom bodkou medzerou a písmenom.
kolko=kolko+Vymen_hladanim("([:digit:])"+NBSP+"\.([:space:]|"+TAB+")([:alpha:])",NBSP,"",true,false,false) ' Vymazanie prvej NBSP medzi číslom bodkou medzerou a písmenom.
kolko=kolko+Vymen_hladanim("([:digit:])"+TAB+"\.([:space:]|"+TAB+")([:alpha:])",TAB,"",true,false,false) ' Vymazanie prvého TAB medzi číslom bodkou medzerou a písmenom.
Endif
f_Viacnasobna_Medzera=kolko
end function
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