1.1 --- a/vstup/skriptování.xml Thu Jul 05 14:27:01 2012 +0200
1.2 +++ b/vstup/skriptování.xml Thu Jul 05 19:10:42 2012 +0200
1.3 @@ -22,9 +22,11 @@
1.4
1.5 <p>
1.6 Díky skriptování můžeme stránky obohatit o prakticky libovolný obsah –
1.7 - jak prostý text, tak i XHTML fragmenty.<m:podČarou>zapíná se pomocí atributu
1.8 - <code>výstup="xml"</code> a generátor pak kontroluje správné formátování –
1.9 - nestane se vám, že byste omylem vygenerovali stránky s překříženými nebo neuzavřenými značkami.</m:podČarou>
1.10 + jak prostý text, tak i XHTML fragmenty.<m:podČarou>
1.11 + Zapíná se pomocí atributu <code>výstup="xml"</code> a generátor pak kontroluje správné formátování –
1.12 + nestane se vám, že byste omylem vygenerovali stránky s překříženými nebo neuzavřenými značkami.
1.13 + Výchozím jmenným prostorem je XHTML a je dostupný i jmenný prostor pro makra (<code>m</code>).
1.14 + </m:podČarou>
1.15 </p>
1.16 <p>
1.17 Skriptování ale může být nebezpečné, pokud byste spustili generátor na stránkách,
1.18 @@ -62,7 +64,7 @@
1.19 </tbody>
1.20 </table>
1.21
1.22 - <h2>Perl</h2>
1.23 + <h2>Perl – ukázka</h2>
1.24 <p>Jazyky použité nebo citované na této stránce:</p>
1.25 <!--
1.26 Lepšího výsledku bychom samozřejmě dosáhli pomocí XPath dotazu,
1.27 @@ -86,7 +88,7 @@
1.28 }
1.29 ]]></m:skript></pre>
1.30
1.31 - <h2>BASH</h2>
1.32 + <h2>BASH – ukázka</h2>
1.33 <pre><m:skript jazyk="bash"><![CDATA[
1.34 echo -n "Právě je: ";
1.35 date;
1.36 @@ -143,6 +145,90 @@
1.37 echo "Perex: $XWG_STRANKA_PEREX";
1.38 ]]></m:skript></pre>
1.39
1.40 + <h2>Makra ve skriptech</h2>
1.41 + <p>
1.42 + XML generované skriptem může také obsahovat makra, která se následně interptetují.
1.43 + <m:skript jazyk="bash" výstup="xml"><![CDATA[
1.44 +echo '<m:skript jazyk="bash">'; # Ty zrůdo! :-)
1.45 +echo 'echo "Takže můžeš skriptovat, když skriptuješ,";';
1.46 +echo '</m:skript>';
1.47 + ]]></m:skript>
1.48 + nebo dělat něco užitečnějšího.
1.49 + </p>
1.50 +
1.51 + <m:skript jazyk="perl" výstup="xml"><![CDATA[
1.52 +use strict;
1.53 +use warnings;
1.54 +
1.55 +my $adresar = "vstup/makra";
1.56 +
1.57 +print "<m:diagram nadpis='Uživatelská makra v adresáři $adresar'>\n";
1.58 +print " node [shape=\"box\"];\n";
1.59 +print " koren [label=\"Uživatelská makra\"];\n";
1.60 +
1.61 +opendir(DIR, $adresar) or die $!;
1.62 +my $i = 0;
1.63 +while (readdir(DIR)) {
1.64 + next if (/^\./);
1.65 + # Měli bychom ošetřit zvláštní znaky v názvech souborů,
1.66 + # abychom nezpůsobili chybu GraphVizu.
1.67 + print "n$i [label=\"$_\"];\n";
1.68 + print "koren -> n$i;\n";
1.69 + $i++;
1.70 +}
1.71 +print "</m:diagram>";
1.72 +closedir(DIR);
1.73 + ]]></m:skript>
1.74 +
1.75 + <p>…třeba vygenerovat tento diagram následujícím perlovským skriptem:</p>
1.76 +
1.77 + <m:pre jazyk="perl"><![CDATA[
1.78 +use strict;
1.79 +use warnings;
1.80 +
1.81 +my $adresar = "vstup/makra";
1.82 +
1.83 +print "<m:diagram nadpis='Uživatelská makra v adresáři $adresar'>\n";
1.84 +print " node [shape=\"box\"];\n";
1.85 +print " koren [label=\"Uživatelská makra\"];\n";
1.86 +
1.87 +opendir(DIR, $adresar) or die $!;
1.88 +my $i = 0;
1.89 +while (readdir(DIR)) {
1.90 + next if (/^\./);
1.91 + # Měli bychom ošetřit zvláštní znaky v názvech souborů,
1.92 + # abychom nezpůsobili chybu GraphVizu.
1.93 + print "n$i [label=\"$_\"];\n";
1.94 + print "koren -> n$i;\n";
1.95 + $i++;
1.96 +}
1.97 +print "</m:diagram>";
1.98 +closedir(DIR);]]></m:pre>
1.99 +
1.100 + <p>
1.101 + Který vložíme zabalený v <code><![CDATA[<m:skript jazyk="perl" výstup="xml"> … </m:skript>]]></code> do stránky.
1.102 + </p>
1.103 + <p>
1.104 + 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í).
1.105 + </p>
1.106 +
1.107 + <h2>Skripty v makrech</h2>
1.108 + <p>
1.109 + Uvnitř maker můžeme volat<m:podČarou>
1.110 + Ovšem trochu jiným způsobem, než ve stránkách –
1.111 + nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
1.112 + nikoli v <em>datovém souboru</em> (XML stránka).
1.113 + </m:podČarou>
1.114 + jiná makra – mj. skripty.
1.115 + Toho jsme využili v makru, které generuje tabulku verzí z mercurialu:
1.116 + </p>
1.117 +
1.118 + <m:hg-verze/>
1.119 +
1.120 + <p>
1.121 + Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
1.122 + </p>
1.123 +
1.124 </text>
1.125
1.126 </stránka>