GeoGet

Complete geocaching solutions

User Tools

Site Tools


user:skript:varsubst

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
user:skript:varsubst [2011/01/22 09:09]
medwyn_cz
user:skript:varsubst [2021/10/10 10:14] (current)
mikrom
Line 19: Line 19:
 Tato část textu je určena především pro uživatele GeoGetu. Respektive pro uživatele těch skriptů GeoGetu, které využívají funkcí knihovny VarSubst. Odstavce jsou však povinnou četbou i pro programátory skriptů. Tato část textu je určena především pro uživatele GeoGetu. Respektive pro uživatele těch skriptů GeoGetu, které využívají funkcí knihovny VarSubst. Odstavce jsou však povinnou četbou i pro programátory skriptů.
  
-<box round 100% #DEE7EC>  +<WRAP round important
-:!: Protože se jedná o knihovnu, není možné ji použít samostatně. Jako každá jiná knihovna i tato slouží programátorům (v tomto případě programátorům skriptů pro GeoGet) k tomu, aby zjednodušila jejich práci. Programátor začleněním knihovny do svého skriptu použije její funkce a případně poskytne nějaké to klikátko k tomu, aby uživatel sám mohl upravovat šablony používané programátorovým skriptem. +Protože se jedná o knihovnu, není možné ji použít samostatně. Jako každá jiná knihovna i tato slouží programátorům (v tomto případě programátorům skriptů pro GeoGet) k tomu, aby zjednodušila jejich práci. Programátor začleněním knihovny do svého skriptu použije její funkce a případně poskytne nějaké to klikátko k tomu, aby uživatel sám mohl upravovat šablony používané programátorovým skriptem. 
-</box>+</WRAP>
  
 ==== Proč knihovna existuje ==== ==== Proč knihovna existuje ====
Line 75: Line 75:
 Při úpravách šablon je možné využít seznamu, vybrat z něj požadovanou proměnnou nebo funkci a její kostru vložit do šablony. (Velikost formuláře lze plynule měnit a tím lze zvětšit i pole s popisem vkládaného vzoru proměnné tak, aby byl vidět celý.) Při úpravách šablon je možné využít seznamu, vybrat z něj požadovanou proměnnou nebo funkci a její kostru vložit do šablony. (Velikost formuláře lze plynule měnit a tím lze zvětšit i pole s popisem vkládaného vzoru proměnné tak, aby byl vidět celý.)
  
-<box round 100% #DEE7EC>  +<WRAP round info
-:!: Samozřejmě chápeme, že práce se šablonami může být někdy dosti složitá. Pokud nevíte, jak získat svůj vysněný výstup, kontaktujte autora skriptu, nebo rovnou autory knihovny VarSubst. Jistě Vám rádi poradí, pokud budou mít trochu času. +Samozřejmě chápeme, že práce se šablonami může být někdy dosti složitá. Pokud nevíte, jak získat svůj vysněný výstup, kontaktujte autora skriptu, nebo rovnou autory knihovny VarSubst. Jistě Vám rádi poradí, pokud budou mít trochu času. 
-</box>+</WRAP>
  
 ==== Přehled možných vzorů v šabloně ==== ==== Přehled možných vzorů v šabloně ====
Line 86: Line 86:
  
 === Seznam nahrazovaných proměnných === === Seznam nahrazovaných proměnných ===
- +<WRAP round box>
-<​box ​96% right #f8f8f8 #f8f8f8 #f8f8f8 #f8f8f8>+
 |%NAME%, %WPTNAME%|jméno bodu| |%NAME%, %WPTNAME%|jméno bodu|
 |%FAMILY%|typ bodu (první 2 znaky: GC, WM, ...)| |%FAMILY%|typ bodu (první 2 znaky: GC, WM, ...)|
Line 127: Line 126:
 |%WPTPREFIXID%|prefix bodu| |%WPTPREFIXID%|prefix bodu|
 |%WPTDESCRIPTION%|popis bodu| |%WPTDESCRIPTION%|popis bodu|
