Skriptování Na stránku můžeme vložit výstup skriptů. 50

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

Příklad: Tyto stránky byly vygenerované v systému uname -o.

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

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

Podporované jazyky

V současnosti jsou podporované tyto jazyky:

) { if (/podporovanýJazyk\.put\("(\w+)",\s*"(.*)"\);/) { print "\n"; } } ]]>
Jazyk Interpret
$1$2

Perl – ukázka

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

) {
	if (/m:skript\s+jazyk="(\w+)"/) {
		$skripty{$1}++;
	}
}

for(keys(%skripty)) {
	print "$skripty{$_}×\t $_\n";
}
			]]>

BASH – ukázka

Proměnné prostředí

Ve skriptech máme dostupné následující proměnné prostředí:

Proměnná Význam

Kód:

echo "URI: $XWG_STRANKA_URI"; echo "Soubor: $XWG_STRANKA_SOUBOR"; echo "Nadpis: $XWG_STRANKA_NADPIS"; echo "Perex: $XWG_STRANKA_PEREX"; ]]>

nám vypíše:

Makra ve skriptech

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

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

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

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

Který vložíme zabalený v  … ]]> do stránky.

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í).

Skripty v makrech

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

Toto makro naleznete v souboru vstup/makra/hg-verze.xsl.