Medzi ďalšie požadované typografické úpravy patrí možnosť nastavenia či úpravy kerningu znakov. V podstate ide o to, že nie všetky fonty (a to aj platené) majú definovaný kerning pre slovenské či české znaky s diakritikou.
Ďalej sa pomocou vhodnej manuálnej úpravy kerningu dajú v niektorých prípadoch dosiahnuť aj iné typografické úpravy, ako je napr. vymazanie sirôt či vdov. Pravdaže, na takéto úpravy nepostačuje iba nastavenie kerningu, ale niekedy sa musí nastaviť aj šírka znakov. DTP programy umožňujú nastavenie šírky automaticky, v OpenOffice.org si musíme vystačiť s manuálnym nastavením.
Pretože nastavovanie kerningu a šírky znakov je pomerne osobitná záležitosť, príslušné funkcie vložíme do osobitného modulu Kerning_znakov a v dnešnom dieli si ukážeme úvodné funkcie pre hľadanie reťazcov v označenom texte apod.
dim oJP_kerning_Zaciatok, oJP_kerning_Koniec as object ' Odpamätanie začiatku a konca vybraného textu
dim oDlgK as object
REM Makro pre odpamätanie pôvodne označeného textu
sub Odpamataj_vyber
dim kurzor as object
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
oJP_kerning_Zaciatok=kurzor.getstart() ' Odpamätanie začiatku označeného textu
oJP_kerning_Koniec=kurzor.getend() ' Odpamätanie konca označeného textu
end sub
REM Makro pre nastavenie pôvodne označeného textu
sub Nastav_vyber
dim kurzor as object
on error resume next
kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
kurzor.gotoRange(oJP_kerning_Zaciatok,false) ' Skočíme na začiatok pôvodne označeného textu
kurzor.gotoRange(oJP_kerning_Koniec,true) ' a skočením na koniec ho označíme
end sub
REM Makro pre vyhladanie textu v označenom texte
sub Oznac_hladany_text(vsetko, medzery, zalomitelne, nezalomitelne, retazec as long, co as string)
' Význam parametrov (=1):
' vsetko – nastavuje sa pôvodne označený text
' medzery – nastavujú sa všetky medzery
' zalomitelne – nastavuje sa iba znak SP
' nezalomitelne – nastavuje sa iba znak NBSP
' retazec – nastavuje sa reťazec "co"
' co – hladaný reťazec – má význam iba v spojitosti s parametrom retazec
dim dokument, dispatcher, kurzor as object
dim hladaj as string ' Hľadaný reťazec podľa parametrov
dim parametre as long
dim regularne as long
dim args(18) as new com.sun.star.beans.PropertyValue ' Parametre pre hľadanie v označenom texte
parametre=vsetko*10000+medzery*1000+zalomitelne*100+nezalomitelne*10+retazec
regularne=0
select case parametre
case 10000 ' vsetko
Nastav_vyber
exit sub
case 1000 ' medzery
hladaj=" |"+chr$(&HA0) ' nastavenie hľadania SP alebo NBSP
regularne=1
case 100 ' zalomiteľné
hladaj=" " ' nastavenie hľadania SP
case 10 ' nezalomiteľné
hladaj=chr$(&HA0) ' nastavenie hľadania NBSP
case 1 ' reťazec
hladaj=co
case else
Nastav_vyber
exit sub
end select
' Nastavenie nasledujúcich parametrov je z nahrávania makra
args(0).Name = "SearchItem.StyleFamily"
args(0).Value = 2
args(1).Name = "SearchItem.CellType"
args(1).Value = 0
args(2).Name = "SearchItem.RowDirection"
args(2).Value = true
args(3).Name = "SearchItem.AllTables"
args(3).Value = false
args(4).Name = "SearchItem.Backward"
args(4).Value = false
args(5).Name = "SearchItem.Pattern"
args(5).Value = false
args(6).Name = "SearchItem.Content"
args(6).Value = false
args(7).Name = "SearchItem.AsianOptions"
args(7).Value = false
args(8).Name = "SearchItem.AlgorithmType"
args(8).Value = regularne ' 1 – regulárne, 0 – obyčajné hľadanie
args(9).Name = "SearchItem.SearchFlags"
args(9).Value = 71680 ' Hľadá sa v označenom texte (výbere). Pre hľadanie v celom dokumente by muselo byť 65536
args(10).Name = "SearchItem.SearchString"
args(10).Value = hladaj ' Hľadaný reťazec
args(11).Name = "SearchItem.ReplaceString"
args(11).Value = ""
args(12).Name = "SearchItem.Locale"
args(12).Value = 255
args(13).Name = "SearchItem.ChangedChars"
args(13).Value = 2
args(14).Name = "SearchItem.DeletedChars"
args(14).Value = 2
args(15).Name = "SearchItem.InsertedChars"
args(15).Value = 2
args(16).Name = "SearchItem.TransliterateFlags"
args(16).Value = 1024 ' Pri hľadaní rozoznáva veľkosť písmen, inak by muselo byť 1280
args(17).Name = "SearchItem.Command"
args(17).Value = 1
args(18).Name = "Quiet"
args(18).Value = true
dokument=ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(dokument, ".uno:ExecuteSearch", "", 0, args()) ' Vlastné hľadanie – označenie všetkých nájdených znakov
end sub