-</box>+</WRAP>
  
 Jak je vidět z předchozího výčtu, nahrazované proměnné odpovídají položkám, které databáze GeoGetu uchovává k jednotlivým bodům. To je důležité si uvědomit zejména při tvorbě šablony. Ne všechny položky jsou k dispozici pro všechny typy bodů (keš versus doplňující waypoint). Nicméně při náhradě pro WP knihovna vyhledá i mateřský bod (keš) a pokud je to třeba, použije příslušné hodnoty z jeho definice. Pokud se však budete snažit použít proměnnou %WPT*% na mateřském bodě (keši), logicky k náhradě nedojde, jelikož pro keš není taková proměnná definována. Jak je vidět z předchozího výčtu, nahrazované proměnné odpovídají položkám, které databáze GeoGetu uchovává k jednotlivým bodům. To je důležité si uvědomit zejména při tvorbě šablony. Ne všechny položky jsou k dispozici pro všechny typy bodů (keš versus doplňující waypoint). Nicméně při náhradě pro WP knihovna vyhledá i mateřský bod (keš) a pokud je to třeba, použije příslušné hodnoty z jeho definice. Pokud se však budete snažit použít proměnnou %WPT*% na mateřském bodě (keši), logicky k náhradě nedojde, jelikož pro keš není taková proměnná definována.
Line 138: Line 137:
  
 === Seznam globálních proměnných GeoGetu === === Seznam globálních proměnných GeoGetu ===
-<​box ​95% right #f8f8f8 #f8f8f8 #f8f8f8 #f8f8f8>+<WRAP round box>
 |%GGDATADIR%|datový adresář GeoGetu| |%GGDATADIR%|datový adresář GeoGetu|
 |%GGSCRIPTDIR%|adresář GeoGetu, v kterém jsou očekávány skripty| |%GGSCRIPTDIR%|adresář GeoGetu, v kterém jsou očekávány skripty|
Line 145: Line 144:
 |%GGOWNER%|uživatel GeoGetu| |%GGOWNER%|uživatel GeoGetu|
 |%CRLF%|odřádkování| |%CRLF%|odřádkování|
-</box>+</WRAP>
  
 Knihovna nahrazuje jen ty proměnné, jejichž použití může mít v šablonách nějaký přínos. Zdaleka tedy nejsou k dispozici všechny globální proměnné GeoGetu, které může použít skript. Pokud se opravdu ukáže potřeba náhrady neobsluhované proměnné, lze k tomu účelu využít uživatelské funkce. Anebo nás přesvědčit,​ abychom náhradu proměnné přidali přímo do knihovny. Knihovna nahrazuje jen ty proměnné, jejichž použití může mít v šablonách nějaký přínos. Zdaleka tedy nejsou k dispozici všechny globální proměnné GeoGetu, které může použít skript. Pokud se opravdu ukáže potřeba náhrady neobsluhované proměnné, lze k tomu účelu využít uživatelské funkce. Anebo nás přesvědčit,​ abychom náhradu proměnné přidali přímo do knihovny.
  
 === Seznam logických proměnných === === Seznam logických proměnných ===
-<​box ​95% right #f8f8f8 #f8f8f8 #f8f8f8 #f8f8f8>+<WRAP round box>
 |%HAVEFINAL%|**true**,​ pokud má keš finálku| |%HAVEFINAL%|**true**,​ pokud má keš finálku|
 |%ISDISABLED%|**true**,​ pokud má bod status Disabled| |%ISDISABLED%|**true**,​ pokud má bod status Disabled|
Line 163: Line 162:
 |%WPTISFINAL%|**true**,​ pokud se jedná o bod s finálovými souřadnicemi| |%WPTISFINAL%|**true**,​ pokud se jedná o bod s finálovými souřadnicemi|
 |%WPTISEMPTYCOORD%|**true**,​ pokud souřadnice bodu jsou nulové| |%WPTISEMPTYCOORD%|**true**,​ pokud souřadnice bodu jsou nulové|
-</box>+</WRAP>
  
 Logické proměnné vracejí text **true** nebo **false** jako string. Tento string je možné testovat v podmíněném nahrazování. Logické proměnné vracejí text **true** nebo **false** jako string. Tento string je možné testovat v podmíněném nahrazování.
