Július Pastierik / 21. 03. 2007, 00:00
V už trinástom dieli piatej časti seriálu o programovaní makier v OpenOffice.org sa znovu vrátime k on-line vkladaniu nezalomiteľných medzier za jednoznakové predložky a spojky.
V rámci formátovania dokumentu má osobitné postavenie vkladanie nezalomiteľných medzier za jednoznakové predložky a spojky, pretože pri týchto máme možnosť ich vkladania priamo počas písania textu, a, pravdaže, aj počas celkového formátovania dokumentu.
Čiastočne sa teda musíme vrátiť k štvrtej časti tohto seriálu, kde sme sa zmieňovanou problematikou zaoberali. Pravdaže, nemá zmysel, aby sme znovu rozoberali všetky podrobnosti, ktoré sme vtedy uviedli a preto sa hneď budeme venovať príslušným makrám.
V zozname modulov si zadefinujeme modul – „Nezalomitelna_predlozky_funkcie“, kde si naprogramujeme príslušné funkcie pre vkladanie nezalomiteľných medzier priamo počas písania textu. Pravdaže, v príslušných funkciách už budeme využívať nastavenia, ktoré sme si nastavili a vybrali podľa nami definovaných používateľských profilov.
Aby sme sa v nových nastaveniach (príznakoch) lepšie orientovali, ešte raz si v krátkosti zopakujme ich význam aj s príslušnými hodnotami. Príznaky sú definované v globálnej premennej „Priznaky_formatovania“, ktorú sme zadefinovali v module „Profily_funkcie“:
Priznaky_formatovania(1) – príznak (=1) vkladania nezalomiteľných medzier za jednoznakovými predložkami a spojkami.
Priznaky_formatovania(2) – znak, ktorý sa vkladá za jednoznakové predložky a spojky (NBSP=1, WJ=2).
Priznaky_formatovania(3) – príznak, či sa má vkladať nezalomiteľná medzera aj za predložku „a“ (=1).
Priznaky_formatovania(4) – príznak, či sa majú nezalomiteľné medzery vkladať za jednoznakové spojky (ak je to povolené) priamo (ON-line) počas písania textu (=1).
Priznaky_formatovania(5) – príznak (=1) vkladania nezalomiteľných medzier za akademické tituly.
Priznaky_formatovania(6) – znak, ktorý sa vkladá za akademické tituly (NBSP=1, WJ=2).
Priznaky_formatovania(7) – príznak (=1) vkladania nezalomiteľných medzier za číslice a dátumy.
Priznaky_formatovania(8) – znak, ktorý sa vkladá za číslice a dátumy (NBSP=1, WJ=2).
Priznaky_formatovania(9) – príznak (=1), či sa majú odstrániť viacnásobné medzery.
Priznaky_formatovania(10) – príznak (=1), či sa majú odstrániť viacnásobné medzery na začiatku a konci odstavcov.
Priznaky_formatovania(11) – príznak (=1), či sa majú odstrániť medzery medzi zátvorkami a textom.
Priznaky_formatovania(12) – príznak (=1), či sa majú odstrániť medzery medzi úvodzovkami a textom.
Priznaky_formatovania(13) – príznak (=1), či sa majú odstrániť medzery medzi interpunkčnými znamienkami a textom.
Priznaky_formatovania(14) – príznak (=1), či sa majú odstrániť prázdne odstavce.
Priznaky_formatovania(15) – príznak (=1), či sa má vložiť medzera medzi bodku a text.
Priznaky_formatovania(16) – príznak (=1), či sa má vložiť medzera medzi dvojbodku a text.
Ale teraz sa už venujme vlastným makrám pre vkladanie nezalomiteľných medzier za jednoznakové spojky a predložky priamo počas ich písania:
global ObsluhaDokumentu, ObsluhaKlavesnice as object
global PosledneSlovo, OddelovaceSlov as string
global Obsluhovat_Klavesnicu as boolean
function JednoznakovePredlozky as string
' Pretože počas písania môžeme zmeniť nastavenie profilu,
' definícia zoznamu predložiek je definovaná ako funkcia
JednoznakovePredlozky="AiIkKoOsSuUvVzZ"
if Profily_funkcie.Priznaky_formatovania(3)=1 then
JednoznakovePredlozky="a"+JednoznakovePredlozky
endif
end function
sub SpustiObsluhuKlavesnice
on error goto next
' Obsluhu klávesnice spustíme iba vtedy, ak vôbec povolili zámenu predložiek
' a zároveň chceme túto zámenu robiť ON-line
Obsluhovat_Klavesnicu=(Profily_funkcie.Priznaky_formatovania(1)=1) and (Profily_funkcie.Priznaky_formatovania(4)=1)
PosledneSlovo = ""
' medzera, nezalomiteľná medzera, tabelátor, CR, LF
OddelovaceSlov=" "+chr(&HA0)+chr(&H09)+chr(&H0A)+chr(&H0D)
' pomlčka, lomítko, bodka, čiarka, výkričník, otáznik, bodkočiarka, trojbodka
OddelovaceSlov=OddelovaceSlov+"-/.,!?;…"
' zátvorky
OddelovaceSlov=OddelovaceSlov+"()[]{}"
if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
' Sme v textovom dokumente, kde chceme nahrádzať medzery
ObsluhaDokumentu = ThisComponent.getCurrentController
ObsluhaKlavesnice = createUnoListener("Klavesnica_","com.sun.star.awt.XKeyHandler")
ObsluhaDokumentu.addKeyHandler(ObsluhaKlavesnice)
endif
end sub
sub UkonciObsluhuKlavesnice
on error goto next
if ThisComponent.supportsService("com.sun.star.text.TextDocument") then
' Sme v textovom dokumente a chceme ukončiť obsluhu klávesnice
ObsluhaDokumentu.removeKeyHandler(ObsluhaKlavesnice)
PosledneSlovo = ""
endif
end sub
function VlozZnak(Retazec as string)
' Na aktuálnu pozíciu v dokumente vložíme reťazec
dim ViditelnyKurzor, AktualnyText, AktualnyKurzor as object
ViditelnyKurzor = ThisComponent.getCurrentController().getViewCursor()
AktualnyText = ThisComponent.getText()
AktualnyKurzor = AktualnyText.createTextCursorByRange(ViditelnyKurzor.getStart())
AktualnyText.insertString(AktualnyKurzor.getStart(), Retazec, true)
end function
function Klavesnica_KeyPressed(StlacenaKlavesa) as boolean
' Obsluha stlačenej klávesy
dim Obsluzena as boolean
'Predpokláme, že nebudeme vkladať nezalomiteľnú medzeru
Obsluzena=False
if instr(OddelovaceSlov, StlacenaKlavesa.KeyChar)<>0 then
' Došli sme na koniec slova
if Obsluhovat_Klavesnicu then
' Ak máme vôbec meniť medzery za nezalomiteľné
if ZistiPredlozku and (StlacenaKlavesa.KeyChar=" ") then
' Je to predložka, ktorá končí zalomiteľnou medzerou - túto nahradíme
if Profily_funkcie.Priznaky_formatovania(2)=1 then
VlozZnak(chr$(&HA0)) ' No Break Space (NBSP)
' Sami sme vložili medzeru - obslúžili sme stlačenú klávesu
Obsluzena=true
else
VlozZnak(chr$(&H2060)) ' Word Joiner (WJ)
' V tomto prípade sa musí ešte vložiť aj zadaná medzera a preto sme neobslúžili stlačenú klávesu
endif
endif
endif
PosledneSlovo=""
else
' Ešte musíme otestovať riadiace znaky, ktoré nebudeme sledovať v zadávanom slove
select case StlacenaKlavesa.KeyChar
case chr$(&H00) to chr$(&H07)
PosledneSlovo=""
case chr$(&H08) ' BS
if len(PosledneSlovo)>0 then
PosledneSlovo=left(PosledneSlovo, len(PosledneSlovo)-1)
else
PosledneSlovo=""
endif
case chr$(&H09) to chr$(&H1F)
PosledneSlovo=""
case chr$(&H20) to chr$(&H7E)
PosledneSlovo=PosledneSlovo+StlacenaKlavesa.KeyChar
case chr$(&H7F) ' CTRL BS
PosledneSlovo=""
case else
PosledneSlovo=PosledneSlovo+StlacenaKlavesa.KeyChar
end select
endif
Klavesnica_KeyPressed=Obsluzena
end function
function Klavesnica_KeyReleased(StlacenaKlavesa) as boolean
' Obsluha pustenej klávesy
Klavesnica_KeyReleased = False
end function
function ZistiPredlozku as boolean
dim JePredlozka as boolean
JePredlozka=false
if len(PosledneSlovo)=1 then
' Ak je to jednoznakové slovo, tak to môže byť predložka
JePredlozka=instr(1,JednoznakovePredlozky, PosledneSlovo, 0)
endif
ZistiPredlozku=JePredlozka
end function
Pravdaže, nesmieme zabudnúť ani na funkcie, ktoré nám zjednodušujú prístup k uvedeným makrám. Na tieto funkcie si zadefinujeme nový modul „Nezalomitelne_predlozky“:
sub Automaticky_Obsluhuj_Klavesnicu
' Procedúra pre automatické spustenie vkladania nezalomiteľných medzier
' ktorú môžeme volať počas otvárania súboru. Spustenie závisí od nastavených
' parametrov v používateľskom profile.
Formatovanie.Nastav_formatovanie
' Podľa aktuálneho profilu sa zistia príznaky
if (Profily_funkcie.Priznaky_formatovania(1)=1) and (Profily_funkcie.Priznaky_formatovania(4)=1) then
Nezalomitelne_predlozky_funkcie.SpustiObsluhuKlavesnice
endif
end sub
sub Obsluhuj_Klavesnicu
' Spustenie automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
Nezalomitelne_predlozky_funkcie.SpustiObsluhuKlavesnice
Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=True
end sub
sub Neobsluhuj_Klavesnicu
' Zastavenie automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=False
Nezalomitelne_predlozky_funkcie.UkonciObsluhuKlavesnice
end sub
sub Povol_Klavesnicu
' Povolenie pozastaveného automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=True
end sub
sub Pozastav_Klavesnicu
' Pozastavenie automatického vkladania bez ohľadu na nastavené parametre v používateľskom profile.
Nezalomitelne_predlozky_funkcie.Obsluhovat_Klavesnicu=False
end sub
Na budúce: Ďalšie funkcie pre formátovanie dokumentu, alebo dávame to čoraz viac dohromady.
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