Skočiť na obsah Skočiť na menu

Inet.sk - internetový denník

internetový denník

Makrá v OpenOffice.org 01/2008

Aj v roku 2008 budeme pokračovať v seriáli o makrách pre OpenOffice.org. Tento seriál však nebude vychádzať tak pravidelne, ako doteraz, ale jeho diely budú vznikať podľa potreby používateľov. V prvom dieli sa znovu vrátime k formátovaniu dokumentov, ktoré rozšírime o novú funkciu.


 

V minulom roku sme ukončili pomerne rozsiahlu časť makier, ktoré sa venovali formátovaniu dokumentov. Okrem iného sme urobili makrá, ktoré dokázali vkladať do textu nezalomiteľné medzery za jednoznakové preložky a spojky, medzi akademické tituly a meno, medzi číslice a podobne.

Na základe požiadavok niektorých používateľov sme urobili aj verziu, pomocou ktorej sme dokázali vkladať tzv. pružné nezalomiteľné medzery. V podstate išlo o to, že sme pred obyčajnú medzeru vložili znak „Word Joiner“. Tento znak však nie vždy funguje tak, ako by mal – jednoducho niekedy oddelí predložku či spojku a následný text na dva riadky. Toto správanie je záhadou, ale je to tak.

Našťastie, aj na toto existuje riešenie, ktoré si dnes ukážeme. Spočíva v tom, že vyhľadáme, či nám na konci riadku „náhodou“ nezostal „trčať“ znak „Word Joiner“ aj s medzerou a ak áno, tak ho zameníme za obyčajnú nezalomiteľnú medzeru (znak NBSP).

Pretože musíme hľadať konce riadkov, nezostáva nám nič iné, ako použiť viditeľný kurzor, kde je k dispozícii funkcia skočenia na koniec riadku. Pretože budeme prechádzať textom, bude pri vlastnej oprave pred našimi očami celý text rolovať. Pozor, pri dlhšom texte ma z toho trochu rozbolela hlava, preto odporúčam, aby ste priebeh sledovali iba občas.

Ako obvykle, vlastné makro je okomentované a preto nebudeme venovať osobitnú pozornosť príkazom, ktoré sú tam napísané.

Nesprávne zalomený text pomocou WJ

REM Procedúra hľadá nesprávne zalomenia WJ na konci riadku
REM a nahradí ich znakom NBSP
function WJ_za_NBSP_na_konci_riadku as long

 dim NBSP, WJ as string
 dim Kurzor, Povodny as object
 dim Koniec as boolean
 dim pom as string
 dim kolko as long
 
 kolko=0
 
 NBSP=chr$(&HA0)
 WJ=chr$(&H2060)

 kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
 Povodny=kurzor.getstart() ' Pôvodná poloha kurzoru – aby sme sa mohli vrátiť po prerolovaní celého textu
 kurzor.collapsetostart() ' ak je niečo označené, tak zrušiť výber, aby fungovala funkcia "skoč na koniec riadku"
 kurzor.gotoStart(false) ' Skočíme na začiatok dokumentu

 do ' Kým neprejdeme celý text, tak
  ' Označíme si tri znaky na konci riadku a ak posledné dva sú WJ+medzera, tak je nesprávne zalomenie
  Kurzor.gotoEndOfLine(false) ' skočíme na koniec riadku
  Kurzor.goLeft(3, false)
  Kurzor.goRight(3, true) ' zvýraznenie posledných troch znakov
  if right(Kurzor.string,2) = WJ+" " then
   ' Je to nesprávne zalomenie WJ+medzera
   pom=Kurzor.getstring() ' z posledných troch znakov (písmeno+WJ+medzera)
   pom=left(pom,1)+NBSP ' písmeno+NBSP ' zoberieme iba prvé písmeno a pridáme za to NBSP
   Kurzor.setstring(pom) ' Vlastná zámena
   kolko=kolko+1 ' počet zámen
  endif
  Kurzor.collapseToEnd() ' Zrušíme označený vymenený text
  Kurzor.gotoEndOfLine(false) ' Skočíme na koniec riadku
  Koniec=not(kurzor.goRight(1,false)) ' a posunieme sa o jeden znak ďalej, ak to ide
 loop until Koniec ' Skončíme, ak sa už nemôžeme posunúť
 kurzor.gotoRange(Povodny,false) ' Vrátime sa na pôvodnú polohu
 WJ_za_NBSP_na_konci_riadku=kolko
