vstup/skriptování.xml
changeset 111 d59023a42d4b
parent 110 d43098fac783
child 112 7d4b23ccf144
     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 +	]]]]>&gt;<![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>