diff -r eec920c4bddf -r 4d33f14e99dd vstup/skriptování.xml --- a/vstup/skriptování.xml Sun Jul 08 12:55:27 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,358 +0,0 @@ - - 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="xhtml" 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"; - } -} - ]]> - -
JazykInterpret
$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 ze skriptů

-

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

- -

Makra ve skriptech

- -

- Uvnitř zdrojového kódu skriptu můžeme používat jiná makra. - Např. tento kód: -

- - - - print "Náš podnik se jmenuje "; - -]]> - -

- nám vygeneruje: -

- -

-				print "Náš podnik se jmenuje ";
-		
- -

- Můžete si tak vytvořit makra pro opakující se části - a používat je jak v textu stránek, tak ve skriptech nebo diagramech. - Jen pozor na ošetření zvláštních znaků – pokud text takové znaky obsahuje, - je dobré ho zabalit ještě do jedné značky, která se postará o escapování - pro daný kontext (skriptovací jazyk a prostředí v něm – např. apostrofy vs. uvozovky). - -

- -

- Jen pro připomenutí: nejedná se o nějaké primitivní zástupky a nahrazování textu - – makra můžou být parametrizovaná, obsahovat atributy (např. pád a číslo) nebo vnořené elementy - a na základě této parametrizace vytvářet odlišný výstup, který je následně předán skriptu. -

- -

-			echo "S naší  budete jistě spokojeni!";
-			echo "Stejně jako my jsme spokojeni s operačním systémem `uname -o`.";
-		
- -

- Zdrojový kód: -

- - - - - echo "S naší budete jistě spokojeni!"; - echo "Stejně jako my jsme spokojeni s operačním systémem `uname -o`."; - -]]> - -

- Skripty v těchto příkladech nejsou příliš užitečné, protože pouze vypisují text, - který by šlo vložit přímo do XML stránky - – předpokládá se, že ve svých skriptech budete dělat něco zajímavějšího :-) -

- -

Skripty v makrech

-

- Uvnitř definic 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 - – ten umí vypsat historii úložiště v XML, které následně snadno zpracujeme v XSLT. -

- - - -

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

- -

Vnořování maker

-

- Trochu jiný případ je vnořování maker na stránce. - Např. si chceme vypsat vybrané internetové služby: -

- - ) { - if (/(\w+)\s+(21|22|25|80)\/(tcp)/) { - print "$2\t$1\t$3\n"; - } -} - ]]> - - -

- Pro vygenerování použijeme dvě makra – tabulku a skript – která vložíme do textu stránky: -

- - - ) { - if (/(\w+)\s+(21|22|25|80)\/(tcp)/) { - print "$2\t$1\t$3\n"; - } - } - ]]]]>> -]]> - -

- Ve skriptu v tomto případě negenerujeme XHTML značky, ale CSV (s tabulátory) - a o převod na XHTML tabulku se postará XSL šablona. -

- - - -

- Podobně bychom mohli postupovat i u diagramu – - negenerovat skriptem značky makra, ale pouze jeho obsah – zadání diagramu, nebo jen jeho část. - Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky. -

- -

- Skriptování lze použít i pro generování zdrojového kódu, který bude následně zvýrazněn - pomocí značky <m:pre jazyk="…"/>. - Toho využíváme na stránce Zdrojové kódy v případě SQL a XML ukázek. - Skript můžeme použít mj. i ke zkrácení zdrojáku – když chceme vypsat jen jeho relevantní část. -

- -
- -
-