end function

Oprava zalomenia pomocou NBSP

Pravdaže, v tejto súvislosti vzniká niekedy potreba drobných makier, pomocou ktorých dokážeme vzájomne konvertovať medzery medzi sebou. V nasledujúcom budeme predpokladať, že makrá, ktoré sme uviedli v minulom roku čiastočne používate – konkrétne funkciu „Vymen“ v module „ Formatovanie_funkcie“.

Text s obyčajnými medzerami

REM Makro pre nahradenie nezalomiteľných medzier zalomiteľnými
function f_Zalomitelna_Medzera as long
 Formatovanie_funkcie.init
 f_Zalomitelna_Medzera=Formatovanie_funkcie.Vymen(chr$(&HA0)," ",false,false,false)+_
  Formatovanie_funkcie.Vymen(chr$(&H2060),"",false,false,false)
end function

REM Makro pre nahradenie zalomiteľných medzier nezalomiteľnými NBSP
function f_Nezalomitelna_Medzera_NBSP as long
 Formatovanie_funkcie.init
 f_Nezalomitelna_Medzera_NBSP=Formatovanie_funkcie.Vymen(" ",chr$(&HA0),false,false,false)
end function

REM Makro pre nahradenie zalomiteľných medzier nezalomiteľnými WJ
function f_Nezalomitelna_Medzera_WJ as long
 Formatovanie_funkcie.init
 f_Nezalomitelna_Medzera_WJ=Formatovanie_funkcie.Vymen(" ",chr$(&H2060)+" ",false,false,false)
end function

REM Makro pre zámenu NBSP za WJ
function f_NBSP_za_WJ as long
 Formatovanie_funkcie.init
 f_NBSP_za_WJ=Formatovanie_funkcie.Vymen(chr$(&HA0),chr$(&H2060)+" ",false,false,false)
end function

REM Makro pre zámenu WJ za NBSP
function f_WJ_za_NBSP as long
 Formatovanie_funkcie.init
 f_WJ_za_NBSP=Formatovanie_funkcie.Vymen(chr$(&H2060)+" ",chr$(&HA0),false,false,false)
end function

Text po úprave pre inet.sk

A úplne na záver si ako bonus uveďme jedno krátke makro, pomocou ktorého dokážeme rýchlo odstrániť HTML značky. Pozor, nejedná sa o prevod na text, ale iba o odstránenie príkazov, ktoré sú uzatvorené medzi znakmi „<“ a „>“. V mnohých prípadoch je však takýto prevod postačujúci a nie je problém, aby ste si, povedzme ako domácu úlohu, naprogramovali prevod kódov znakov na vlastné znaky.

HTML kódovaný text

REM Makro, ktoré vymaže príkazy HTML uzatvorené medzi <>
function f_Zrus_HTML as long
 Formatovanie_funkcie.init
 ' Pri hľadaní hľadá všetko, čo je uzatvorené v <>, ale vo vnútri nesmú byť tieto znaky,
 ' lebo by označil aj text, ktorý je napr. pri internetových odkazoch.
 f_Zrus_HTML=Formatovanie_funkcie.Vymen("<[^<^>]*>","",true,false,false,false)
end function

Odstránené HTML príkazy

Na záver ešte poprosím čitateľov, aby mi zasielali mailom veci, ktoré by prípadne chceli vyriešiť pomocou makier. Vopred všetkým ďakujem.

Je Vaša doména voľná?

Platená reklama

Textová reklama

Ako začať podnikať na internete? Nechajte si poradiť. Aký má byť obsah kvalitne www stránky? Tvorba www stránok, Tvorba webu, Redakčný systém - CMS, Prieskumy o nakupovaní na internete, Pôžičky
Kompletné informácie o Kika Banská Bystrica | Čo takto navštíviť Viedeň? | Zaujímavé informácie priamo od zdroja

Newsletter


Copyright © 2002 - 2012 Inet.sk, s. r. o.Všetky práva vyhradenéNeprešlo jazykovou úpravouISSN 1336-1899

Využívame kvalitný webhosting za rozumnú cenu od Webhosting Inet.sk


Bilancia skrývky Fotokniha Fotografie Osobnosti.sk