Line 186: Line 185:
   * náhrada textem podle toho, zda bod má nastavený TAG příslušné kategorie a hodnoty nebo nemá   * náhrada textem podle toho, zda bod má nastavený TAG příslušné kategorie a hodnoty nebo nemá
  
-<​code>​ +<​code>​%IF("​str1"​ op "​str2";​ "​pravdivý text"; "​nepravdivý text"​)%</​code>​ 
-  ​%IF("​str1"​ op "​str2";​ "​pravdivý text"; "​nepravdivý text"​)% +  * náhrada textem podle platnosti zadané podmínky. Funkce test vyhodnocuje porovnáním ​řetězců s ohledem na velikost písmen. Jako operátor **op** mohou být použity =, <>, >=, <=.
-</​code>​ +
-  * náhrada textem podle platnosti zadané podmínky. Funkce test vyhodnocuje porovnáním ​retězců s ohledem na velikost písmen. Jako operátor **op** mohou být použity =, <>, >=, <=.+
    
 <​code>​%ROT13("​str"​)%</​code>​ <​code>​%ROT13("​str"​)%</​code>​
Line 197: Line 194:
   * obrátí pořadí znaků ve stringu   * obrátí pořadí znaků ve stringu
  
-<​code>​%REPLACE("​str"​,"​vzor"​,"​náhrada"​)%</​code>​+<​code>​%REPLACE("​str"​;"​vzor"​;"​náhrada"​)%</​code>​
   * každý výskyt //vzor// ve vstupním textu //str// nahradí textem //​náhrada//​. Funkce je vyhodnocována po aplikaci standardních náhrad (viz [[user:​skript:​varsubst#​funkce|tabulky pořadí zpracování]] na začátku)   * každý výskyt //vzor// ve vstupním textu //str// nahradí textem //​náhrada//​. Funkce je vyhodnocována po aplikaci standardních náhrad (viz [[user:​skript:​varsubst#​funkce|tabulky pořadí zpracování]] na začátku)
  
