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