Nielen pri tvorbe dokumentácie, ale napr. aj pri tvorbe knihy o programovaní je vhodné farebne zvýrazniť syntax programov. Pravdaže, na internete je k dispozícii pre OpenOffice.org napr. rozšírenie Coooder, ktoré však, paradoxne, nedokáže správne zvýrazniť syntax jazyka OpenOffice.org Basic. Navyše, niekedy si chcete vytvoriť vlastný spôsob zvýrazňovania aj pre iné jazyky.
Aby ste to mohli urobiť, ukážeme si v niekoľkých dieloch makrá, ktoré zvýrazňujú syntax tak isto, ako to robí modul OpenOffice.org Basic. V týchto makrách zároveň uvidíte problematiku, ktorú musíte v týchto prípadoch riešiť, takže si následne, podľa svojich potrieb, dokážete vytvoriť makrá aj pre iné programovacie jazyky.
Skôr, ako sa budeme venovať vlastným makrám si musíme stručne naznačiť problematiku vyznačovania syntaxe. Pri tomto postupe musíme vlastne analyzovať riadky programu, aby sme dokázali rozoznať jednotlivé časti, ktoré chceme osobitne zvýrazniť. V prípade jazyka OpenOffice.org Basic sú to kľúčové slová (príkazy, niektoré matematické či logické operátory a pod.), špeciálne znaky (matematické operátory, zátvorky, logické operátory a pod.), čísla (desiatkové alebo hexadecimálne a to celé, desatinné či exponenciálne), reťazce, oddeľovače slov atď.
Pri tomto musíme ďalej pamätať na rôzne špeciálne veci, ako je kľúčové slovo REM, ktoré vyznačuje komentár, ktorý sa (vrátane tohto kľúčového slova) zvýrazňuje inak, ako ostatné kľúčové slová; znak podčiarnika, ktorý môže byť nielen ako súčasť názvu premennej, ale na konci riadku znamená, že príkaz pokračuje na riadku nasledujúcom; časti uzatvorené do párov znakov (reťazce medzi úvodzovky, názvy premenných uzatvorených medzi hranaté zátvorky...), kedy sa inak zvýrazňuje uzatvorený text (napr. reťazec, ktorý má na začiatku aj konci úvodzovku) a inak neuzatvorený (napr. reťazec, ktorému chýba záverečná úvodzovka) atď.
Venujme sa však už vlastným makrám. Aby sme nájdené časti mohli následne farebne označiť, pripravíme si textové štýly, v ktorých nastavíme také farby, aké používa OpenOffice.org Basic. Tieto štýly budeme následne aplikovať na tie analyzované časti textu, ktoré zodpovedajú príslušnému označeniu.
Pred uvedením zdrojových textov makier ešte podotýkame, že pri ich tvorbe boli použité ako inšpirácia makrá Andrewa Pitonyaka, ktoré však neobsahujú úplnú analýzu všetkých možností jazyka OpenOffice.org Basic, neobsahujú všetky farebné zvýraznenia, ktoré používa OpenOffice.org a niektoré časti programového kódu analyzujú nesprávne.
REM Makrá pre farebné označovanie StarOffice (OpenOffice.org) Basic kódu
REM Inšpirácia – makrá Andrewa Pitonyaka
REM Makrá pre definície štýlov
REM Vytvorenie "PropertyValue" štruktúry
function Vytvor_Property(Nazov as String, Hodnota) as com.sun.star.beans.PropertyValue
dim oPropertyValue as New com.sun.star.beans.PropertyValue
oPropertyValue.Name=Nazov
oPropertyValue.Value=Hodnota
Vytvor_Property()=oPropertyValue
end function
REM Vytvorenie znakových štýlov (ak neexistujú)
sub Vytvor_Znakovy_Styl(Nazov_Stylu as string, oParametre())
dim i as integer
dim oSkupinyStylov, oStyl, oZnakoveStyly
oSkupinyStylov=ThisComponent.StyleFamilies ' Skupiny štýlov
oZnakoveStyly=oSkupinyStylov.getByName("CharacterStyles") ' Znakové štýly
if oZnakoveStyly.HasByName(Nazov_Stylu) then exit sub ' Štýl existuje – procedúru ukončíme
oStyl=ThisComponent.createInstance("com.sun.star.style.CharacterStyle")
for i=LBound(oParametre) to UBound(oParametre) ' Pre všetky nastavované parametre
if oParametre(i).Name = "ParentStyle" then ' Ak nastavujeme rodičovský štýl
if oZnakoveStyly.HasByName(oParametre(i).Value) then ' Test, či rodičovský štýl existuje
oStyl.ParentStyle=oParametre(i).Value ' Názov rodičovského štýlu
end if
else
oStyl.setPropertyValue(oParametre(i).Name, oParametre(i).Value) ' Nastavenie ostatných parametrov
end if
next
oZnakoveStyly.insertByName(Nazov_Stylu, oStyl) ' Vloženie štýlu do zoznamu štýlov
end sub
REM Definícia a vytvorenie znakových štýlov
sub Definuj_Znakove_Styly
dim oParametre()
REM Jazyk nastavíme na "žiaden"
dim Ziaden_Jazyk as New com.sun.star.lang.Locale
Ziaden_Jazyk.Country = ""
Ziaden_Jazyk.Language = "zxx"
REM Nastavenie rodičovského štýlu – pomocou neho možno zmeniť font a veľkosť aj ostatných štýlov
REM Tento štýl je možné použiť pri písaní (aby bol zvýraznený kód aspoň fontom),
REM pretože zafarbenie textu sa robí až po jeho výbere
REM a spustení procedúry Formatuj_Vybrany_Text
REM Font "Courier", žiaden jazyk, čierne písmo, nedeliť slová
oParametre() = Array(Vytvor_Property("CharFontName", "Courier"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(0, 0, 0)), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("OOoBasicKod", oParametre()) ' Vlastné vytvorenie rodičovského znakového štýlu "OOoBasicKod"
REM Štýly závislé na rodičovskom štýle pomenujeme s podčiarnikom, aby to bolo zrejmé už z ich názvu
REM Nastavenie štýlu pre príkazy (kľúčové slová) a špeciálne znaky – modré písmo (HTML #000080)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(0, 0, 128), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicPrikazy", oParametre())
REM Nastavenie štýlu pre premenné a konštanty (napr. true) – zelené písmo (HTML #008000)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(0, 128, 0), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicPremenne", oParametre())
REM Nastavenie štýlu pre reťazce a čísla – červené písmo (HTML #FF0000)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(255, 0, 0), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicRetazec", oParametre())
REM Nastavenie štýlu pre neukončené reťazce a názvy v hranatých zátvorlách – tmavočervené písmo (HTML #800000)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(128, 0, 0), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicNeukoncene", oParametre())
REM Nastavenie štýlu pre komentáre – šedé písmo (HTML #808080)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(128, 128, 128), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicKomentar", oParametre())
REM Nastavenie štýlu pre znaky uvedené dvojbodkou a pre otáznik – šedofialové písmo (HTML #624A7C)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(98, 74, 124), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicDvojbodka", oParametre())
REM Nastavenie štýlu pre iné znaky – čierne písmo (HTML #000000)
oParametre() = Array(Vytvor_Property("ParentStyle", "OOoBasicKod"), _
Vytvor_Property("CharLocale", Ziaden_Jazyk), _
Vytvor_Property("CharColor", RGB(0, 0, 0), _
Vytvor_Property("CharNoHyphenation", True))
Vytvor_Znakovy_Styl("_OOoBasicIne", oParametre())
end sub