-<​code>​%REPLACEFULL("​str"​,"​vzor"​,"​náhrada"​)%</​code>​+<​code>​%REPLACEFULL("​str"​;"​vzor"​;"​náhrada"​)%</​code>​
   * funkce je identická s předchozí funkcí, ale volá se až úplně na konci zpracování jako [[user:​skript:​varsubst#​funkce|poslední funkce před návratem]] ​   * funkce je identická s předchozí funkcí, ale volá se až úplně na konci zpracování jako [[user:​skript:​varsubst#​funkce|poslední funkce před návratem]] ​
  
 Funkce REPLACE a IF mohou být do sebe vnořeny (funkce může obsahovat samu sebe, tzv. rekurze), vyhodnocují se vždy od poslední k první. U ostatních funkcí postrádá rekurze smyslu, proto není implementována. Funkce REPLACE a IF mohou být do sebe vnořeny (funkce může obsahovat samu sebe, tzv. rekurze), vyhodnocují se vždy od poslední k první. U ostatních funkcí postrádá rekurze smyslu, proto není implementována.
  
-<box round 100% #DEE7EC+<WRAP round important
-:!: Zejména při vnořování funkcí a jejich rekurzi je velmi **důležité dát pozor na použití uvozovek**. Každý textový řetěz vstupující do funkce jako parametr musí být uzavřen v uvozovkách. Pokud není, bude chápán jako číslo, a to může způsobit v nejlepším případě nečekaný výsledek, v horším případě neprovedení náhrady nebo možná i kolaps. Vnořování funkcí do parametrů jiných funkcí je možné, ale přehlednost parametrů s každým vnořením dramaticky klesá. Je důležité si uvědomit, že funkce se vyhodnocují //od poslední funkce// a podle toho také kontrolovat uvozovky u textových parametrů. Je-li parametrem výsledek vnořené funkce, musí být celá funkce uzavřena v uvozovkách.+Zejména při vnořování funkcí a jejich rekurzi je velmi **důležité dát pozor na použití uvozovek**. Každý textový řetěz vstupující do funkce jako parametr musí být uzavřen v uvozovkách. Pokud není, bude chápán jako číslo, a to může způsobit v nejlepším případě nečekaný výsledek, v horším případě neprovedení náhrady nebo možná i kolaps. Vnořování funkcí do parametrů jiných funkcí je možné, ale přehlednost parametrů s každým vnořením dramaticky klesá. Je důležité si uvědomit, že funkce se vyhodnocují //od poslední funkce// a podle toho také kontrolovat uvozovky u textových parametrů. Je-li parametrem výsledek vnořené funkce, musí být celá funkce uzavřena v uvozovkách.
  
-<​code>​ +<​code>​%IF("​str1"<>"​str2";​ "​%IF(int1=int2;"​platí vnější i vnitřní test"; "​platí vnější, neplatí vnitřní test"​)%";​ "​neplatí vnější test"​)%</​code>​
-%IF("​str1"<>"​str2";​ "​%IF(int1=int2;"​platí vnější i vnitřní test"; "​platí vnější, neplatí vnitřní test"​)%";​ "​neplatí vnější test"​)% +
- +
-</​code>​+
  
 Vidíte, že na první a zřejmě ani na druhý pohled není zcela patrné, k čemu se které uvozovka vztahuje. Vidíte, že na první a zřejmě ani na druhý pohled není zcela patrné, k čemu se které uvozovka vztahuje.
-</box>+</WRAP>
  
 === Uživatelské vzory a funkce === === Uživatelské vzory a funkce ===
Line 229: Line 223:
 **Listing bodu:** **Listing bodu:**
 <code none point.description.poigarmin.varsubst.template.txt>​ <code none point.description.poigarmin.varsubst.template.txt>​
-# GeoGet, http://geoget.ararat.cz +# GeoGet, http://www.geoget.cz 
-# Šablona pro knihovnu VarSubst, http://​geoget.ararat.cz/​doku.php/​user:​skript:​varsubst +# Šablona pro knihovnu VarSubst, http://www.geoget.cz/​doku.php/​user:​skript:​varsubst 
-# Součást exportu POI Garmin, http://geoget.ararat.cz/​doku.php/​user:​skript:​poigarmin+# Součást exportu POI Garmin, http://www.geoget.cz/​doku.php/​user:​skript:​poigarmin
 # #
 # Autor: medwyn_cz, http://​www.geocaching.com/​profile/?​u=medwyn_cz # Autor: medwyn_cz, http://​www.geocaching.com/​profile/?​u=medwyn_cz
Line 278: Line 272:
 **Jméno bodu:** **Jméno bodu:**
 <code none point.name.poigarmin.varsubst.template.txt>​ <code none point.name.poigarmin.varsubst.template.txt>​
-# GeoGet, http://geoget.ararat.cz +# GeoGet, http://www.geoget.cz 
-# Šablona pro knihovnu VarSubst, http://​geoget.ararat.cz/​doku.php/​user:​skript:​varsubst +# Šablona pro knihovnu VarSubst, http://www.geoget.cz/​doku.php/​user:​skript:​varsubst 
-# Součást exportu POI Garmin, http://geoget.ararat.cz/​doku.php/​user:​skript:​poigarmin+# Součást exportu POI Garmin, http://www.geoget.cz/​doku.php/​user:​skript:​poigarmin
 # #
 # Autor: medwyn_cz, http://​www.geocaching.com/​profile/?​u=medwyn_cz # Autor: medwyn_cz, http://​www.geocaching.com/​profile/?​u=medwyn_cz
Line 294: Line 288:
 # které by mohly ve jménu vzniknout # které by mohly ve jménu vzniknout
 </​code>​ </​code>​
- 
  
 ==== Poznámky, známé problémy ==== ==== Poznámky, známé problémy ====
-:!: Zásadním problémem je použití uvozovek. Uvozovky omezují textové parametry, ale uvnitř těchto parametrů mohou být další proměnné či funkce, které opět mohou obsahovat v parametrech textové řetězy ohraničené uvozovkami, ... Po nahrazení sice vždy uvozovky //zmizí//, ale pro identifikaci funkcí a jejich parametrů jsou velmi důležité. Je proto třeba jim věnovat zvýšenou pozornost.+<WRAP round important>​ 
 +Zásadním problémem je použití uvozovek. Uvozovky omezují textové parametry, ale uvnitř těchto parametrů mohou být další proměnné či funkce, které opět mohou obsahovat v parametrech textové řetězy ohraničené uvozovkami, ... Po nahrazení sice vždy uvozovky //zmizí//, ale pro identifikaci funkcí a jejich parametrů jsou velmi důležité. Je proto třeba jim věnovat zvýšenou pozornost. 
 +</​WRAP>​
  
-:!: Je důležité konstruovat šablonu s ohledem na pořadí nahrazování proměnných a vyhodnocování funkcí. Pokud bude šablona sestavena chybně, nedojde ke správnému vyhodnocení a ve výsledku zůstanou vidět //podivné konstrukce//​.+<WRAP round important>​ 
 +Je důležité konstruovat šablonu s ohledem na pořadí nahrazování proměnných a vyhodnocování funkcí. Pokud bude šablona sestavena chybně, nedojde ke správnému vyhodnocení a ve výsledku zůstanou vidět //podivné konstrukce//​. 
 +</​WRAP>​
  
-:?: Čas - ano, zpracování pomocí knihovny je nepochybně pomalejší než jednoúčelově na míru ušitý skript. ​Ovsem produktivita programátorských prací dle našeho mínění minimálně vyváží časovou ztrátu způsobenou pomalejším zpracováním exportu. Příkladem budiž export [[user:​skript:​poigarmin|POI Garmin]]. Dříve napsaný speciální skript zpracovával Gordových asi 24000 keší + 5000 waymarků přibližně 12 minut. Předěláním exportu na použití této knihovny se sice zpracování prodloužilo na cca 14 minut, ale kterýkoli uživatel si snadnou úpravou šablony může export upravit sobě na míru. Z uživatelského hlediska použití knihovny přináší větší hodnotu než je ztráta způsobená delším zpracováním. (Pro přesnost dodáváme, že těch 12 minut je údaj po zrychlovací kúře, kterou skript prodělal. Verze, která byla rozšířena mezi uživateli, tutéž dávku zpracovávala cca 25 minut, takže i s použitím šablony je to vlastně časová úspora. :-) Všechno se dá zdůvodnit.)+<WRAP round help> 
 +Čas - ano, zpracování pomocí knihovny je nepochybně pomalejší než jednoúčelově na míru ušitý skript. ​Ovšem ​produktivita programátorských prací dle našeho mínění minimálně vyváží časovou ztrátu způsobenou pomalejším zpracováním exportu. Příkladem budiž export [[user:​skript:​poigarmin|POI Garmin]]. Dříve napsaný speciální skript zpracovával Gordových asi 24000 keší + 5000 waymarků přibližně 12 minut. Předěláním exportu na použití této knihovny se sice zpracování prodloužilo na cca 14 minut, ale kterýkoli uživatel si snadnou úpravou šablony může export upravit sobě na míru. Z uživatelského hlediska použití knihovny přináší větší hodnotu než je ztráta způsobená delším zpracováním. (Pro přesnost dodáváme, že těch 12 minut je údaj po zrychlovací kúře, kterou skript prodělal. Verze, která byla rozšířena mezi uživateli, tutéž dávku zpracovávala cca 25 minut, takže i s použitím šablony je to vlastně časová úspora. :-) Všechno se dá zdůvodnit.) 
 +</​WRAP>​
  
 ===== Programátorská dokumentace ===== ===== Programátorská dokumentace =====
  
 ==== Funkce ==== ==== Funkce ====
-Voláním knihovních funkcí (viz níže) dojde k náhradě proměnných ve tvaru **%JMENO%** příslušnou textovou hodnotou. Proměnné jsou vyhodnocovány podle hodnot v instanci třídy **TGeo** (informace o bodu - keši) nebo **TWpt** (informace o doplňkovém bodu - final, parkoviště,​ ...) a podle globálních proměnných GeoGetu (např. ​GEGOGET_Datadir ​má proměnnou %GGDATADIR%).+Voláním knihovních funkcí (viz níže) dojde k náhradě proměnných ve tvaru **%JMENO%** příslušnou textovou hodnotou. Proměnné jsou vyhodnocovány podle hodnot v instanci třídy **TGeo** (informace o bodu - keši) nebo **TWpt** (informace o doplňkovém bodu - final, parkoviště,​ ...) a podle globálních proměnných GeoGetu (např. ​GEGOGET_DATADIR ​má proměnnou %GGDATADIR%).
  
 Všechny řádky začínající znakem # jsou považovány za komentář a ignorovány. Všechny řádky začínající znakem # jsou považovány za komentář a ignorovány.
Line 324: Line 323:
   - provede funkci REPLACEFULL ​   - provede funkci REPLACEFULL ​
  
-:!: Náhrada listingu je posunuta až na konec zpracování proto, aby se co nejméně pracovalo s dlouhými texty a tím se zvýšila rychlost. Text listingu již většinou není třeba dál zpracovávat,​ takže vlastně ani není důvod k tomu, aby se to dělalo dříve. Jediné, co by snad mohlo být potřeba udělat, je nahradit nějaký konstantní text v listingu jiným textem a to lze realizovat funkcí REPLACEFULL.+<WRAP round info> 
 +Náhrada listingu je posunuta až na konec zpracování proto, aby se co nejméně pracovalo s dlouhými texty a tím se zvýšila rychlost. Text listingu již většinou není třeba dál zpracovávat,​ takže vlastně ani není důvod k tomu, aby se to dělalo dříve. Jediné, co by snad mohlo být potřeba udělat, je nahradit nějaký konstantní text v listingu jiným textem a to lze realizovat funkcí REPLACEFULL. 
 +</​WRAP>​
  
 ==== Veřejné funkce knihovny ==== ==== Veřejné funkce knihovny ====
Line 349: Line 350:
 <code delphi>​procedure VarSubstDlgTemplateString(sCaption,​ ID, sTemplate, startDir:​string);</​code>​ <code delphi>​procedure VarSubstDlgTemplateString(sCaption,​ ID, sTemplate, startDir:​string);</​code>​
   * Poskytuje formulář pro testování šablony.   * Poskytuje formulář pro testování šablony.
 +
 +<code delphi>​function VarSubstDlgTemplateStringNoSave(caption,​id,​sTemplate:​ string) : String;</​code>​
 +  * Funkce, která zobrazí formulář na editaci a testování šablony. Návratovou hodnotou je nově upravená šablona. Ve formuláři jsou skryty ovládací prvky pro přímé ukládání do souboru. ​
  
 <code delphi>​function VarSubstEncode(str:​string):​string;</​code>​ <code delphi>​function VarSubstEncode(str:​string):​string;</​code>​
Line 355: Line 359:
 Ve funkcích jsou použity následující parametry: Ve funkcích jsou použity následující parametry:
  
-<​box ​95% right #f8f8f8 #f8f8f8 #f8f8f8 #f8f8f8>+<WRAP round box>
 |TGeo|struktura naplněná informacemi o konkrétním bodu (keši)| |TGeo|struktura naplněná informacemi o konkrétním bodu (keši)|
 |TWpt|struktura naplněná informacemi o doplňkovém bodu| |TWpt|struktura naplněná informacemi o doplňkovém bodu|
Line 363: Line 367:
 |fce|uživatelem definovaná funkce, která realizuje nahrazování nad rámec knihovních funkcí| |fce|uživatelem definovaná funkce, která realizuje nahrazování nad rámec knihovních funkcí|
 |bBefore|požadavek na použití uživatelské funkce před nahrazením knihovnou (napřed bude na vstupní šablonu aplikovaná uživatelem definovaná funkce, až na její výsledek bude aplikováno standardní nahrazení knihovnou)| |bBefore|požadavek na použití uživatelské funkce před nahrazením knihovnou (napřed bude na vstupní šablonu aplikovaná uživatelem definovaná funkce, až na její výsledek bude aplikováno standardní nahrazení knihovnou)|
-</box>+</WRAP>
  
-<box round 95% #DEE7EC+<WRAP round important
-:!: Použití neveřejných funkcí (tedy prohlédnutí zdrojového kódu knihovny a volání funkcí, které nejsou uvedeny v seznamu výše) může vést k nečekaným výsledkům - až ke kolapsu, protože tyto funkce předpokládají nějakou inicializaci,​ sekvenci volání a podobně, což je zajištěno jen použitím veřejných funkcí. **Důrazně volání neveřejných funkcí nedoporučujeme.** +Použití neveřejných funkcí (tedy prohlédnutí zdrojového kódu knihovny a volání funkcí, které nejsou uvedeny v seznamu výše) může vést k nečekaným výsledkům - až ke kolapsu, protože tyto funkce předpokládají nějakou inicializaci,​ sekvenci volání a podobně, což je zajištěno jen použitím veřejných funkcí. **Důrazně volání neveřejných funkcí nedoporučujeme.** 
-</box>+</WRAP>
  
 ==== Uživatelské funkce ==== ==== Uživatelské funkce ====
Line 402: Line 406:
 Je velmi vhodné, aby tato textová konstanta dodržela formát %JMENO% a v případě funkce %JMENO_FUNKCE()%. Není to sice nezbytně nutné, ale udrží se tím alespoň jakási čitelnost šablony a navíc tento formát umožní v editačním formuláři vkládat tento text výběrem ze seznamu vzorů. Pokud formát dodržen nebude, konstanta a její popis sice v seznamu zobrazen bude, ale nebude možné ji do šablony vložit. Je velmi vhodné, aby tato textová konstanta dodržela formát %JMENO% a v případě funkce %JMENO_FUNKCE()%. Není to sice nezbytně nutné, ale udrží se tím alespoň jakási čitelnost šablony a navíc tento formát umožní v editačním formuláři vkládat tento text výběrem ze seznamu vzorů. Pokud formát dodržen nebude, konstanta a její popis sice v seznamu zobrazen bude, ale nebude možné ji do šablony vložit.
  
-:!: Pokud uživatelská funkce nahrazuje nějaký text v šabloně, před vlastní náhradou by na text měla použít funkci **VarSubstEncode**,​ která převede nebezpečné znaky tak, aby nebránily následnému správnému zpracování. Ale pozor, tato funkce **nesmí** být použita na celou šablonu, protože nahrazuje mj. i uvozovky, takže následující zpracování by správně nerozeznalo parametry funkcí jako %IF(..)% a další. Pokud bude uživatelská funkce volaná až po náhradách knihovnou, není třeba funkci //​VarSubstEncode//​ volat.+<WRAP round info> 
 +Pokud uživatelská funkce nahrazuje nějaký text v šabloně, před vlastní náhradou by na text měla použít funkci **VarSubstEncode**,​ která převede nebezpečné znaky tak, aby nebránily následnému správnému zpracování. Ale pozor, tato funkce **nesmí** být použita na celou šablonu, protože nahrazuje mj. i uvozovky, takže následující zpracování by správně nerozeznalo parametry funkcí jako %IF(..)% a další. Pokud bude uživatelská funkce volaná až po náhradách knihovnou, není třeba funkci //​VarSubstEncode//​ volat. 
 +</​WRAP>​
  
 === Registrace uživatelské funkce a použití === === Registrace uživatelské funkce a použití ===
Line 432: Line 438:
 </​code>​ </​code>​
  
-Třetí parametr informuje knihovnu o tom, zda registrovaná funkce má být volaná **před** nebo **po** ​stadnardních ​náhradách knihovními funkcemi.+Třetí parametr informuje knihovnu o tom, zda registrovaná funkce má být volaná **před** nebo **po** ​standardních ​náhradách knihovními funkcemi.
  
 V nečetných případech může být užitečné registraci funkce zrušit. K tomu slouží funkce V nečetných případech může být užitečné registraci funkce zrušit. K tomu slouží funkce
Line 455: Line 461:
 Obě procedury zobrazí formulář, na kterém je současně zobrazena šablona i výsledek aplikace knihovních a registrovaných uživatelských funkcí na šablonu. Procedury se liší jedině vstupním parametrem, který předává buďto cestu a jméno souboru se šablonou nebo přímo šablonu. Obě procedury zobrazí formulář, na kterém je současně zobrazena šablona i výsledek aplikace knihovních a registrovaných uživatelských funkcí na šablonu. Procedury se liší jedině vstupním parametrem, který předává buďto cestu a jméno souboru se šablonou nebo přímo šablonu.
  
-:!: Jestliže mají být aplikovány i uživatelské funkce, je třeba je registrovat před voláním funkce pro zobrazení formuláře.+<WRAP round important>​ 
 +Jestliže mají být aplikovány i uživatelské funkce, je třeba je registrovat před voláním funkce pro zobrazení formuláře. 
 +</​WRAP>​
  
 ==== Knihovna jako Include nebo Unit ==== ==== Knihovna jako Include nebo Unit ====
Line 475: Line 483:
  
 ==== Ukázka použití knihovny ==== ==== Ukázka použití knihovny ====
- 
 Úlohou programátora,​ který chce používat tuto knihovnu, je: Úlohou programátora,​ který chce používat tuto knihovnu, je:
  
Line 487: Line 494:
  
 <code delphi> <code delphi>
- +uses VarSubstUnit;     //​pouziti knihovny jako unit
-uses VarSubsUnit;     //​pouziti knihovny jako unit+
 //{$I VarSubst.lib.pas} ​  //​vlozeni knihovniho souboru pro preklad soucasne se skriptem //{$I VarSubst.lib.pas} ​  //​vlozeni knihovniho souboru pro preklad soucasne se skriptem
  
Line 527: Line 533:
   if iErr > 0 then ShowMessage('​Pri zpracovani sablon doslo k chybe'​); ​   if iErr > 0 then ShowMessage('​Pri zpracovani sablon doslo k chybe'​); ​
 end;  end; 
- 
 </​code>​ </​code>​
  
Line 539: Line 544:
  
 ===== Stažení ===== ===== Stažení =====
-<box round 95% #DEE7EC+<WRAP round download
-:!: Stáhnout aktuální verzi: ~~DOWNLOAD varsubst-*.gip highest~~ +Stáhnout aktuální verzi: ~~DOWNLOAD varsubst-*.gip highest~~ 
-</box>+</WRAP>
  
 ==== Seznam dostupných verzí ==== ==== Seznam dostupných verzí ====
Line 547: Line 552:
  
 ===== Seznam změn ===== ===== Seznam změn =====
-=== 1.1 (2011/01/03=== +** 1.1.1.1 (2011/05/17** 
-   ​* ​Úvodní verze. Pracovali jsme na ní ve volných chvílích ​es l roku        ​+   ​* ​Opravena drobná chyba, která měla za následek problém ​i použití ​příkazů %COORDINATE%,​ %CORRECTEDCOORDINATE% a %WPTCOORDINATE%,​ pokud bylo jako výstupní formátování použito UTF8.
  
-/* Pokud je seznam změn již moc dlouhý */ 
 <hidden onHidden=":?:​ **Zobrazit změny ve starších verzích**"​ onVisible="​Skrýt změny ve starších verzích">​ <hidden onHidden=":?:​ **Zobrazit změny ve starších verzích**"​ onVisible="​Skrýt změny ve starších verzích">​
 +** 1.1.1 (2011/​01/​24) **
 +   * Přidána nová funkce **VarSubstDlgTemplateStringNoSave**(caption,​id,​sTemplate:​ string) : String;
 +   * Editační formulář - Přidána možnost skrýt pravé výstupní podokno
 +   * Přesunuto do podsložky \lib\VarSubst ​
 +
 +   * Oprava implementace převodu výsledného navráceného řetězce do ANSI kódování
 +   * Opravena chyba v implementaci nahrazování proměnné %GGSCRIPTDIR%
 +   * Editační formulář - při zavírání se zobrazí dotaz, zda si přejete upravenou šablonu uložit
 +   * Další drobné úpravy a opravy ​
  
 +** 1.1 (2011/​01/​03) **
 +   * Úvodní verze. Pracovali jsme na ní ve volných chvílích přes půl roku.   
 </​hidden>​ </​hidden>​
  
-{{tag>​skript lib}}+{{tag>author_Gord author_medwyn ​skript lib}}
user/skript/varsubst.1295683740.txt.gz · Last modified: 2011/01/22 00:00 (external edit)