Table of Contents
Upgrade skriptů na verzi Geogetu 2.8.0
V Geogetu 2.8.0 došlo k zásadním interním technologickým změnám, díky kterým nebylo možné zachovat úplnou kompatibilitu se staršími skripty. I přes veškerou snahu se několik věcí musí ve skriptech změnit:
THtmlView
Je použita novější verze knihovny, kde jsou různé změny. Nejčastěji narazíte na to, že všechny funkce pro nahrávání obsahu mají přidaný parametr DocType. Takže například místo:
html.LoadFromString(s, '');
musíte popužít:
html.LoadFromString(s, '', htmltype);
UnicodeString
Dříve platilo, že datový typ String byl totožný s typem AnsiString. Nyní je String totožný s UnicodeString!
Při přiřazování obsahu z jednoho typu stringu do druhého dochází k implicitním konverzím dat, takže si většinou změny ani nevšimnete. Nicméně použití správného datového typu je fatální při operacích, kde se pracuje přímo s obsahem paměti, kde mají být data stringu. Tedy například při načítání a zápisu dat do TStream, nebo při volání externích DLL.
Zpravidla stačí na správných místech místo String použít AnsiString, a úprava bude i zpětně kompatibilní.
Ikony
Ikony skriptů, ale třeba i ikony generované pro vizualizační skripty, mohou nově obsahovat alfakanál s poloprůhledností. Ten se použije automaticky u obrázků s 32-bitovými pixely. U takových se nepoužije průhlednost podle prvního pixelu, jako to bylo doposud!
Pozor, TBitmap ve výchozím stavu používá právě 32-bitový formát!
Regulární výrazy
Změněna byla i knihovna na vykonávání regulárních výrazů. Nyní je používána knihovna PCRE. Díky tomu přestaly fungovat nestandardní modifikátory staré knihovny (g
, r
), a je třeba ty regulární výrazy přepsat. Viz. http://www.regular-expressions.info/modifiers.html. (Původní modifikátory jsou popsány zde.)
Modifikátor g
je možné vypustit. Pouze v případě, že byl použit jako -g
, je třeba regulární výraz přepsat tak, aby nebyl “hladový”.
TStringList
Sám o sobě je vnitřně unicode. Při načítání dat pomocí LoadFromFile nebo LoadFromStream jsou data konvertována z ANSI do Unicode. Leda že by na začátku dat byl BOM
, pak se konvertuje z kódování podle nalezeného BOMu. (tedy UTF-8 nebo UTF-16) Tato konverze může být nechtěná!
Lze to obejít tak, že si data načtete nejprve do AnsiStringu
, a ten pak přiřadíte to TStringList.text
property. LoadFromFile() a LoadFromStream() to interně dělají stejně, akorát tam navíc udělají tu konverzi.