Makrá v OpenOffice.org – definícia a nastavenie znakových štýlov

Július Pastierik  /  10. 11. 2010, 00:00

Musíte vo svojich dokumentoch používať znakové štýly pre šikmé a tučné písmo? Naprogramujte si makro, ktoré ich vytvorí a automaticky nimi označí príslušné znaky v dokumente.

Pri odovzdávaní podkladov na ďalšie spracovanie (hlavne v DTP programoch) častokrát potrebujete, aby ste používali znakové štýly pre šikmé a tučné písmo a, samozrejme, príslušné písmo mali nimi aj označené. Pretože počas vlastného písania sa tieto štýly aplikujú pomerne pracne (stačí si predstaviť, že okrem zmeny písma musíte zmeniť aj štýl), je výhodnejšie, ak si na tieto účely pripravíte makro, ktoré to urobí za vás na „jeden klik“.

Pri vlastnej definícii štýlov musíme, samozrejme, ošetriť prípad, ak existujú, čím umožníme makro spustiť v jednom a tom istom dokumente viackrát. Pre jednoznačnosť a jednoduchosť vytvoríme tri štýly – „Kurziva“, „Tucne“ a „TucnaKurziva“.

Pri vlastnom označovaní (toto, samozrejme, platí aj pre prípadné manuálne označovanie) budeme hľadať písmo, ktoré jednak spĺňa podmienku, že je tučné alebo šikmé a zároveň toto písmo nebude mať nastavený znakový štýl. Týmto ošetríme prípady, keď si ho v dokumente nastavíte manuálne. Z tejto podmienky však zároveň vyplýva postupnosť hľadania – najprv musíme vyhľadať písmo, ktoré je tučné a šikmé zároveň, aby sme mu priradili správny štýl a až potom samostatné šikmé a samostatné tučné písmo (tu už na poradí nezáleží).

To by pre uvedenie problematiky stačilo a preto teraz už môžeme uviesť vlastný zdrojový kód makier. Podotýkame, že pre spustenie stačí napokon volať procedúru „Nastav_Styly“.

dim sPopis$, sNadpis$



REM Funkcia pre zistenie jazyka OO.o

function Jazyk_OOo as string

 dim oConfigProvider, oMasterKey

 dim oNodePath()

 

 oNodePath=array(Vytvor_Property("nodepath", "org.openoffice.Setup/L10N/"))

 oConfigProvider=createUnoService("com.sun.star.configuration.ConfigurationProvider")

 oMasterKey=oConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", oNodePath())

 Jazyk_OOo=left(oMasterKey.getByName("ooLocale"),2) '"sk", "cs", ...

end function



REM Procedúra pre načítanie vypisovaných textov

Sub Set_jazyk_textov (sNazov$)

 dim sRiadok$, sPremenna$, sDefinicia$

 dim rovna%

 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru



 on error resume next

 

 if fileexists(sNazov) then ' Ak lokalizačný súbor existuje, tak načítame definície do premenných

  sf=createUnoService("com.sun.star.ucb.SimpleFileAccess")

  inStream=sf.openFileRead(sNazov) ' Otvorenie definičného súboru

  inFile=createUnoService("com.sun.star.io.TextInputStream")

  inFile.InputStream=inStream

  inFile.Encoding="UTF-8" ' lokalizačný súbor musí byť v UTF-8, inak nebude dobrá diakritika

  

  Do While not inFile.IsEOF

   sRiadok=inFile.readLine ' Načítanie riadku zo súboru

   rovna=instr(sRiadok,"=")

   if rovna<>0 then

    sPremenna=trim(left(sRiadok,rovna-1)) ' Budeme ignorovať medzery

    sDefinicia=trim(right(sRiadok,len(sRiadok)-rovna))

    select case sPremenna

     case "popis"

      sPopis=sDefinicia

     case "nadpis"

      sNadpis=sDefinicia

    end select

   end if

  loop

  ' Zatvorenie definičného súboru

  inStream.closeInput

  inFile.closeInput

 end if

end sub



REM Vytvorenie "PropertyValue" štruktúry

function Vytvor_Property(sNazov$, Hodnota) as com.sun.star.beans.PropertyValue

 dim oPropertyValue as New com.sun.star.beans.PropertyValue

 oPropertyValue.Name=sNazov

 oPropertyValue.Value=Hodnota

 Vytvor_Property()=oPropertyValue

end function



REM Vytvorenie znakových štýlov (ak neexistujú)

sub Vytvor_Znakovy_Styl(sNazov_Stylu$ as string, oParametre())

 dim i%

 dim oSkupinyStylov, oStyl, oZnakoveStyly

 

 oSkupinyStylov=ThisComponent.StyleFamilies ' Skupiny štýlov

 oZnakoveStyly=oSkupinyStylov.getByName("CharacterStyles") ' Znakové štýly

 if oZnakoveStyly.HasByName(sNazov_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(sNazov_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 Šikmé písmo

 oParametre()=array(Vytvor_Property("CharWeight", com.sun.star.awt.FontWeight.NORMAL), _

                    Vytvor_Property("CharPosture", com.sun.star.awt.FontSlant.ITALIC))

 Vytvor_Znakovy_Styl("Kurziva", oParametre()) ' Vlastné vytvorenie znakového štýlu "Kurziva"

 

 REM Tučné písmo

 oParametre()=array(Vytvor_Property("CharWeight", com.sun.star.awt.FontWeight.BOLD), _

                    Vytvor_Property("CharPosture", com.sun.star.awt.FontSlant.NONE))

 Vytvor_Znakovy_Styl("Tucne", oParametre()) ' Vlastné vytvorenie znakového štýlu "Tucne"

 

 REM Tučné šikmé písmo

 oParametre()=array(Vytvor_Property("CharPosture", com.sun.star.awt.FontSlant.ITALIC), _

                    Vytvor_Property("CharWeight", com.sun.star.awt.FontWeight.BOLD))

 Vytvor_Znakovy_Styl("TucnaKurziva", oParametre()) ' Vlastné vytvorenie znakového štýlu "TucnaKurziva"

end sub



REM Vyhľadanie šikmého a tučného písma a nastavenie príslušného štýlu

Sub Nastav_Styly

 Dim oDokument, oHladaj, oNasiel

 Dim oAtributy()

 dim sSubor$, kde$

 

 Definuj_Znakove_Styly ' Vytvorenie znakových štýlov pre šikmé, tučné a tučné šikmé písmo

 

 oDokument=ThisComponent

 oHladaj=oDokument.createReplaceDescriptor

 oHladaj.SearchRegularExpression=True ' Hľadáme pomocou regulárnych výrazov

 oHladaj.SearchString = ".*" ' Regulárny výraz pre všetky znaky

 oHladaj.searchStyles=True ' Hľadáme štýly

 

 ' Musíme hľadať najprv tučné šikmé písmo, inak by sme mu priradili iný štýl (šikmé/tučné – podľa toho, čo by sme hľadali skôr)

 ' Hľadáme tučné šikmé písmo

 Atributy()=array(Vytvor_Property("CharWeight", com.sun.star.awt.FontWeight.BOLD), _

                  Vytvor_Property("CharPosture", com.sun.star.awt.FontSlant.ITALIC))

 oHladaj.SetSearchAttributes(Atributy())

 oNasiel=oDokument.findFirst(oHladaj) ' Hľadáme od prvého výskytu tučného šikmého písma od začiatku dokumentu

 Do While NOT isNull(oNasiel) ' Pokiaľ sme niečo našli

  if oNasiel.CharStyleName="" then oNasiel.CharStyleName="TucnaKurziva" ' Ak nie je nastavený žiaden znakový štýl, nastavíme štýl "TucnaKurziva"

  oNasiel=oDokument.findNext( oNasiel.getEnd(), oHladaj) ' Hľadanie ďalšieho výskytu tučného šikmého písma

 Loop

 

 ' Hľadáme šikmé písmo

 Atributy()=array(Vytvor_Property("CharPosture", com.sun.star.awt.FontSlant.ITALIC))

 oHladaj.SetSearchAttributes(Atributy())

 oNasiel=oDokument.findFirst(oHladaj) ' Hľadáme od prvého výskytu šikmého písma od začiatku dokumentu

 Do While NOT isNull(oNasiel) ' Pokiaľ sme niečo našli

  if oNasiel.CharStyleName="" then oNasiel.CharStyleName="Kurziva" ' Ak nie je nastavený žiaden znakový štýl, nastavíme štýl "Kurziva"

  oNasiel=oDokument.findNext( oNasiel.getEnd(), oHladaj) ' Hľadanie ďalšieho výskytu šikmého písma

 Loop

 

 ' Hľadáme kolmé tučné písmo

 Atributy()=array(Vytvor_Property("CharWeight", com.sun.star.awt.FontWeight.BOLD))

 oHladaj.SetSearchAttributes(Atributy())

 oNasiel=oDokument.findFirst(oHladaj) ' Hľadáme od prvého výskytu tučného písma od začiatku dokumentu

 Do While NOT isNull(oNasiel) ' Pokiaľ sme niečo našli

  if oNasiel.CharStyleName="" then oNasiel.CharStyleName="Tucne" ' Ak nie je nastavený žiaden znakový štýl, nastavíme štýl "Tucne"

  oNasiel=oDokument.findNext( oNasiel.getEnd(), oHladaj) ' Hľadanie ďalšieho výskytu tučného písma

 Loop

 sPopis="Znakové štýly nastavené."

 sNadpis="Nastavenie štýlov kurzíva, tučné"

 

 kde=basiclibraries.getLibraryLinkURL("JP_kurziva_tucne") ' Adresár, kde je rozšírenie nainštalované

 sSubor=left(kde,len(kde)-10)+"jp_kurziva_tucne_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou

 Set_jazyk_textov(sSubor)

 msgbox (sPopis,0,sNadpis)

End Sub

Neprehliadnite: