Makrá v OpenOffice.org – programovo lokalizované dialógové okná (4)

Július Pastierik  /  26. 05. 2010, 00:00

V poslednom pokračovaní návodov o jazykovo lokalizovaných makrách si uvedieme zvyšné funkcie a procedúry pre makro, ktoré spočítava znaky v dokumente a vo vybranej textovej oblasti.

 

Naposledy sme si uviedli iba procedúru, pomocou ktorej sme jazykovo lokalizovali dialógové okno zo súborov a vypisovali spočítané slová, znaky a ich prepočet na normostrany a autorské hárky. Makro by však nebolo úplné bez ostatných funkcií a definícií premenných, ktoré preto dnes uvádzame.

dim medzery, medzery_regularne as string ' Oddeľovacie znaky medzi slovami
dim oddelovac_slov as string ' Znak, ktorý sa považuje za ukončovač slova
dim nepocitane_znaky as string ' Znaky, ktoré sa nikdy nepočítajú
dim normo_strana as single ' Počet znakov na normostranu
dim autorsky_harok as single ' Počet normostrán na jeden AH

dim Dokument, Hladaj, vyber as object

sub init_znaky
 medzery=chr(&H20)+chr(&HA0)+chr(&H09) ' Space, Hard space, Tab
 medzery_regularne="("+chr(&H20)+"|"+chr(&HA0)+"|"+chr(&H09)+")"
 oddelovac_slov=medzery+chr(&H0A)+chr(&H0D) ' Medzery, CR, LF
 oddelovac_slov=oddelovac_slov+"-"+"/"+"." ' Ak je potrebne pocitat napr. Firedk-Mistek za dve slova, potom aj pomlcka
 ' alebo lomitko a bodka napr. pre http odkazy
 nepocitane_znaky=chr(&H0A)+chr(&H0D) ' CR, LF
 normo_strana=1800 ' Počet znakov na normostranu
 autorsky_harok=20 ' Počet normostrán na autorský hárok
 Dokument=ThisComponent
 Hladaj=Dokument.createSearchDescriptor()
 vyber=dokument.getCurrentSelection() ' aktuálny vyber
end sub

REM Spočíta počet výskytov reťazca Co
function Spocitaj_hladanim(Co as string, Regularne, Cele_slova, Velke_pismena as Boolean) as long
 dim nasiel as object
 dim kolko as long
 Hladaj.searchString=Co
 Hladaj.SearchRegularExpression=Regularne
 Hladaj.SearchWords=Cele_slova
 Hladaj.SearchCaseSensitive=Velke_pismena
 kolko=0
 nasiel = Dokument.findFirst(Hladaj)
 Do While NOT isNull(nasiel)
  if len(nasiel.String)>0 then
   kolko=kolko+1
  end if
  nasiel = Dokument.findNext( nasiel.End, Hladaj)
 Loop
 Spocitaj_hladanim=kolko
end function

function Jazyk_OOo as string
 dim ConfigProvider, MasterKey as object
 dim NodePath(0) as new com.sun.star.beans.PropertyValue
 dim jazyk as string
 
 NodePath(0).Name = "nodepath"
 NodePath(0).Value = "org.openoffice.Setup/L10N/"
 
 ConfigProvider = createUnoService("com.sun.star.configuration.ConfigurationProvider")
 MasterKey = ConfigProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", NodePath())
 Jazyk_OOo = MasterKey.getByName("ooLocale") '"sk", "cs", ...
end function

REM Prevod reálneho čísla na reťazec (2 desatinné miesta)
function single_2_string (cislo as single) as string
 dim pom, cela, desatinna as string
 dim kde as long
 
 if cislo>0.10 then ' Pri menších číslach zaokrúhlime na 0, lebo funkcia str() potom dáva exponenciálny tvar E-02
  pom=trim(str(cislo))
 else
  pom="0,00"
 endif
 
 kde=Instr(pom,",") ' Vyhľadáme desatinnú čiarku
 if kde=0 then
  kde=Instr(pom,".") ' Ak nie je desatinná čiarka, vyhľadáme desatinnú bodku
 endif
 cela="0"
 desatinna="00"
 if kde>0 then
  cela=left(pom,kde-1) ' Vybranie celej časti, je desatinná čiarka
 else
  cela=pom ' Vybranie celej časti, nie je desatinná čiarka
 endif
 if kde>0 then ' Ak je desatinná čiarka, tak spracujeme desatinnú časť
  kde=len(pom)-kde
  if kde>0 then
   desatinna=right(pom,kde) ' Vybranie desatinnej časti
  endif
 endif
 kde=len(desatinna)
 select case kde ' Nastavenie desatinnej časti na dve desatinné miesta
  case 0
   desatinna="00"
  case 1
   desatinna=desatinna+"0"
  case else
   desatinna=left(desatinna,2)
 end select
 
 single_2_string=cela+","+desatinna ' Výsledný reťazec (nastavujeme desatinnú čiarku)
end function

 

Neprehliadnite: