1.1 --- a/vstup/skriptování.xml Thu Jul 05 21:13:56 2012 +0200
1.2 +++ b/vstup/skriptování.xml Thu Jul 05 23:31:49 2012 +0200
1.3 @@ -74,7 +74,7 @@
1.4 use strict;
1.5 use warnings;
1.6
1.7 -open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"});
1.8 +open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"}) or die $!;
1.9 my %skripty;
1.10
1.11 while (<XML>) {
1.12 @@ -88,7 +88,7 @@
1.13 }
1.14 ]]></m:skript></pre>
1.15
1.16 - <h3>BASH – ukázka</h3>
1.17 + <h3>BASH – ukázka</h3>
1.18 <pre><m:skript jazyk="bash"><![CDATA[
1.19 echo -n "Právě je: ";
1.20 date;
1.21 @@ -145,7 +145,7 @@
1.22 echo "Perex: $XWG_STRANKA_PEREX";
1.23 ]]></m:skript></pre>
1.24
1.25 - <h2>Makra ve skriptech</h2>
1.26 + <h2 id="makraVeSkriptech">Makra ve skriptech</h2>
1.27 <p>
1.28 XML generované skriptem může také obsahovat makra, která se následně interptetují.
1.29 <m:skript jazyk="bash" výstup="xhtml"><![CDATA[
1.30 @@ -222,7 +222,8 @@
1.31 nikoli v <em>datovém souboru</em> (XML stránka).
1.32 </m:podČarou>
1.33 jiná makra – mj. skripty.
1.34 - Toho jsme využili v makru, které generuje tabulku verzí z mercurialu:
1.35 + Toho jsme využili v makru, které generuje tabulku verzí z mercurialu
1.36 + – ten umí vypsat historii úložiště v XML, které následně snadno zpracujeme v XSLT.
1.37 </p>
1.38
1.39 <m:hg-verze/>
1.40 @@ -231,6 +232,60 @@
1.41 Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
1.42 </p>
1.43
1.44 + <h2>Vnořování maker</h2>
1.45 + <p>
1.46 + Trochu jiný případ je vnořování maker na stránce.
1.47 + Např. si chceme vypsat vybrané internetové služby:
1.48 + </p>
1.49 + <m:tabulka>
1.50 + <m:skript jazyk="perl"><![CDATA[
1.51 +use strict;
1.52 +use warnings;
1.53 +
1.54 +print "Port\tSlužba\tProtokol\n";
1.55 +open(S, "<", "/etc/services") or die $!;
1.56 +while (<S>) {
1.57 + if (/(\w+)\s+(21|22|25|80)\/(tcp)/) {
1.58 + print "$2\t$1\t$3\n";
1.59 + }
1.60 +}
1.61 + ]]></m:skript>
1.62 + </m:tabulka>
1.63 +
1.64 + <p>
1.65 + Pro vygenerování použijeme dvě makra – tabulku a skript – která vložíme do textu stránky:
1.66 + </p>
1.67 +
1.68 + <m:pre jazyk="xml"><![CDATA[
1.69 +<m:tabulka>
1.70 + <m:skript jazyk="perl"><![CDATA[
1.71 + print "Port\tSlužba\tProtokol\n";
1.72 + open(S, "<", "/etc/services") or die $!;
1.73 + while (<S>) {
1.74 + if (/(\w+)\s+(21|22|25|80)\/(tcp)/) {
1.75 + print "$2\t$1\t$3\n";
1.76 + }
1.77 + }
1.78 + ]]]]>><![CDATA[</m:skript>
1.79 +</m:tabulka>]]></m:pre>
1.80 +
1.81 + <p>
1.82 + Ve skriptu v tomto případě negenerujeme XHTML značky, ale CSV (s tabulátory)
1.83 + a o převod na XHTML tabulku se postará XSL šablona.
1.84 + </p>
1.85 +
1.86 + <!--
1.87 + Nebo to taky můžeme napsat na jeden řádek:
1.88 + cat /etc/services | perl -ne 'if (/(\w+)\s+(21|22|25|80)\/(tcp)/) { print "$2\t$1\t$3\n";}'
1.89 + a vložit do tabulky jako BASH skript :-)
1.90 + -->
1.91 +
1.92 + <p>
1.93 + Podobně bychom mohli postupovat i u <a href="#makraVeSkriptech">diagramu</a> –
1.94 + negenerovat skriptem značky makra, ale pouze jeho obsah – zadání diagramu, nebo jen jeho část.
1.95 + Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky.
1.96 + </p>
1.97 +
1.98 </text>
1.99
1.100 </stránka>