franta-hg@94: franta-hg@94: Skriptování franta-hg@94: Na stránku můžeme vložit výstup skriptů. franta-hg@97: 50 franta-hg@94: franta-hg@94: franta-hg@94: franta-hg@94:

franta-hg@94: Na stránkách můžeme používat skripty. franta-hg@95: Spouští se při generování a jejich standardní výstup se vloží do stránky. franta-hg@95: Třeba doprostřed textu ostavce nebo do jiného elementu. franta-hg@94:

franta-hg@94:

franta-hg@94: Příklad: franta-hg@95: franta-hg@95: Tyto stránky byly vygenerované v systému franta-hg@95: uname -o. franta-hg@95: franta-hg@95:

franta-hg@95: franta-hg@95:

franta-hg@103: Díky skriptování můžeme stránky obohatit o prakticky libovolný obsah – franta-hg@107: jak prostý text, tak i XHTML fragmenty. franta-hg@107: Zapíná se pomocí atributu výstup="xml" a generátor pak kontroluje správné formátování – franta-hg@107: nestane se vám, že byste omylem vygenerovali stránky s překříženými nebo neuzavřenými značkami. franta-hg@107: Výchozím jmenným prostorem je XHTML a je dostupný i jmenný prostor pro makra (m). franta-hg@107: franta-hg@103:

franta-hg@103:

franta-hg@103: Skriptování ale může být nebezpečné, pokud byste spustili generátor na stránkách, franta-hg@95: které psal někdo nedůvěryhodný a vložil do nich škodlivý kód. franta-hg@105: Kromě toho, ukázková sada stránek by měla být přeložitelná kdekoli a mít minimum závislostí franta-hg@103: (ne každý musí mít nainstalovaný Perl nebo Python či další podporované interprety). franta-hg@105: Proto je skriptování ve výchozím stavu vypnuté – je potřeba ho povolit v souboru web.conf. franta-hg@95:

franta-hg@95: franta-hg@95:

Podporované jazyky

franta-hg@95:

franta-hg@95: V současnosti jsou podporované tyto jazyky: franta-hg@94:

franta-hg@94: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@103: ) { franta-hg@94: if (/podporovanýJazyk\.put\("(\w+)",\s*"(.*)"\);/) { franta-hg@95: print "\n"; franta-hg@94: } franta-hg@94: } franta-hg@95: ]]> franta-hg@95: franta-hg@95:
JazykInterpret
$1$2
franta-hg@94: franta-hg@107:

Perl – ukázka

franta-hg@94:

Jazyky použité nebo citované na této stránce:

franta-hg@99: franta-hg@94:
) {
franta-hg@94: 	if (/m:skript\s+jazyk="(\w+)"/) {
franta-hg@94: 		$skripty{$1}++;
franta-hg@94: 	}
franta-hg@94: }
franta-hg@94: 
franta-hg@94: for(keys(%skripty)) {
franta-hg@94: 	print "$skripty{$_}×\t $_\n";
franta-hg@94: }
franta-hg@94: 			]]>
franta-hg@94: franta-hg@107:

BASH – ukázka

franta-hg@94:
franta-hg@94: franta-hg@94: franta-hg@94: franta-hg@94:

Proměnné prostředí

franta-hg@94:

franta-hg@94: Ve skriptech máme dostupné následující proměnné prostředí: franta-hg@94:

franta-hg@94: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@95: franta-hg@103: franta-hg@103: franta-hg@95: franta-hg@95:
ProměnnáVýznam
franta-hg@94: franta-hg@94:

franta-hg@94: Kód: franta-hg@94:

franta-hg@94: franta-hg@94: franta-hg@94: echo "URI: $XWG_STRANKA_URI"; franta-hg@94: echo "Soubor: $XWG_STRANKA_SOUBOR"; franta-hg@94: echo "Nadpis: $XWG_STRANKA_NADPIS"; franta-hg@94: echo "Perex: $XWG_STRANKA_PEREX"; franta-hg@94: ]]> franta-hg@94: franta-hg@94:

nám vypíše:

franta-hg@94: franta-hg@94:
franta-hg@94: franta-hg@107:

Makra ve skriptech

franta-hg@107:

franta-hg@107: XML generované skriptem může také obsahovat makra, která se následně interptetují. franta-hg@107: '; # Ty zrůdo! :-) franta-hg@107: echo 'echo "Takže můžeš skriptovat, když skriptuješ,";'; franta-hg@107: echo ''; franta-hg@107: ]]> franta-hg@107: nebo dělat něco užitečnějšího. franta-hg@107:

franta-hg@107: franta-hg@107: \n"; franta-hg@107: print " node [shape=\"box\"];\n"; franta-hg@107: print " koren [label=\"Uživatelská makra\"];\n"; franta-hg@107: franta-hg@107: opendir(DIR, $adresar) or die $!; franta-hg@107: my $i = 0; franta-hg@107: while (readdir(DIR)) { franta-hg@107: next if (/^\./); franta-hg@107: # Měli bychom ošetřit zvláštní znaky v názvech souborů, franta-hg@107: # abychom nezpůsobili chybu GraphVizu. franta-hg@107: print "n$i [label=\"$_\"];\n"; franta-hg@107: print "koren -> n$i;\n"; franta-hg@107: $i++; franta-hg@107: } franta-hg@107: print ""; franta-hg@107: closedir(DIR); franta-hg@107: ]]> franta-hg@107: franta-hg@107:

…třeba vygenerovat tento diagram následujícím perlovským skriptem:

franta-hg@107: franta-hg@107: \n"; franta-hg@107: print " node [shape=\"box\"];\n"; franta-hg@107: print " koren [label=\"Uživatelská makra\"];\n"; franta-hg@107: franta-hg@107: opendir(DIR, $adresar) or die $!; franta-hg@107: my $i = 0; franta-hg@107: while (readdir(DIR)) { franta-hg@107: next if (/^\./); franta-hg@107: # Měli bychom ošetřit zvláštní znaky v názvech souborů, franta-hg@107: # abychom nezpůsobili chybu GraphVizu. franta-hg@107: print "n$i [label=\"$_\"];\n"; franta-hg@107: print "koren -> n$i;\n"; franta-hg@107: $i++; franta-hg@107: } franta-hg@107: print ""; franta-hg@107: closedir(DIR);]]> franta-hg@107: franta-hg@107:

franta-hg@107: Který vložíme zabalený v  … ]]> do stránky. franta-hg@107:

franta-hg@107:

franta-hg@107: Známá chyba: ve skriptech zatím nefungují poznámky pod čarou (a není jisté, jestli kdy fungovat budou – pravděpodobně by to vyžadovalo vícefázové zpracování). franta-hg@107:

franta-hg@107: franta-hg@107:

Skripty v makrech

franta-hg@107:

franta-hg@107: Uvnitř maker můžeme volat franta-hg@107: Ovšem trochu jiným způsobem, než ve stránkách – franta-hg@107: nacházíme se totiž v programu (XSL šablona definující makro) franta-hg@107: nikoli v datovém souboru (XML stránka). franta-hg@107: franta-hg@107: jiná makra – mj. skripty. franta-hg@107: Toho jsme využili v makru, které generuje tabulku verzí z mercurialu: franta-hg@107:

franta-hg@107: franta-hg@107: franta-hg@107: franta-hg@107:

franta-hg@107: Toto makro naleznete v souboru vstup/makra/hg-verze.xsl. franta-hg@107:

franta-hg@107: franta-hg@94:
franta-hg@94: franta-hg@94:
franta-hg@94: