--- a/vstup/skriptování.xml Thu Jul 05 14:27:01 2012 +0200
+++ b/vstup/skriptování.xml Thu Jul 05 19:10:42 2012 +0200
@@ -22,9 +22,11 @@
<p>
Díky skriptování můžeme stránky obohatit o prakticky libovolný obsah –
- jak prostý text, tak i XHTML fragmenty.<m:podČarou>zapíná se pomocí atributu
- <code>výstup="xml"</code> 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.</m:podČarou>
+ jak prostý text, tak i XHTML fragmenty.<m:podČarou>
+ Zapíná se pomocí atributu <code>výstup="xml"</code> 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 (<code>m</code>).
+ </m:podČarou>
</p>
<p>
Skriptování ale může být nebezpečné, pokud byste spustili generátor na stránkách,
@@ -62,7 +64,7 @@
</tbody>
</table>
- <h2>Perl</h2>
+ <h2>Perl – ukázka</h2>
<p>Jazyky použité nebo citované na této stránce:</p>
<!--
Lepšího výsledku bychom samozřejmě dosáhli pomocí XPath dotazu,
@@ -86,7 +88,7 @@
}
]]></m:skript></pre>
- <h2>BASH</h2>
+ <h2>BASH – ukázka</h2>
<pre><m:skript jazyk="bash"><![CDATA[
echo -n "Právě je: ";
date;
@@ -143,6 +145,90 @@
echo "Perex: $XWG_STRANKA_PEREX";
]]></m:skript></pre>
+ <h2>Makra ve skriptech</h2>
+ <p>
+ XML generované skriptem může také obsahovat makra, která se následně interptetují.
+ <m:skript jazyk="bash" výstup="xml"><![CDATA[
+echo '<m:skript jazyk="bash">'; # Ty zrůdo! :-)
+echo 'echo "Takže můžeš skriptovat, když skriptuješ,";';
+echo '</m:skript>';
+ ]]></m:skript>
+ nebo dělat něco užitečnějšího.
+ </p>
+
+ <m:skript jazyk="perl" výstup="xml"><![CDATA[
+use strict;
+use warnings;
+
+my $adresar = "vstup/makra";
+
+print "<m:diagram nadpis='Uživatelská makra v adresáři $adresar'>\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 "</m:diagram>";
+closedir(DIR);
+ ]]></m:skript>
+
+ <p>…třeba vygenerovat tento diagram následujícím perlovským skriptem:</p>
+
+ <m:pre jazyk="perl"><![CDATA[
+use strict;
+use warnings;
+
+my $adresar = "vstup/makra";
+
+print "<m:diagram nadpis='Uživatelská makra v adresáři $adresar'>\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 "</m:diagram>";
+closedir(DIR);]]></m:pre>
+
+ <p>
+ Který vložíme zabalený v <code><![CDATA[<m:skript jazyk="perl" výstup="xml"> … </m:skript>]]></code> do stránky.
+ </p>
+ <p>
+ 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í).
+ </p>
+
+ <h2>Skripty v makrech</h2>
+ <p>
+ Uvnitř maker můžeme volat<m:podČarou>
+ Ovšem trochu jiným způsobem, než ve stránkách –
+ nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
+ nikoli v <em>datovém souboru</em> (XML stránka).
+ </m:podČarou>
+ jiná makra – mj. skripty.
+ Toho jsme využili v makru, které generuje tabulku verzí z mercurialu:
+ </p>
+
+ <m:hg-verze/>
+
+ <p>
+ Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
+ </p>
+
</text>
</stránka>