Makrá v OpenOffice.org 09/2008

Július Pastierik  /  31. 07. 2008, 00:00

V už treťom pokračovaní makier pre prípravu slov do slovenského slovníka si ukážeme časť, kde sú definované globálne premenné a vlastná kontrola zadaného slova.

Na úvod dnešného dielu seriálu o makrách v OpenOffice.org, v ktorom si predstavujeme rozšírenie pre prípravu slov do slovenského slovníka si ukážeme definíciu globálnych premenných (ktoré sme už používali) a funkcie, pomocou ktorých „tvarujeme“ zadané slovo. V podstate sa na to využíva funkcia hľadania a výmeny, pretože podmienky sú definované ako regulárne výrazy. Je to teda praktická ukážka, ako sa dajú využiť takéto funkcie aj na pomerne komplikované účely.

global pfx_N_d(3,0) as string
global pfx_F_d(3,0) as string

global sfx_mz_d(3,0) as string
global sfx_Z_d(3,0) as string
global sfx_U_d(3,0) as string
global sfx_D_d(3,0) as string
global sfx_K_d(3,0) as string
global sfx_M_d(3,0) as string
global sfx_S_d(3,0) as string
global sfx_V_d(3,0) as string
global sfx_A_d(3,0) as string
global sfx_C_d(3,0) as string
global sfx_H_d(3,0) as string
global sfx_B_d(3,0) as string
global sfx_J_d(3,0) as string
global sfx_L_d(3,0) as string
global sfx_O_d(3,0) as string
global sfx_Q_d(3,0) as string
global sfx_Y_d(3,0) as string
global sfx_I_d(3,0) as string
global sfx_P_d(3,0) as string
global sfx_X_d(3,0) as string
global sfx_E_d(3,0) as string
global sfx_W_d(3,0) as string
global sfx_T_d(3,0) as string
global sfx_R_d(3,0) as string
global sfx_mb_d(3,0) as string
global sfx_c_c_d(3,0) as string
global sfx_mo_d(3,0) as string

global pfx_N_p as long
global pfx_F_p as long

global sfx_mz_p as long
global sfx_Z_p as long
global sfx_U_p as long
global sfx_D_p as long
global sfx_K_p as long
global sfx_M_p as long
global sfx_S_p as long
global sfx_V_p as long
global sfx_A_p as long
global sfx_C_p as long
global sfx_H_p as long
global sfx_B_p as long
global sfx_J_p as long
global sfx_L_p as long
global sfx_O_p as long
global sfx_Q_p as long
global sfx_Y_p as long
global sfx_I_p as long
global sfx_P_p as long
global sfx_X_p as long
global sfx_E_p as long
global sfx_W_p as long
global sfx_T_p as long
global sfx_R_p as long
global sfx_mb_p as long
global sfx_c_c_p as long
global sfx_mo_p as long

global def_pfx_sfx as integer
global oDialog_slovnik as object
global nacitana_definicia as boolean

function oNovy_subor()
 dim url as string
 url="private:factory/swriter"
 oNovy_subor=StarDesktop.loadComponentFromURL(url, "_blank", 0, Array())
end function

function fZamen_Vo_Vnutri (V_Com, Co, Za as string) as string
 dim pom as string
 dim i, j as long
 pom=V_Com
 i=instr(V_Com,Co)
 j=len(V_Com)-i-len(Co)+1
 if i>0 then
  pom=left(V_Com,i-1)+Za
  if j>0 then
   pom=pom+right(V_Com,j)
  end if
 end if
 fZamen_Vo_Vnutri=pom
end function

sub kon_zoznam (odokument, slovo, sufix, kolko)
 dim kurzor, nasiel, oVymen as object
 dim pomslovo, co, za as string
 dim i as integer
 
 pomslovo=slovo+" "
 oVymen=odokument.createSearchDescriptor()
 oVymen.SearchRegularExpression=true
 oVymen.SearchWords=false
 oVymen.SearchCaseSensitive=false
 
 kurzor=odokument.currentcontroller.getViewCursor()
 ' Základné slovo
 
 kurzor.gotoStart(false)
 kurzor.setstring(pomslovo)
 kurzor.gotoStart(false)
 
 ' Sufixy
 for i=1 to kolko
  kurzor.gotoStart(false)
  kurzor.setstring(pomslovo)
  kurzor.gotoStart(true)
  oVymen.SearchString=sufix(3,i)+">"
  nasiel=odokument.findFirst(oVymen)
  if NOT isNull(nasiel) then
   co=sufix(1,i)
   za=sufix(2,i)
   if co="" then
    co=nasiel.String
    za=co+sufix(2,i)
   endif
   if right(trim(pomslovo),len(co))=co then
    nasiel.String=fZamen_Vo_Vnutri(nasiel.String,co,za)
   else
    kurzor.setstring("")
   endif
  else
   kurzor.setstring("")
  end if
 next i
end sub

sub spracuj_sufixy(odokument, slovo)
 kon_zoznam(odokument, slovo, array(), 0)
 if oDialog_slovnik.model.sfx_mz.State=1 then kon_zoznam (odokument, slovo, sfx_mz_d, sfx_mz_p)
 if oDialog_slovnik.model.sfx_Z.State=1 then kon_zoznam (odokument, slovo, sfx_Z_d, sfx_Z_p)
 if oDialog_slovnik.model.sfx_U.State=1 then kon_zoznam (odokument, slovo, sfx_U_d, sfx_U_p)
 if oDialog_slovnik.model.sfx_D.State=1 then kon_zoznam (odokument, slovo, sfx_D_d, sfx_D_p)
 if oDialog_slovnik.model.sfx_K.State=1 then kon_zoznam (odokument, slovo, sfx_K_d, sfx_K_p)
 if oDialog_slovnik.model.sfx_M.State=1 then kon_zoznam (odokument, slovo, sfx_M_d, sfx_M_p)
 if oDialog_slovnik.model.sfx_S.State=1 then kon_zoznam (odokument, slovo, sfx_S_d, sfx_S_p)
 if oDialog_slovnik.model.sfx_V.State=1 then kon_zoznam (odokument, slovo, sfx_V_d, sfx_V_p)
 if oDialog_slovnik.model.sfx_A.State=1 then kon_zoznam (odokument, slovo, sfx_A_d, sfx_A_p)
 if oDialog_slovnik.model.sfx_C.State=1 then kon_zoznam (odokument, slovo, sfx_C_d, sfx_C_p)
 if oDialog_slovnik.model.sfx_H.State=1 then kon_zoznam (odokument, slovo, sfx_H_d, sfx_H_p)
 if oDialog_slovnik.model.sfx_B.State=1 then kon_zoznam (odokument, slovo, sfx_B_d, sfx_B_p)
 if oDialog_slovnik.model.sfx_J.State=1 then kon_zoznam (odokument, slovo, sfx_J_d, sfx_J_p)
 if oDialog_slovnik.model.sfx_L.State=1 then kon_zoznam (odokument, slovo, sfx_L_d, sfx_L_p)
 if oDialog_slovnik.model.sfx_O.State=1 then kon_zoznam (odokument, slovo, sfx_O_d, sfx_O_p)
 if oDialog_slovnik.model.sfx_Q.State=1 then kon_zoznam (odokument, slovo, sfx_Q_d, sfx_Q_p)
 if oDialog_slovnik.model.sfx_Y.State=1 then kon_zoznam (odokument, slovo, sfx_Y_d, sfx_Y_p)
 if oDialog_slovnik.model.sfx_I.State=1 then kon_zoznam (odokument, slovo, sfx_I_d, sfx_I_p)
 if oDialog_slovnik.model.sfx_P.State=1 then kon_zoznam (odokument, slovo, sfx_P_d, sfx_P_p)
 if oDialog_slovnik.model.sfx_X.State=1 then kon_zoznam (odokument, slovo, sfx_X_d, sfx_X_p)
 if oDialog_slovnik.model.sfx_E.State=1 then kon_zoznam (odokument, slovo, sfx_E_d, sfx_E_p)
 if oDialog_slovnik.model.sfx_W.State=1 then kon_zoznam (odokument, slovo, sfx_W_d, sfx_W_p)
 if oDialog_slovnik.model.sfx_T.State=1 then kon_zoznam (odokument, slovo, sfx_T_d, sfx_T_p)
 if oDialog_slovnik.model.sfx_R.State=1 then kon_zoznam (odokument, slovo, sfx_R_d, sfx_R_p)
 if oDialog_slovnik.model.sfx_mb.State=1 then kon_zoznam (odokument, slovo, sfx_mb_d, sfx_mb_p)
 if oDialog_slovnik.model.sfx_mo.State=1 then kon_zoznam (odokument, slovo, sfx_mo_d, sfx_mo_p)
 if oDialog_slovnik.model.sfx_c_c.State=1 then kon_zoznam (odokument, slovo, sfx_c_c_d, sfx_c_c_p)

end sub

sub vytvor_zoznam
 dim dokument, kurzor, nasiel, oVymen as object
 dim url, slovo, pomslovo as string
 dim i as integer
 
 slovo=trim(oDialog_slovnik.model.Slovo_slovnika.Text)
 if slovo<>"" then
  url="private:factory/swriter"
  dokument=StarDesktop.loadComponentFromURL(url, "_blank", 0, Array())
  ' Základné slovo
  spracuj_sufixy(dokument, slovo)
  ' Pre všetky prefixy
  if oDialog_slovnik.model.pfx_N.State=1 then
   for i=1 to pfx_N_p
    spracuj_sufixy(dokument, pfx_N_d(2,i)+slovo)
   next i
  endif
  if oDialog_slovnik.model.pfx_F.State=1 then
   for i=1 to pfx_F_p
    spracuj_sufixy(dokument, pfx_F_d(2,i)+slovo)
   next i
  endif
  if oDialog_slovnik.model.spfx_do.State=1 then
   spracuj_sufixy(dokument, "do"+slovo)
   if oDialog_slovnik.model.spfx_ne_do.State=1 then
    spracuj_sufixy(dokument, "nedo"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_na.State=1 then
   spracuj_sufixy(dokument, "na"+slovo)
   if oDialog_slovnik.model.spfx_ne_na.State=1 then
    spracuj_sufixy(dokument, "nena"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_nad.State=1 then
   spracuj_sufixy(dokument, "nad"+slovo)
   if oDialog_slovnik.model.spfx_ne_nad.State=1 then
    spracuj_sufixy(dokument, "nenad"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_o.State=1 then
   spracuj_sufixy(dokument, "o"+slovo)
   if oDialog_slovnik.model.spfx_ne_o.State=1 then
    spracuj_sufixy(dokument, "neo"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_ob.State=1 then
   spracuj_sufixy(dokument, "ob"+slovo)
   if oDialog_slovnik.model.spfx_ne_ob.State=1 then
    spracuj_sufixy(dokument, "neob"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_po.State=1 then
   spracuj_sufixy(dokument, "po"+slovo)
   if oDialog_slovnik.model.spfx_ne_po.State=1 then
    spracuj_sufixy(dokument, "nepo"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_pre.State=1 then
   spracuj_sufixy(dokument, "pre"+slovo)
   if oDialog_slovnik.model.spfx_ne_pre.State=1 then
    spracuj_sufixy(dokument, "nepre"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_pri.State=1 then
   spracuj_sufixy(dokument, "pri"+slovo)
   if oDialog_slovnik.model.spfx_ne_pri.State=1 then
    spracuj_sufixy(dokument, "nepri"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_spolu.State=1 then
   spracuj_sufixy(dokument, "spolu"+slovo)
   if oDialog_slovnik.model.spfx_ne_spolu.State=1 then
    spracuj_sufixy(dokument, "nespolu"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_roz.State=1 then
   spracuj_sufixy(dokument, "roz"+slovo)
   if oDialog_slovnik.model.spfx_ne_roz.State=1 then
    spracuj_sufixy(dokument, "neroz"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_spo.State=1 then
   spracuj_sufixy(dokument, "spo"+slovo)
   if oDialog_slovnik.model.spfx_ne_spo.State=1 then
    spracuj_sufixy(dokument, "nespo"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_u.State=1 then
   spracuj_sufixy(dokument, "u"+slovo)
   if oDialog_slovnik.model.spfx_ne_u.State=1 then
    spracuj_sufixy(dokument, "neu"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_vy.State=1 then
   spracuj_sufixy(dokument, "vy"+slovo)
   if oDialog_slovnik.model.spfx_ne_vy.State=1 then
    spracuj_sufixy(dokument, "nevy"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_vy_y.State=1 then
   spracuj_sufixy(dokument, "vý"+slovo)
   if oDialog_slovnik.model.spfx_ne_vy_y.State=1 then
    spracuj_sufixy(dokument, "nevý"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_z.State=1 then
   spracuj_sufixy(dokument, "z"+slovo)
   if oDialog_slovnik.model.spfx_ne_z.State=1 then
    spracuj_sufixy(dokument, "nez"+slovo)
   endif
  endif
  if oDialog_slovnik.model.spfx_za.State=1 then
   spracuj_sufixy(dokument, "za"+slovo)
   if oDialog_slovnik.model.spfx_ne_za.State=1 then
    spracuj_sufixy(dokument, "neza"+slovo)
   endif
  endif
 endif
end sub

 

Neprehliadnite: