Makrá v OpenOffice.org: Hypertextové odkazy

Július Pastierik  /  09. 02. 2011, 08:51

Obsahujú textové dokumenty, s ktorými v OpenOffice.org pracujete, hypertextové odkazy, ktoré potrebujete opraviť, vymazať a pod.? Naprogramujte si niekoľko makier, ktoré vám uľahčia prácu.

 

Obzvlášť pri kopírovaní dokumentov z internetu sa v nich vyskytujú hypertextové odkazy, ktoré však nemusia vždy vyhovovať vašim predstavám. Niekedy ich potrebujete jednoducho vymazať, inokedy opraviť a, samozrejme, niekedy potrebujete do dokumentu hypertextový odkaz aj vložiť.

Samozrejme, na toto všetko nájdete v OpenOffice.org aj štandardné nástroje, ktoré však nie vždy vyhovujú, pretože prístup k nim nie je „na jedno kliknutie klik“ a navyše nie vždy spĺňajú vaše predstavy. Ako príklad môžeme použiť odstránenie hypertextového odkazu, ktoré sa dá urobiť jednoducho zmenou formátu (menu „Formát – Východzie formátovanie“). Táto funkcia však zmení nastavenia textu – napríklad ak bol tučný, nastaví ho na obyčajný.

Okrem toho sa môžete stretnúť aj s inými problémami – pri kopírovaní nechtiac vložíte na koniec hypertextového odkazu medzeru a z tohto dôvodu prestane byť funkčný. Na toto nenájdete v OpenOffice.org žiadne riešenie a preto je lepšie, ak si naprogramujete makro, ktoré takéto odkazy dokáže automaticky vyhľadať a opraviť.



Aby bol počet funkcií úplnejší, doplníme ho aj o možnosť vloženia hypertextového odkazu do označeného textu, čím sa práca zrýchli hlavne vtedy, ak pracovné okno „Odkaz“, ktoré sa otvára pomocou menu „Vložiť – Hypertextový odkaz“ považujete za zbytočne zložité. Pre tento účel si nebudeme teraz pripravovať žiadne dialógové okno, ale využijeme štandardnú funkciu „inputbox“ (samozrejme, vypisované texty pripravíme na prípadnú jazykovú lokalizáciu).

 

Rem Funkcia, ktorá vracia jazyk pracovného rozhrania OO.o
function Jazyk_OOo as string
 dim ConfigProvider, MasterKey as object
 dim NodePath(0) as new com.sun.star.beans.PropertyValue
  
 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 = left(MasterKey.getByName("ooLocale"),2) '"sk", "cs", ...
end function

REM Funkcia pre zadanie hypertextového odkazu
function daj_hypertext(retazec as string) as string
 dim jazyk, tt1, tt2 as string
 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
 kde=basiclibraries.getLibraryLinkURL("JP_hypertext") ' Adresár, kde je rozšírenie nainštalované
 REM Nastavenie textu dialógu
 tt1="Zadajte hypertextový odkaz."
 tt2="Hypertextové odkazy"
 sNazov=left(kde,len(kde)-10)+"JP_hypertext_"+Jazyk_OOo+".txt" ' Súbor s jazykovou lokalizáciou
 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)
  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
   riadok = inFile.readLine ' namiesto Line Input #subor, riadok
   rovna=instr(riadok,"=")
   if rovna<>0 then
    premenna=trim(left(riadok,rovna-1)) ' Budeme ignorovať medzery
    definicia=trim(right(riadok,len(riadok)-rovna))
    select case premenna
     case "t1"
      tt1=definicia
     case "t2"
      tt2=definicia
    end select
   end if
  loop
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
 end if
 daj_hypertext=trim(inputbox(tt1,tt2,retazec)) ' Zadanie hypertextového odkazu
end function

REM Funkcia pre označenie textu s rovnakým hypertextovým odkazom. Vracia počet označených znakov –1
function OznacText(Kurzor as object, Odkaz as string) as long
 dim ViditelnyKurzor as object
 dim pocet as long

 ViditelnyKurzor = ThisComponent.getCurrentController().getViewCursor()
 ViditelnyKurzor.gotoRange(Kurzor,false)
 pocet=0
 do
  ViditelnyKurzor.goRight(1,true)
  pocet=pocet+1
 loop while ViditelnyKurzor.HyperLinkURL=Odkaz
 ViditelnyKurzor.goLeft(1,true)
 OznacText=pocet
end function

sub Oprav_HyperText
 dim stary, novy as string
 dim este, opakuj as boolean
 dim Kurzor, ViditelnyKurzor, PovodnyKurzor, Priebeh as object
 
 ViditelnyKurzor = ThisComponent.getCurrentController().getViewCursor()
 PovodnyKurzor=ViditelnyKurzor.getstart() ' Odpamätanie aktuálnej pozície
 Kurzor=StarDesktop.CurrentComponent.Text.CreateTextCursor()
 Kurzor.gotoStart(false)
 stary=""
 novy=""
 kolko=0
 Priebeh=ThisComponent.CurrentController.StatusIndicator ' Indikátor priebehu v spodnej časti pracovného rozhrania OO.o
 Priebeh.start("",ThisComponent.CharacterCount) ' Otvorenie indikátora s nastavením max. hodnoty
 do
  este=kurzor.goRight(1,true) ' Ak sme označili text
  if este then
   if kolko mod 10 = 0 then Priebeh.setValue(kolko) ' Nastavenie aktuálnej hodnoty indikátora priebehu
   if Kurzor.HyperLinkURL<>"" then
    if Kurzor.HyperLinkURL=stary then ' Ak je pôvodné URL zhodné s už otestovaným URL, tak nastavíme nové URL
     pocet=OznacText(Kurzor, stary)
    else ' Ideme opraviť URL
     stary=Kurzor.HyperLinkURL
     pocet=OznacText(Kurzor, stary)
     novy=trim(stary) ' Odstránenie medzier
     do ' Odstránenie medzier %20 na začiatku odkazov
      opakuj=(left(novy,3)="%20")
      if opakuj then novy=trim(right(novy,len(novy)-3))
     loop while opakuj
     do ' Odstránenie medzier %20 na konci odkazov
      opakuj=(right(novy,3)="%20")
      if opakuj then novy=trim(left(novy,len(novy)-3))
     loop while opakuj
     pom=daj_hypertext(novy) ' Zadanie hypertextového odkazu
     if pom<>"" then novy=pom
    end if
    ViditelnyKurzor.HyperLinkURL=novy
    if pocet>1 then kurzor.goRight(pocet,true) ' Ak je počet 1, tak je práve jeden znak a ten je už označený
    kolko=kolko+pocet
   else
    kolko=kolko+1
    stary=""
    novy=""
   end if
   kurzor.CollapseToEnd(false)
  end if
 loop while este
 Priebeh.end() ' Zatvorenie indikátora priebehu
 ViditelnyKurzor.gotoRange(PovodnyKurzor,false)
end sub

sub Nastav_HyperText
 dim novy as string
 dim Kurzor as object
 Kurzor = ThisComponent.getCurrentController().getViewCursor()
 novy=trim(Kurzor.HyperLinkURL)
 if novy="" then
  novy=trim(Kurzor.String)
 endif
 do ' Odstránenie medzier %20 na začiatku odkazov
  opakuj=(left(novy,3)="%20")
  if opakuj then novy=trim(right(novy,len(novy)-3))
 loop while opakuj
 do ' Odstránenie medzier %20 na konci odkazov
  opakuj=(right(novy,3)="%20")
  if opakuj then novy=trim(left(novy,len(novy)-3))
 loop while opakuj
 novy=daj_hypertext(novy) ' Zadanie hypertextového odkazu
 if novy<>"" then Kurzor.HyperLinkURL=novy
end sub

sub Vymaz_HyperText
 dim Kurzor as object
 Kurzor = ThisComponent.getCurrentController().getViewCursor()
 Kurzor.HyperLinkURL=""
end sub

Neprehliadnite: