vstup/skriptování.xml
changeset 107 379a2a893fd1
parent 105 f2e79d6b0ad3
child 108 8d9cab64c335
--- 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>