Archív Inet.sk Pôvodný autor: Július Pastierik
08. 06. 2011 o 00:00 3244x

Makrá v OpenOffice.org: Typografické úpravy textu (1)

Typografické úpravy textu nie sú štandardnou súčasťou kancelárskych balíkov, hoci sa používajú aj v oblasti typografie. Preto si v nasledujúcich dieloch seriálu o programovaní makier v OpenOffice.org ukážeme sadu nástrojov, pomocou ktorých dokážete takéto úpravy vykonávať.
Makrá v OpenOffice.org: Typografické úpravy textu (1)

 

Hoci kancelársky balík nie je určený na typografiu, používa sa aj na tieto účely a, či sa nám to páči alebo nie, častokrát musíme sami takéto úpravy používať. Na druhej strane môže byť zdrojový text z OpenOffice.org výborným podkladom pre profesionálne DTP programy, ak ho vhodne typograficky predpripravíme – vymažeme viacnásobné medzery, vložíme nezalomiteľné medzery, nastavíme znakové štýly atď.

V nasledujúcich dieloch seriálu o programovaní makier si preto ukážeme komplexné rozšírenie pre typografické úpravy. Pretože rozsah procedúr a funkcií potrebných pre tieto účely je veľmi veľký, nielenže tieto funkcie sú rozdelené do viacerých modulov v rámci rozšírenia, ale aj seriál bude rozdelený do mnohých častí, aby ste postupne mohli vniknúť nielen do problematiky programovania, ale aj toho, čo všetko sa pri takýchto úpravách požaduje (pravdaže, seriál si v tomto smere nemôže klásť za cieľ uvedenie úplne všetkých požiadavok).

V dnešnom dieli začneme s uvádzaním modulu „Formatovanie_funkcie“, pričom si uvedieme deklaráciu spoločných premenných a všeobecné funkcie, ktoré budeme používať v ďalších funkciách a makrách. Pravdaže, pri tomto postupe musíme niekedy uviesť niektorú funkciu skôr, ako vysvetlíme, na čo je vlastne určená.

REM Definície spoločných premenných sú úplne pred definíciou podprogramov
dim Dokument, Vymena, Hladaj as object
dim NBSP$, TAB$, WJ$, JazykDokumentu$
dim iNBSP1%, iWJ1%, iNBSP2%, iWJ2%, iNBSP3%, iWJ3%, iTri_Bodky_1%, iTri_Bodky_2%, iTri_Bodky_3%
dim iFi_1%, iFi_2%
dim JP_priznaky_formatovania(20) as integer

REM Inicializácia spoločných premenných
sub Init
 Dokument=ThisComponent
 Vymena=Dokument.createReplaceDescriptor()
 Hladaj=Dokument.createSearchDescriptor()
 NBSP=chr$(&HA0) ' Nezalomiteľná medzera – hexadecimálny kód A0
 TAB=chr$(&H09) ' Tabelátor – hexadecimálny kód 09
 WJ=chr$(&H2060) ' Word Joiner – hexadecimálny kód 2060
 ViditelnyKurzor=Dokument.getCurrentController().getViewCursor() ' Aktuálna pozícia kurzoru v texte
 JazykDokumentu=ViditelnyKurzor.CharLocale.Language ' Aktuálny jazyk dokumentu
end sub

REM Výmena reťazca Co za reťazec Za
function Vymen(Co, Za as string, Regularne, Cele_slova, Velke_pismena as Boolean) as long
 Vymena.SearchString=Co ' Čo hľadám
 Vymena.ReplaceString=Za ' Za čo mením
 Vymena.SearchRegularExpression=Regularne ' True=regulárne výrazy
 Vymena.SearchWords=Cele_slova ' True=iba celé slová
 Vymena.SearchCaseSensitive=Velke_pismena ' True=rozoznávenie veľkosti písmen
 Vymen=Dokument.replaceAll(Vymena) ' Vlastná výmena, výsledok je počet výmen
end function

REM Vlastná výmena reťazca Co za reťazec Za vo vnútri reťazca V_Com
function Zamen_Vo_Vnutri (V_Com, Co, Za as string) as string
 dim pom$ as string
 dim i, j as long
 pom=V_Com ' V čom hľadám
 i=instr(V_Com,Co) ' Nájdenie polohy čo hľadáme
 j=len(V_Com)-i-len(Co)+1 ' Dĺžka zvyšku pôvodného reťazca za nájdenou časťou
 if i>0 then ' Ak sme našli
  pom=left(V_Com,i-1)+Za ' Ľavá časť plus za čo zamieňame
  if j>0 then ' Ak bol nejaký zvyšok za nájdenou časťou, pridáme aj tú
   pom=pom+right(V_Com,j)
  end if
 end if
 Zamen_Vo_Vnutri=pom
end function

REM Vlastná výmena reťazca Co za reťazec Za vo vnútri reťazca V_Com
function Zamen_All_Vo_Vnutri (V_Com, Co, Za as string) as string
 dim pom$, pomV$ as string
 dim i, j as long
 pom=V_Com ' V čom hľadám
 pomV=V_Com ' Pomocný výsledok
 do
  i=instr(pomV,Co) ' Nájdenie polohy čo hľadáme
  j=len(pomV)-i-len(Co)+1 ' Dĺžka zvyšku pôvodného reťazca za nájdenou časťou
  if i>0 then ' Ak sme našli
   pom=left(pomV,i-1)+Za ' Ľavá časť plus za čo zamieňame
   if j>0 then ' Ak bol nejaký zvyšok za nájdenou časťou, pridáme aj tú
    pom=pom+right(pomV,j)
   end if
  end if
  pomV=pom ' Výsledok po zámene
 loop until i=0 ' Hľadanie opakujeme pre všetky vnútorné výskyty
 Zamen_All_Vo_Vnutri=pomV
end function

REM Výmena vnútorného reťazca Co za reťazec Za hľadaním reťazca V_Com
function Vymen_hladanim(V_Com, Co, Za as string, Regularne, Cele_slova, Velke_pismena) as long
 dim nasiel as object
 dim kolko as long
 Hladaj.searchString=V_Com
 Hladaj.SearchRegularExpression=Regularne
 Hladaj.SearchWords=Cele_slova
 Hladaj.SearchCaseSensitive=Velke_pismena
 kolko=0 ' Počet nájdených výskytov
 nasiel = Dokument.findFirst(Hladaj) ' Hľadanie prvého výskytu v dokumente
 Do While NOT isNull(nasiel) ' Pokiaľ nájdeme (not nenájdenie)
  if len(nasiel.String)>0 then ' Ak sme vôbec niečo hľadali
   nasiel.String=Zamen_Vo_Vnutri(nasiel.String,Co,Za) ' Vlastná zámena
   kolko=kolko+1 ' Počet nájdených výskytov
  end if
  nasiel = Dokument.findNext( nasiel.End, Hladaj) ' Hľadanie ďalšieho výskytu v dokumente
 Loop
 Vymen_hladanim=kolko ' Počet výmen
end function

REM Výmena vnútorného reťazca Co za reťazec Za hľadaním reťazca V_Com
function Vymen_All_hladanim(V_Com, Co, Za as string, Regularne, Cele_slova, Velke_pismena) as long
 dim nasiel as object
 dim kolko as long
 Hladaj.searchString=V_Com
 Hladaj.SearchRegularExpression=Regularne
 Hladaj.SearchWords=Cele_slova
 Hladaj.SearchCaseSensitive=Velke_pismena
 kolko=0 ' Počet nájdených výskytov
 nasiel = Dokument.findFirst(Hladaj) ' Hľadanie prvého výskytu v dokumente
 Do While NOT isNull(nasiel) ' Pokiaľ nájdeme (not nenájdenie)
  if len(nasiel.String)>0 then ' Ak sme vôbec niečo hľadali
   nasiel.String=Zamen_All_Vo_Vnutri(nasiel.String,Co,Za) ' Vlastná zámena
   kolko=kolko+1 ' Počet nájdených výskytov
  end if
  nasiel = Dokument.findNext( nasiel.End, Hladaj) ' Hľadanie ďalšieho výskytu v dokumente
 Loop
 Vymen_All_hladanim=kolko ' Počet výmen
end function

REM Vyhľadanie reťazca V_Com a na pozíciu Kde do neho vloží reťazec Co
function Vloz_hladanim(V_Com, Co as string, Kde as long, Regularne, Cele_slova, Velke_pismena as Boolean) as long
 dim nasiel as object
 dim kolko, j as long
 dim pom as string
 Hladaj.searchString=V_Com
 Hladaj.SearchRegularExpression=Regularne
 Hladaj.SearchWords=Cele_slova
 Hladaj.SearchCaseSensitive=Velke_pismena
 kolko=0
 nasiel = Dokument.findFirst(Hladaj) ' Hľadanie prvého výskytu v dokumente
 Do While NOT isNull(nasiel)
  if len(nasiel.String)>0 then
   j=len(nasiel.String)-kde ' Veľkosť zvyšku (pravej časti)
   pom=left(nasiel.String,kde)+Co ' Vloženie Co na miesto, kde ho chceme vložiť
   if j>0 then
    pom=pom+right(nasiel.String,j) ' Vloženie zvyšku (pravej časti)
   end if
   nasiel.String=pom ' Vloženie zameneného reťazca do dokumentu
   kolko=kolko+1
  end if
  nasiel = Dokument.findNext( nasiel.End, Hladaj) ' Hľadanie ďalšieho výskytu v dokumente
 Loop
 Vloz_hladanim=kolko
end function

REM Procedúra pre načítanie definície profilu do premenných
sub Citaj_definiciu_profilu
 dim riadok$, premenna$, definicia$, sNazov$
 dim rovna as integer
 dim sf, inStream, inFile ' Pre čítanie z lokalizačného súboru
 
 ' Inicializácia na štandardné štandardné hodnoty
 ' Vkladáme NBSP
 iNBSP1=1
 iWJ1=0
 iNBSP2=1
 iWJ2=0
 iNBSP3=1
 iWJ3=0
 ' Tri bodky zamieňame za výpustku
 iTri_Bodky_1=0
 iTri_Bodky_2=1
 iTri_Bodky_3=0
 ' Zliatky nezamieňame
 iFi_1=1
 iFi_2=1
 
 ' Všetky opravy povolené
 for i=1 to 20
  JP_priznaky_formatovania(i)=1
 next i
 ' WJ na konci riadkov automaticky neopravujeme
 JP_priznaky_formatovania(4)=0
 ' SP za NBSP na začiatku nezameňame
 JP_priznaky_formatovania(17)=0
 ' Špeciálne formátovanie nerobíme
 JP_priznaky_formatovania(19)=0
 JP_priznaky_formatovania(20)=0
  
 on error resume next
 sNazov=inicializacny_subor("Profil_"+Profily_funkcie.JP_aktualny_profil) ' Súbor s definíciou profilu
 
 if fileexists(sNazov) then ' Ak nastavovací 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))
    if left(premenna,12)="OptionButton" then
     i=val(right(premenna,len(premenna)-12)) ' Poradové číslo nastavenia
     JP_priznaky_formatovania(i)=val(definicia)
    else
     select case premenna
      case "NBSP1"
       iNBSP1=val(definicia)
      case "NBSP2"
       iNBSP2=val(definicia)
      case "NBSP3"
       iNBSP3=val(definicia)
      case "WJ1"
       iWJ1=val(definicia)
      case "WJ2"
       iWJ2=val(definicia)
      case "WJ3"
       iWJ3=val(definicia)
      case "Tri_Bodky_1"
       iTri_Bodky_1=val(definicia)
      case "Tri_Bodky_2"
       iTri_Bodky_2=val(definicia)
      case "Tri_Bodky_3"
       iTri_Bodky_3=val(definicia)
      case "Fi_1"
       iFi_1=val(definicia)
      case "Fi_2"
       iFi_2=val(definicia)
     end select
    endif
   end if
  loop
  ' Zatvorenie definičného súboru – namiesto close #subor
  inStream.closeInput
  inFile.closeInput
 endif
 Nezalomitelne_predlozky_funkcie.JP_WJ=(iWJ1=1)
end sub

Novinky a inšpirácie

Z nášho blogu

Prečítajte si novinky, inšpirácie a dôležité informácie zo sveta webhostingu a technológií.

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami Oznamy
21. 10. 2026

Bezpečnostné aktualizácie PHP: Chráňte svoj web pred hrozbami

Vývojársky tím PHP vydal dôležité bezpečnostné záplaty pre všetky oficiálne podporované verzie PHP 8. Na našich serveroch sme nezaváhali ...

Čítať viac
Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás? Oznamy
01. 10. 2026

Gmail končí s funkciou „Odoslať ako“ pre cudzie e-mailové adresy. Čo to znamená pre vás?

Google oznámil, že v januári 2027 zruší v Gmaile funkciu „Odoslať ako“ (Send as) pre e-mailové adresy od iných poskytovateľov. Ak ste si ...

Čítať viac
Večerná „prestávka“ pre server VIP033 Oznamy
25. 09. 2026

Večerná „prestávka“ pre server VIP033

Neustále pracujeme na tom, aby vaše weby bežali hladko, rýchlo a bezpečne. Technológie idú míľovými krokmi vpred a my v Inet.sk s nimi dr...

Čítať viac
Novinky na Inet.sk (09 / 2026) Novinky
09. 09. 2026

Novinky na Inet.sk (09 / 2026)

Posledné mesiace sme v Inet.sk nevenovali len stabilite serverov, ale najmä počúvaniu vašich reálnych skúseností z každodennej praxe. Výs...

Čítať viac

Podpora klientom

Máte ďalšie otázky?

Nezúfajte, pripravili sme pre Vás jednoduché odpovede na najdôležitejšie otázky, ktoré od našich klientov dostávame.

Zistiť viac

Naše výhody

Prečo si nás vybrať?

Našim klientom ponúkame až 30-dňovú záruku vrátenia peňazí.

Sme skutočný slovenský webhosting

Slovenská
firma

Nepatríme pod žiadnu nadnárodnú spoločnosť, sme malá rodinná firma.

Na nás sa môžete kedykoľvek spoľahnúť

Dlhoročné
skúsenosti

Na slovenskom trhu pôsobíme už viac ako 20 rokov, sme overená značka.

Naši prví zákazníci sú stále s nami

Spokojní
zákazníci

Naši zákazníci sú ako naša rodina, preto nám verí už viac ako 1250 klientov.

Maximálna bezpečnosť

Maximálna
bezpečnosť

Chránime Vás pred útokmi i SPAMom. U nás sú Vaše dáta v bezpečí.

Prozákaznícka podpora

Ochotná
podpora

Zakladáme si na individuálnom prístupe, preto Vám vždy radi pomôžeme.

Kvalita a dobrá cena

Férová
cena

Cena pri obnove je rovnaká ako pri objednávke. Nezdražujeme po prvom roku a bez skrytých poplatkov.

U nás sa Vám nič nestratí

Pravidelné
zálohovanie

Vaše dáta zálohujeme každý deň, dostupné sú aj zálohy z pred niekoľkých mesiacov.

Svižný Admin Panel nájdete len u nás

Prehľadný
Admin Panel

Máme rýchly a prehľadný Admin Panel, ktorý zvládne používať naozaj každý.

Správa používateľov

Správa
používateľov

Spravujte svoje projekty bez akýchkoľvek obáv s kolegami alebo externými partnermi.

Máme zľavy pre verných klientov

Vernostné
zľavy

Verní klienti u nás automaticky získavajú 15 % zľavu na každú ďalšiu objednávku.

My Vás nebudeme obmedzovať

Bez
obmedzení

Neobmedzujeme počet databáz, e-mailov, ftp a ani prenos dát.

Hosting pre WordPress

WordPress
na 1 klik

Nainštalujte si obľúbené redakčné systémy rýchlo a jednoducho.

Referencie

Spokojní zákazníci

Pozrite sa, čo o nás povedali naši klienti. Neváhajte a pridajte sa k nám ešte dnes.

Auto 100
Bystricoviny
eCall Slovakia
Filip Jančík
Frost
Merkury Broker
Mi:Su Design
Mesto Nitra
Pro Clienta
Schneider Lekáreň
Vego Marketing
Mesto Zlaté Moravce

Všetky ceny sú uvádzané bez DPH
© 2006 - 2026, Inet.sk, s. r. o., Všetky práva vyhradené

Na našej stránke používame "cookies". Vďaka nim sledujeme návštevnosť, prispôsobujeme reklamu a používateľské nastavenia, čo zlepšuje Váš zážitok z našej stránky. Súhlasíte s ich spracovaním?
Vlastné nastavenia cookies