vstup/skriptování.xml
changeset 111 d59023a42d4b
parent 110 d43098fac783
child 112 7d4b23ccf144
equal deleted inserted replaced
110:d43098fac783 111:d59023a42d4b
    72 		-->
    72 		-->
    73 		<pre><m:skript jazyk="perl"><![CDATA[
    73 		<pre><m:skript jazyk="perl"><![CDATA[
    74 use strict;
    74 use strict;
    75 use warnings;
    75 use warnings;
    76 
    76 
    77 open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"});
    77 open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"}) or die $!;
    78 my %skripty;
    78 my %skripty;
    79 
    79 
    80 while (<XML>) {
    80 while (<XML>) {
    81 	if (/m:skript\s+jazyk="(\w+)"/) {
    81 	if (/m:skript\s+jazyk="(\w+)"/) {
    82 		$skripty{$1}++;
    82 		$skripty{$1}++;
    86 for(keys(%skripty)) {
    86 for(keys(%skripty)) {
    87 	print "$skripty{$_}×\t $_\n";
    87 	print "$skripty{$_}×\t $_\n";
    88 }
    88 }
    89 			]]></m:skript></pre>
    89 			]]></m:skript></pre>
    90 
    90 
    91 			<h3>BASH – ukázka</h3>
    91 		<h3>BASH – ukázka</h3>
    92 		<pre><m:skript jazyk="bash"><![CDATA[
    92 		<pre><m:skript jazyk="bash"><![CDATA[
    93 echo -n "Právě je: ";
    93 echo -n "Právě je: ";
    94 date;
    94 date;
    95 echo -n "Operační systém: ";
    95 echo -n "Operační systém: ";
    96 uname -o;
    96 uname -o;
   143 echo "Soubor: $XWG_STRANKA_SOUBOR" | sed s/\\/home\\/$USER/\\/home\\/xwg/g;
   143 echo "Soubor: $XWG_STRANKA_SOUBOR" | sed s/\\/home\\/$USER/\\/home\\/xwg/g;
   144 echo "Nadpis: $XWG_STRANKA_NADPIS";
   144 echo "Nadpis: $XWG_STRANKA_NADPIS";
   145 echo "Perex:  $XWG_STRANKA_PEREX";
   145 echo "Perex:  $XWG_STRANKA_PEREX";
   146 		]]></m:skript></pre>
   146 		]]></m:skript></pre>
   147 
   147 
   148 		<h2>Makra ve skriptech</h2>
   148 		<h2 id="makraVeSkriptech">Makra ve skriptech</h2>
   149 		<p>
   149 		<p>
   150 			XML generované skriptem může také obsahovat makra, která se následně interptetují.
   150 			XML generované skriptem může také obsahovat makra, která se následně interptetují.
   151 			<m:skript jazyk="bash" výstup="xhtml"><![CDATA[
   151 			<m:skript jazyk="bash" výstup="xhtml"><![CDATA[
   152 echo '<m:skript jazyk="bash">'; # Ty zrůdo! :-)
   152 echo '<m:skript jazyk="bash">'; # Ty zrůdo! :-)
   153 echo 'echo "Takže můžeš skriptovat, když skriptuješ,";';
   153 echo 'echo "Takže můžeš skriptovat, když skriptuješ,";';
   220 				Ovšem trochu jiným způsobem, než ve stránkách –
   220 				Ovšem trochu jiným způsobem, než ve stránkách –
   221 				nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
   221 				nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
   222 				nikoli v <em>datovém souboru</em> (XML stránka).
   222 				nikoli v <em>datovém souboru</em> (XML stránka).
   223 			</m:podČarou>
   223 			</m:podČarou>
   224 			jiná makra – mj. skripty.
   224 			jiná makra – mj. skripty.
   225 			Toho jsme využili v makru, které generuje tabulku verzí z mercurialu:
   225 			Toho jsme využili v makru, které generuje tabulku verzí z mercurialu
       
   226 			– ten umí vypsat historii úložiště v XML, které následně snadno zpracujeme v XSLT.
   226 		</p>
   227 		</p>
   227 
   228 
   228 		<m:hg-verze/>
   229 		<m:hg-verze/>
   229 
   230 
   230 		<p>
   231 		<p>
   231 			Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
   232 			Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
   232 		</p>
   233 		</p>
   233 
   234 
       
   235 		<h2>Vnořování maker</h2>
       
   236 		<p>
       
   237 			Trochu jiný případ je vnořování maker na stránce.
       
   238 			Např. si chceme vypsat vybrané internetové služby:
       
   239 		</p>
       
   240 		<m:tabulka>
       
   241 			<m:skript jazyk="perl"><![CDATA[
       
   242 use strict;
       
   243 use warnings;
       
   244 
       
   245 print "Port\tSlužba\tProtokol\n";
       
   246 open(S, "<", "/etc/services") or die $!;
       
   247 while (<S>) {
       
   248 	if (/(\w+)\s+(21|22|25|80)\/(tcp)/) {
       
   249 		print "$2\t$1\t$3\n";
       
   250 	}
       
   251 }
       
   252 			]]></m:skript>
       
   253 		</m:tabulka>
       
   254 		
       
   255 		<p>
       
   256 			Pro vygenerování použijeme dvě makra – tabulku a skript – která vložíme do textu stránky:
       
   257 		</p>
       
   258 		
       
   259 		<m:pre jazyk="xml"><![CDATA[
       
   260 <m:tabulka>
       
   261 	<m:skript jazyk="perl"><![CDATA[
       
   262 		print "Port\tSlužba\tProtokol\n";
       
   263 		open(S, "<", "/etc/services") or die $!;
       
   264 		while (<S>) {
       
   265 			if (/(\w+)\s+(21|22|25|80)\/(tcp)/) {
       
   266 				print "$2\t$1\t$3\n";
       
   267 			}
       
   268 		}
       
   269 	]]]]>&gt;<![CDATA[</m:skript>
       
   270 </m:tabulka>]]></m:pre>
       
   271 
       
   272 		<p>
       
   273 			Ve skriptu v tomto případě negenerujeme XHTML značky, ale CSV (s tabulátory)
       
   274 			a o převod na XHTML tabulku se postará XSL šablona.
       
   275 		</p>
       
   276 
       
   277 		<!--
       
   278 			Nebo to taky můžeme napsat na jeden řádek:
       
   279 			cat /etc/services | perl -ne 'if (/(\w+)\s+(21|22|25|80)\/(tcp)/) { print "$2\t$1\t$3\n";}'
       
   280 			a vložit do tabulky jako BASH skript :-)
       
   281 		-->
       
   282 
       
   283 		<p>
       
   284 			Podobně bychom mohli postupovat i u <a href="#makraVeSkriptech">diagramu</a> –
       
   285 			negenerovat skriptem značky makra, ale pouze jeho obsah – zadání diagramu, nebo jen jeho část.
       
   286 			Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky.
       
   287 		</p>
       
   288 
   234 	</text>
   289 	</text>
   235 
   290 
   236 </stránka>
   291 </stránka>
   237 
   292