Ako vytvoriť rozšírenie 1 – Programovanie makra

programovani.png Programujete makrá a chcete ich sprístupniť ako rozšírenie aj pre iných používateľov? Alebo chcete ako rozšírenie distribuovať svoje šablóny? V nasledujúcom seriáli bude ukázaný postup a možnosti, ktoré vám OpenOffice.org v tomto smere ponúka.  

Pokiaľ používate OpenOffice.org nie iba na jednom počítači, je výhodné, ak si naprogramované makrá, šablóny a pod. prenesiete aj s príslušnými nastaveniami (tlačidlá, položky menu) na iný počítač pomocou rozšírenia. Samozrejme, takto naprogramované rozšírenia môžete potom zverejniť aj na internete podľa svojich predstáv a potrieb.

Napísané chemické vzorce pred úpravouNapísané chemické vzorce pred úpravou

Pretože najčastejšie sa týkajú rozšírenia makier, ako prvý príklad bude uvedené, ako si vytvoríte takéto rozšírenie. Začnete, ako inak, vlastným makrom. Aby vytvorené rozšírenie bolo naozaj užitočné, použite napríklad makro pre formátovanie chemických vzorcov. Makro vytvoril programátor Matt McCutchen a umožňuje, aby ste sa pri písaní chemických vzorcov nemuseli starať o indexy. Ako príklad, stačí písať „H2SO4“, „NO3-“ a pod. a makro potom tieto vzorce indexovo upraví. Príklad, ako vyzerá vzorec pred a po napísaní je zrejmý z priložených zosnímaných obrazoviek.

Napísané chemické vzorce po automatickej úpraveNapísané chemické vzorce po automatickej úprave

Pre programátorov je uvedená v závere článku zdrojová verzia tohto makra, do ktorej sú pridané komentáre, aby bolo zrejmé, čo makro v ktorej časti vykonáva. Aby ste mohli makro dobre previesť na rozšírenie, je potrebné, aby ste si v správcovi makier (dostanete sa k nemu cez menu Nástroje | Makrá | Správce maker | OpenOffice.org Basic...) vytvorili preň osobitnú knižnicu.

Správca makier v OpenOffice.orgSprávca makier v OpenOffice.org

Toto urobíte tak, že po otvorení pracovného okna Makra v OpenOffice.org Basic stlačíte tlačidlo Organizátor... V zobrazenom okne Organizátor maker pre OpenOffice.org Basic sa prepnete na záložku Knihovny a tu cez tlačidlo Nový... pridáte názov novej knižnice (napríklad pre toto makro ju nazvete SuperbChemistry).

Vloženie novej knižnice „SuperbChemistry“Vloženie novej knižnice „SuperbChemistry“

Vložená knižnica „SuperbChemistry“Vložená knižnica „SuperbChemistry“

Po jej zadaní prejdete na túto knižnicu a cez tlačidlo Upravit otvoríte modul Basic, kde môžete do tejto knižnice ihneď vložiť príslušné makro. OpenOffice.org automaticky v novej knižnici vytvoril modul Module1, kde vložil prázdnu funkciu Main (túto môžete, samozrejme, vymazať). Názov modulu je vhodné premenovať, pretože pri rozsiahlejších makrách nevystačíte iba s jedným modulom a ich názvy vám zjednodušujú orientáciu. Tak isto sa na tieto názvy budete odvolávať pri vytváraní vlastného rozšírenia.

Automaticky vytvorený modulAutomaticky vytvorený modul

V dnešnom príklade makra premenujte tento modul na Main, lebo tak bol pomenovaný v pôvodnej distribúcii makra. K premenovaniu sa dostanete cez kontextové menu – stlačíte na názve modulu pravé tlačidlo myši a vyberiete voľbu Přejmenovat.

Možnosť premenovania modulu „Module1“Možnosť premenovania modulu „Module1“

Nakoniec makro uložíte cez klávesovú skratku Ctrl-s a zatvoríte modul Basic. Pri ukladaní sa netreba čudovať, že sa vás program neopýta na názov súboru – makro je uložené v adresári, ktorý zodpovedá názvu knižnice a názov súboru zodpovedá názvu modulu. O tom, ako ho odtiaľ vložíte do rozšírenia bude však hovorené až nabudúce.

Kompletne pripravené makro v module „Main“Kompletne pripravené makro v module „Main“

A na záver sľúbený zdrojový text makra pre formátovanie chemických vzorcov:

' Matt McCutchen's SuperbChemistry for OpenOffice, version 2.1
'
' Modified and slovak comment by Julius Pastierik, 08 october 2008
'
' Applies superscript and subscript formatting to chemical formulas in text.
'
' Rules:
' - Quantities [0-9]+ and charges [0-9]*[-+−] are recognized after an element
'   symbol [A-Z][a-z]? or a closing delimiter [])}] .  Hyphens are converted
'   into real minus signs.
' - A charge sign [-+−] is ignored if it is followed by a letter, digit,
'   opening delimiter, or [<>] .  (Charges should appear only at the end of a
'   formula, and we want to avoid matching ordinary hyphens in text.)
' - When digits followed by a charge sign are recognized, the last digit
'   becomes part of the charge and the remaining digits become the quantity.
'   (Charges rarely have absolute value more than 9.)
' - Exception: If a single digit follows O or a closing delimiter, that digit
'   is always the quantity.  (Handle NO3- and Fe(OH)2+.  I think oxygen is the
'   only element that frequently has a quantity as part of a +/-1 ion.  A group
'   is rarely parenthesized unless it has a quantity.)
'
' Examples:
' C12345 ==> C_{12345}
' H+ ==> H^+
' Cl- ==> Cl^-
' Fe3+ ==> Fe^{3+}
' SO42- ==> SO_4^{2-}
' C1232+ ==> C_{123}^{2+}
' N2- ==> N^{2-}
' NO3- ==> NO_3^-
' Fe(OH)2- ==> Fe(OH)_2^-
' O12 ==> O_{12}
' y4- ==> y4-
' x2 ==> x2
' Foo2 ==> Foo2
' TI-89 ==> TI-89

' Regular expression replace in the document,
' creating superscripts if superb > 0 or subscripts if superb < 0.
' Used by SuperbChemistry.

sub SuperbReplace(searchStr as string, replaceStr as string, superb as integer)
 ' Zámena reťazcov s možnosťou nastavenia horného/spodného indexu
 ' Význam parametrov:
 ' searchStr - hľadaný reťazec
 ' replaceStr - nahrádzajúci reťazec
 ' superb - príznak, či sa majú nastavovať horné indexy (>0) alebo spodné indexy (<0)

 dim rd as object
 rd = ThisComponent.createReplaceDescriptor() ' Vytvorenie objektu pre zámenu
 rd.SearchCaseSensitive = true ' Pri zámene budeme rozoznávať veľké a malé písmená
 rd.SearchRegularExpression = true ' Vyhľadávať sa bude podľa regulárneho výrazu
 rd.setSearchString(searchStr) ' Nastavenie hľadaného reťazca
 rd.setReplaceString(replaceStr) ' Nastavenie nahrádzajúceho reťazca

 if superb <> 0 then
 ' Ak nastavujeme index
  dim replaceAttrs(1) as new com.sun.star.beans.PropertyValue ' Premenná pre nastavenie parametrov textu
  replaceAttrs(0).Name = "CharEscapement" ' Percento umiestnenia indexu
  if superb > 0 then
   ' Horný index
   replaceAttrs(0).Value = 101 ' Kladná hodnota udáva horný index
  else
   ' Spodný index
   replaceAttrs(0).Value = -101 ' Záporná hodnota udáva spodný index
  end if
  replaceAttrs(1).Name = "CharEscapementHeight" ' Percento zmenšenia indexu
  replaceAttrs(1).Value = 58 ' Text zmenšíme na 58%
  rd.setReplaceAttributes(replaceAttrs) ' Nastavenie parametrov textu
 end if

 ThisComponent.replaceAll(rd) ' Vlastná zámena

end sub

' Formats the current document
sub FormatDocument
 ' Idiom: Match something and tag it on the left or right with @x@
 ' for further processing.  If the replacement text could use
 ' backreferences, this would be easier.

 ' Tag candidate charges following symbols or ), but not in compound words, etc.
 ' Acceptable next character.  (Has to be before end of line to avoid matching @g@ tag itself.)
 ' Označenie konca znaku, ktorý je za chemickým vzorcom, ak to nie je písmeno (bez diakritiky), číslo, zátvorka alebo <>
  SuperbReplace("([A-Z][a-z]?|[\])}])[0-9]*[-+−][^[({A-Za-z0-9<>]", "&@G@", 0)

 ' Retag in front.
 ' Označenie konca vzorca z predchádzajúceho prípadu
 SuperbReplace(".@G@", "@g@&", 0)

 ' End of line.
 ' Označenie konca vzorca, ak je na konci odstavca
 SuperbReplace("([A-Z][a-z]?|[\])}])[0-9]*[-+−]$", "&@g@", 0)

 ' O and )]} grab a single digit as quantity.
 ' Označenie prípadov O číslo alebo ukončovacia zátvorka číslo
 SuperbReplace("[\])}O][0-9]", "&@n@", 0)

 ' Real minus signs in charges.
 ' Zámena znaku rozdeľovníka za pomlčku (znamienko mínus)
 SuperbReplace("-@g@", "−@g@", 0)

 ' Make charges: at most one digit.
 ' Nastavenie horného indexu
 SuperbReplace("[0-9]?[−+]@g@", "@q@&", 1)

 ' Remove the O and ) markers in case of O57.
 ' Vymazanie označenia prípadov O číslo alebo ukončovacia zátvorka číslo
 SuperbReplace("@n@", "", 0)

 ' Tag quantities: as many digits as we can still grab.
 ' Označenie, ak je viacciferného čísla
 SuperbReplace("([A-Z][a-z]?|[\])}])[0-9]+", "&@n@", 0)

 ' Make quantities.
 ' Nastavenie spodného indexu
 SuperbReplace("[0-9]+@n@", "&", -1)

 ' Clean up all markers.
 ' Vymazanie všetkých označení
 SuperbReplace("@[gGnq]@", "", 0)

end sub
(Jako ve škole) Průměr: 3,40 | Hodnotilo: 10
 

Přidat názor

 

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu.

 
Július Pastierik

Július Pastierik

 
 
 
woo jaw demo hz