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

Július Pastierik  /  13. 07. 2011, 00:00

V šiestom pokračovaní typografických makier si ukážeme funkcie pre vlastné nastavovanie kerningu a šírky znakov.

 

Po uvedení úvodných funkcií si v dnešnom pokračovaní seriálu o typografických úpravách textu ukážeme ostatné funkcie modulu Kerning_znakov, teda funkcie pre vlastné nastavenie kerningu a šírky znakov vrátane funkcií, pomocou ktorých budeme otvárať dialógové okno, v ktorom tieto hodnoty nastavíme.



Aby sa nám s príslušnými funkciami pracovalo ľahšie, umožníme, aby dialógové okno mohlo byť otvorené počas práca s textom. Vlastné nastavovanie následne umožníme pre všetky znaky vybraného (označeného) textu, všetky, zalomiteľné alebo nezalomiteľné medzery a pre zadaný text. Posledná možnosť je určená hlavne pre tie prípady, keď najprv manuálne metódou „pokus-omyl“ nastavíme správny kerning medzi určitými znakmi a potom ho na jedno kliknutie dokážeme nastaviť v celom dokumente.

REM Procedúra pre nastavenie kerningu počas definície hodnôt
sub Kerning_Initiated
 dim medzera as long ' Pre získanie číselnej hodnoty z dialógovej premennej "Hodnota"
 dim kurzor as object
 
 Odpamataj_vyber ' Odpamätanie pôvodného výberu
 medzera=val(oDlgK.model.Rozostup.text) ' Hodnota rozostupov
 Oznac_hladany_text(oDlgK.model.Vyber_all.State,oDlgK.model.Vyber_SP_NBSP.State,oDlgK.model.Vyber_SP.State,_
                    oDlgK.model.Vyber_NBSP.State, oDlgK.model.Vyber_text.State,oDlgK.model.Hlad_text.text) ' Označenie textu podľa nastavených parametrov
 kurzor= ThisComponent.currentcontroller.getViewCursor() ' Viditeľný kurzor
 kurzor.CharKerning=medzera ' Zmena rozostupu označených znakov
 Nastav_vyber ' Nastavenie pôvodného výberu
end sub

REM Procedúra pre nastavenie šírky počas definície hodnôt
sub Sirka_Initiated
 dim kurzor as object
 dim retazec as string
 dim koeficient as single
 dim sirka as integer
 
 Odpamataj_vyber ' Odpamätanie pôvodného výberu
 sirka=val(oDlgK.model.Sirka.text)
 koeficient=sirka/100.00

 on error resume next
 
 Oznac_hladany_text(oDlgK.model.Vyber_all.State,oDlgK.model.Vyber_SP_NBSP.State,oDlgK.model.Vyber_SP.State,_
                    oDlgK.model.Vyber_NBSP.State, oDlgK.model.Vyber_text.State,oDlgK.model.Hlad_text.text) ' Označenie textu podľa nastavených parametrov
 kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
 if oDlgK.model.nastav_sirku.State=1 then
  ' Nastavujeme šírku priamo v celom označenom texte
  kurzor.CharScaleWidth=sirka
 else
  ' Nastavujeme koeficient šírky
  if isEmpty(kurzor.CharScaleWidth) then
   ' Je tam rôznosť šírky, musíme nastaviť po znakoch – môžeme iba vtedy, ak je označený celý text
   if oDlgK.model.Vyber_all.State=1 then
    retazec=kurzor.getString() ' Označený text
    kurzor.collapseToStart() ' ak je niečo označené, tak zrušíme výber a skočíme na začiatok
    for i=1 to len(retazec)
     kurzor.goRight(1, true) ' zvýraznenie znaku
     kurzor.CharScaleWidth=kurzor.CharScaleWidth*koeficient
     kurzor.collapseToEnd() ' Zrušíme označený vymenený text
    next i
   endif
  else
   ' Je tam rovnaká šírka, nastavíme všade
   kurzor.CharScaleWidth=kurzor.CharScaleWidth*koeficient
  endif
 endif
 Nastav_vyber ' Nastavenie pôvodného výberu
end sub

REM Makro, ktoré zneviditeľní dialóg – t.j. nastaví, že sa má ukončiť čakací cyklus (volané stlačením klávesy "Koniec" v dialógu)
sub Koniec_Kerning_Initiated
 oDlgK.setVisible(false )' Zneviditeľnenie dialógu
end sub

Rem Volanie dialógu a makra pre nastavenie rozostupov a šírky znakov
sub Kerning_znakov

 dim kurzor as object
 dim medzera, koeficient as long

 DialogLibraries.LoadLibrary("JP_typografia") ' Otvorenie knižnice
  
 Odpamataj_vyber ' Odpamätanie pôvodného výberu

 kurzor= ThisComponent.currentcontroller.getViewCursor() ' viditeľný kurzor
 kurzor.collapseToStart() ' ak je niečo označené, tak zrušíme výber a skočíme na začiatok
 medzera=kurzor.CharKerning ' Kerning prvého znaku výberu
 koeficient=kurzor.CharScaleWidth ' Šírka prvého znaku
 
 Nastav_vyber ' Nastavenie pôvodného výberu
 
 if not isnull(oDlgK) then exit sub ' Ak je okno otvorené, neotvárame druhé
 
 oDlgK=CreateUnoDialog(DialogLibraries.JP_typografia.Dialog_Kerning_znakov) ' Sprístupnenie dialógu
 nazov=inicializacny_subor("JP_Kerning_znakov_"+Jazyk_OOo) ' Súbor s jazykovou lokalizáciou
 Set_jazyk_dialogu(oDlgK, nazov, "Dialog_Kerning_znakov") ' Nastavenie jazyka dialógu
 
 oDlgK.model.Vyber_all.State=1 ' V prepínačoch si prednastavíme, že budeme meniť rozostupy všetkých znakov
 oDlgK.model.Vyber_SP_NBSP.State=0
 oDlgK.model.Vyber_SP.State=0
 oDlgK.model.Vyber_NBSP.State=0
 oDlgK.model.Vyber_text.State=0

 oDlgK.model.Hlad_text.text=""
 oDlgK.model.Rozostup.text=str(medzera) ' Init aktuálneho kerningu
 
 oDlgK.model.nastav_koeficient.State=1 ' V prepínačoch si prednastavíme, že budeme meniť koeficient šírky
 oDlgK.model.nastav_sirku.State=0
 
 oDlgK.model.Sirka.text=str(koeficient) ' Init aktuálnej šírky
 
 oDlgK.setVisible(true) ' zviditeľnenie dialógu – namiesto oDlgK.Execute(), aby sa dalo paralelne pracovať s textom
 while oDlgK.isVisible() ' Cyklus, ktorý čaká na stlačenie klávesy "Koniec" v dialógu (kým je dialóg viditeľný)
  wait 500 ' Časová medzera 500 milisekúnd (0,5 sec) na to, aby sa dalo paralelne pracovať s dokumentom
 wend
 oDlgK.dispose() ' Zatvorenie dialógu
end sub

 

Neprehliadnite: