vstup/skriptování.xml
changeset 111 d59023a42d4b
parent 110 d43098fac783
child 112 7d4b23ccf144
--- a/vstup/skriptování.xml	Thu Jul 05 21:13:56 2012 +0200
+++ b/vstup/skriptování.xml	Thu Jul 05 23:31:49 2012 +0200
@@ -74,7 +74,7 @@
 use strict;
 use warnings;
 
-open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"});
+open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"}) or die $!;
 my %skripty;
 
 while (<XML>) {
@@ -88,7 +88,7 @@
 }
 			]]></m:skript></pre>
 
-			<h3>BASH – ukázka</h3>
+		<h3>BASH – ukázka</h3>
 		<pre><m:skript jazyk="bash"><![CDATA[
 echo -n "Právě je: ";
 date;
@@ -145,7 +145,7 @@
 echo "Perex:  $XWG_STRANKA_PEREX";
 		]]></m:skript></pre>
 
-		<h2>Makra ve skriptech</h2>
+		<h2 id="makraVeSkriptech">Makra ve skriptech</h2>
 		<p>
 			XML generované skriptem může také obsahovat makra, která se následně interptetují.
 			<m:skript jazyk="bash" výstup="xhtml"><![CDATA[
@@ -222,7 +222,8 @@
 				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:
+			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.
 		</p>
 
 		<m:hg-verze/>
@@ -231,6 +232,60 @@
 			Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
 		</p>
 
+		<h2>Vnořování maker</h2>
+		<p>
+			Trochu jiný případ je vnořování maker na stránce.
+			Např. si chceme vypsat vybrané internetové služby:
+		</p>
+		<m:tabulka>
+			<m:skript jazyk="perl"><![CDATA[
+use strict;
+use warnings;
+
+print "Port\tSlužba\tProtokol\n";
+open(S, "<", "/etc/services") or die $!;
+while (<S>) {
+	if (/(\w+)\s+(21|22|25|80)\/(tcp)/) {
+		print "$2\t$1\t$3\n";
+	}
+}
+			]]></m:skript>
+		</m:tabulka>
+		
+		<p>
+			Pro vygenerování použijeme dvě makra – tabulku a skript – která vložíme do textu stránky:
+		</p>
+		
+		<m:pre jazyk="xml"><![CDATA[
+<m:tabulka>
+	<m:skript jazyk="perl"><![CDATA[
+		print "Port\tSlužba\tProtokol\n";
+		open(S, "<", "/etc/services") or die $!;
+		while (<S>) {
+			if (/(\w+)\s+(21|22|25|80)\/(tcp)/) {
+				print "$2\t$1\t$3\n";
+			}
+		}
+	]]]]>&gt;<![CDATA[</m:skript>
+</m:tabulka>]]></m:pre>
+
+		<p>
+			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.
+		</p>
+
+		<!--
+			Nebo to taky můžeme napsat na jeden řádek:
+			cat /etc/services | perl -ne 'if (/(\w+)\s+(21|22|25|80)\/(tcp)/) { print "$2\t$1\t$3\n";}'
+			a vložit do tabulky jako BASH skript :-)
+		-->
+
+		<p>
+			Podobně bychom mohli postupovat i u <a href="#makraVeSkriptech">diagramu</a> –
+			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.
+		</p>
+
 	</text>
 
 </stránka>