Július Pastierik / 28. 05. 2008, 00:00
V dnešnom dieli seriálu o makrách sa znovu vrátime k textovým dokumentom a ukážeme si, ako dokážeme nastaviť rozostup medzi znakmi.
Pokiaľ používame OpenOffice.org na písanie kníh či iných podobných publikácií, chceme, aby vyzeral dobre aj z hľadiska estetickej úpravy, ktoré sú overené generáciami našich predkov a ktoré do svojich pravidiel zahrnuli typografi. Medzi takéto náležitosti patrí napríklad aj to, že na konci strany sa nenecháva jeden riadok textu a na začiatku novej strany tiež nie (tzv. siroty a vdovy).
Samozrejme, v OpenOffice.org dokážeme nastaviť, že sa takéto riadky nebudú vyskytovať a to v nastaveniach štýlov odstavcov (záložka „Tok textu“, voľby „Kontrola sirotkov“ a „Kontrola vdov“. Pokiaľ však toto nastavíme, častokrát sa nám stane, že na konci strany zostane prázdny riadok.
Pokiaľ tlačíme dokument na obidve strany papiera (ale nielen vtedy), vzniká nám nový problém – na dvoch susediacich stranách nemusí byť na konci strany text, čo pôsobí rušivo. A práve vtedy môžeme zasiahnuť podobne, ako to robili sadzači pri ručnej sadzbe – zmenením rozostupu medzi znakmi.
Samozrejme, rozostupy medzi znakmi sa dajú tiež nastaviť v štýle odstavca (záložka „Umiestnenie“, nastavenia „Vzdialenosť“). To však platí pre všetky odstavce a netýka sa to iba nastavenia konkrétnej strany. Pokiaľ chceme nastavovať rozostupy pre jeden znak, môžeme ho označiť a pomocou voľby menu „Formát – Znak...“ na záložke „Umiestnenie“ nastaviť tento rozostup.
Ak si však predstavíme, že na jednej strane sú stovky medzier, je to veľmi prácne (hádam viac, ako keď sa robila sadzba ručne). A práve z tohto dôvodu si urobíme makro, pomocou ktorého dokážeme nastaviť rozostup medzi znakmi v označenom texte – a to nielen pre ich zväčšovanie, ale aj zmenšovanie.
Aby sme makro urobili čo najobecnejšie, pripravíme si najprv dialóg, pomocou ktorého nastavíme príslušné parametre – veľkosť rozostupu a množinu znakov, pre ktoré ho chceme použiť. Pretože obvykle nastavujeme rozostup buď medzi všetkými znakmi alebo iba v rámci medzier, do dialógu vložíme štyri prepínacie voľby: „Všetky znaky vo výbere“, „Všetky medzery“, „Iba zalomiteľné medzery“ a „Iba nezalomiteľné medzery“.
Ďalej si v dialógu nastavíme pre vstupnú hodnotu formátovanie (celé čísla), minimálnu a maximálnu hodnotu (-9999 až 9999). Toto nastavenie urobíme preto, aby sme nemuseli zadanú hodnotu špeciálne testovať. Záporné hodnoty rozostupy zmenšujú, štandardný rozostup je hodnota 0 a kladné hodnoty rozostupy zväčšujú. Samozrejme, konkrétne čísla je potrebné vyskúšať osobitne pre každú nastavovanú stranu – v tomto smere sa nedá povedať, aká hodnota je najlepšia.
Vlastné makro tvoria dve funkcie – otvorenie dialógu a nastavenie rozostupov. Makrá sú, ako obvykle, okomentované a preto sa nimi nemusíme hlbšie zaoberať.
REM Makro pre úpravu rozostupov medzi znakmi vo vybranom texte
sub uprav_kerning_znakov(medzera, all, sp_nbsp, nbsp as long)
' Význam parametrov:
' Medzera – veľkosť rozostupu
' all – ak je 1, tak nastavujeme všetky znaky
' sp_nbsp – ak je 1, tak nastavujeme všetky medzery
' nbsp – ak je 1, tak iba nezalomiteľné medzery
' Ak všetky predchádzajúce parametre sú 0, tak sa nastavuje iba zalomiteľná medzera
dim dokument, kurzor as object ' Aktuálny dokument, viditeľný kurzor
dim hladaj as string ' Hľadaný reťazec podľa parametrov
dim args(18) as new com.sun.star.beans.PropertyValue ' Parametre pre hľadanie v označenom texte
if all=0 then
' Ak nenastavujeme všetky znaky, tak
hladaj=" " ' nastavenie hľadaného reťazca na SP
if sp_nbsp=1 then
' Ak hľadáme všetky medzery, tak
hladaj=" |"+chr$(&HA0) ' nastavenie hľadania SP alebo NBSP
else
if nbsp=1 then
' Ak hľadáme iba NBSP, tak
hladaj=chr$(&HA0) ' nastavenie hľadania NBSP
endif
endif
' Nastavenie nasledujúcich parametrov je z nahrávania makra
args(0).Name = "SearchItem.StyleFamily"
args(0).Value = 2
args(1).Name = "SearchItem.CellType"
args(1).Value = 0
args(2).Name = "SearchItem.RowDirection"
args(2).Value = true
args(3).Name = "SearchItem.AllTables"
args(3).Value = false
args(4).Name = "SearchItem.Backward"
args(4).Value = false
args(5).Name = "SearchItem.Pattern"
args(5).Value = false
args(6).Name = "SearchItem.Content"
args(6).Value = false
args(7).Name = "SearchItem.AsianOptions"
args(7).Value = false
args(8).Name = "SearchItem.AlgorithmType"
args(8).Value = 1 ' Budeme hľadať regulárne výrazy
args(9).Name = "SearchItem.SearchFlags"
args(9).Value = 71680 ' Hľadá sa v označenom texte (výbere). Pre hľadanie v celom dokumente by muselo byť 65536
args(10).Name = "SearchItem.SearchString"
args(10).Value = hladaj ' Hľadaný reťazec
args(11).Name = "SearchItem.ReplaceString"
args(11).Value = ""
args(12).Name = "SearchItem.Locale"
args(12).Value = 255
args(13).Name = "SearchItem.ChangedChars"
args(13).Value = 2
args(14).Name = "SearchItem.DeletedChars"
args(14).Value = 2
args(15).Name = "SearchItem.InsertedChars"
args(15).Value = 2
args(16).Name = "SearchItem.TransliterateFlags"
args(16).Value = 1280
args(17).Name = "SearchItem.Command"
args(17).Value = 1
args(18).Name = "Quiet"
args(18).Value = true
dokument=ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(dokument, ".uno:ExecuteSearch", "", 0, args()) ' Vlastné hľadanie – označenie všetkých nájdených znakov
endif
kurzor= ThisComponent.currentcontroller.getViewCursor()
' Viditeľný kurzor
' ak sme nehľadali medzery, tak je to celý označený text, inak iba nájdené medzery
kurzor.CharKerning=medzera ' Zmena rozostupu označených znakov
end sub
Rem Volanie dialógu a makra pre nastavenie rozostupov
sub Kerning_znakov
dim medzera as long ' Pre získanie číselnej hodnoty z dialógovej premennej "Hodnota"
DialogLibraries.LoadLibrary("JP_Kerning_znakov") ' Otvorenie knižnice
dlg=CreateUnoDialog(DialogLibraries.JP_Kerning_znakov.Dialog_Kerning_znakov) ' Sprístupnenie dialógu
dlg.model.Vyber_all.State=0
dlg.model.Vyber_SP_NBSP.State=1 ' V prepínačoch si prednastavíme, že budeme meniť rozostupy všetkých medzier
dlg.model.Vyber_SP.State=0
dlg.model.Vyber_NBSP.State=0
dlg.model.Hodnota.text="0" ' 0 znamená, že rozostupy majú byť štandardné
if dlg.Execute()=1 then
' Ak sme stlačili "OK", tak
medzera=val(dlg.model.Hodnota.text) ' Hodnota rozostupov
uprav_kerning_znakov(medzera,dlg.model.Vyber_all.State,dlg.model.Vyber_SP_NBSP.State,dlg.model.Vyber_NBSP.State) ' Nastavenie rozostupov
endif
dlg.dispose() ' Zatvorenie dialógu
end sub
Copyright © 2002 - 2013 inet.sk, s. r. o. | Všetky práva vyhradené | Neprešlo jazykovou úpravou | ISSN 1336-1899
Využívame kvalitný webhosting za rozumnú cenu od Inet.sk