vstup/skriptování.xml
changeset 107 379a2a893fd1
parent 105 f2e79d6b0ad3
child 108 8d9cab64c335
equal deleted inserted replaced
106:ae484a54d7fb 107:379a2a893fd1
    20 			</em>
    20 			</em>
    21 		</p>
    21 		</p>
    22 
    22 
    23 		<p>
    23 		<p>
    24 			Díky skriptování můžeme stránky obohatit o prakticky libovolný obsah – 
    24 			Díky skriptování můžeme stránky obohatit o prakticky libovolný obsah – 
    25 			jak prostý text, tak i XHTML fragmenty.<m:podČarou>zapíná se pomocí atributu 
    25 			jak prostý text, tak i XHTML fragmenty.<m:podČarou>
    26 			<code>výstup="xml"</code> a generátor pak kontroluje správné formátování – 
    26 				Zapíná se pomocí atributu <code>výstup="xml"</code> a generátor pak kontroluje správné formátování – 
    27 			nestane se vám, že byste omylem vygenerovali stránky s překříženými nebo neuzavřenými značkami.</m:podČarou>
    27 				nestane se vám, že byste omylem vygenerovali stránky s překříženými nebo neuzavřenými značkami.
       
    28 				Výchozím jmenným prostorem je XHTML a je dostupný i jmenný prostor pro makra (<code>m</code>).
       
    29 			</m:podČarou>
    28 		</p>
    30 		</p>
    29 		<p>
    31 		<p>
    30 			Skriptování ale může být nebezpečné, pokud byste spustili generátor na stránkách,
    32 			Skriptování ale může být nebezpečné, pokud byste spustili generátor na stránkách,
    31 			které psal někdo nedůvěryhodný a vložil do nich škodlivý kód.
    33 			které psal někdo nedůvěryhodný a vložil do nich škodlivý kód.
    32 			Kromě toho, ukázková sada stránek by měla být přeložitelná kdekoli a mít minimum závislostí
    34 			Kromě toho, ukázková sada stránek by měla být přeložitelná kdekoli a mít minimum závislostí
    60 }
    62 }
    61 				]]></m:skript>
    63 				]]></m:skript>
    62 			</tbody>
    64 			</tbody>
    63 		</table>
    65 		</table>
    64 
    66 
    65 		<h2>Perl</h2>
    67 		<h2>Perl – ukázka</h2>
    66 		<p>Jazyky použité nebo citované na této stránce:</p>
    68 		<p>Jazyky použité nebo citované na této stránce:</p>
    67 		<!--
    69 		<!--
    68 			Lepšího výsledku bychom samozřejmě dosáhli pomocí XPath dotazu,
    70 			Lepšího výsledku bychom samozřejmě dosáhli pomocí XPath dotazu,
    69 			ale toto je příklad na Perl :-)
    71 			ale toto je příklad na Perl :-)
    70 		-->
    72 		-->
    84 for(keys(%skripty)) {
    86 for(keys(%skripty)) {
    85 	print "$skripty{$_}×\t $_\n";
    87 	print "$skripty{$_}×\t $_\n";
    86 }
    88 }
    87 			]]></m:skript></pre>
    89 			]]></m:skript></pre>
    88 
    90 
    89 			<h2>BASH</h2>
    91 			<h2>BASH – ukázka</h2>
    90 		<pre><m:skript jazyk="bash"><![CDATA[
    92 		<pre><m:skript jazyk="bash"><![CDATA[
    91 echo -n "Právě je: ";
    93 echo -n "Právě je: ";
    92 date;
    94 date;
    93 echo -n "Operační systém: ";
    95 echo -n "Operační systém: ";
    94 uname -o;
    96 uname -o;
   141 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;
   142 echo "Nadpis: $XWG_STRANKA_NADPIS";
   144 echo "Nadpis: $XWG_STRANKA_NADPIS";
   143 echo "Perex:  $XWG_STRANKA_PEREX";
   145 echo "Perex:  $XWG_STRANKA_PEREX";
   144 		]]></m:skript></pre>
   146 		]]></m:skript></pre>
   145 
   147 
       
   148 		<h2>Makra ve skriptech</h2>
       
   149 		<p>
       
   150 			XML generované skriptem může také obsahovat makra, která se následně interptetují.
       
   151 			<m:skript jazyk="bash" výstup="xml"><![CDATA[
       
   152 echo '<m:skript jazyk="bash">'; # Ty zrůdo! :-)
       
   153 echo 'echo "Takže můžeš skriptovat, když skriptuješ,";';
       
   154 echo '</m:skript>';
       
   155 			]]></m:skript>
       
   156 			nebo dělat něco užitečnějšího.
       
   157 		</p>
       
   158 		
       
   159 		<m:skript jazyk="perl" výstup="xml"><![CDATA[
       
   160 use strict;
       
   161 use warnings;
       
   162 
       
   163 my $adresar = "vstup/makra";
       
   164 
       
   165 print "<m:diagram nadpis='Uživatelská makra v adresáři $adresar'>\n";
       
   166 print "	node		[shape=\"box\"];\n";
       
   167 print "	koren	[label=\"Uživatelská makra\"];\n";
       
   168 
       
   169 opendir(DIR, $adresar) or die $!;
       
   170 my $i = 0;
       
   171 while (readdir(DIR)) {
       
   172 	next if (/^\./);
       
   173 	# Měli bychom ošetřit zvláštní znaky v názvech souborů,
       
   174 	# abychom nezpůsobili chybu GraphVizu.
       
   175 	print "n$i	[label=\"$_\"];\n";
       
   176 	print "koren -> n$i;\n";
       
   177 	$i++;
       
   178 }
       
   179 print "</m:diagram>";
       
   180 closedir(DIR);
       
   181 		]]></m:skript>
       
   182 		
       
   183 		<p>…třeba vygenerovat tento diagram následujícím perlovským skriptem:</p>
       
   184 		
       
   185 		<m:pre jazyk="perl"><![CDATA[
       
   186 use strict;
       
   187 use warnings;
       
   188 
       
   189 my $adresar = "vstup/makra";
       
   190 
       
   191 print "<m:diagram nadpis='Uživatelská makra v adresáři $adresar'>\n";
       
   192 print "	node	[shape=\"box\"];\n";
       
   193 print "	koren	[label=\"Uživatelská makra\"];\n";
       
   194 
       
   195 opendir(DIR, $adresar) or die $!;
       
   196 my $i = 0;
       
   197 while (readdir(DIR)) {
       
   198 	next if (/^\./);
       
   199 	# Měli bychom ošetřit zvláštní znaky v názvech souborů,
       
   200 	# abychom nezpůsobili chybu GraphVizu.
       
   201 	print "n$i	[label=\"$_\"];\n";
       
   202 	print "koren -> n$i;\n";
       
   203 	$i++;
       
   204 }
       
   205 print "</m:diagram>";
       
   206 closedir(DIR);]]></m:pre>
       
   207 
       
   208 		<p>
       
   209 			Který vložíme zabalený v <code><![CDATA[<m:skript jazyk="perl" výstup="xml"> … </m:skript>]]></code> do stránky.
       
   210 		</p>
       
   211 		<p>
       
   212 			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í).
       
   213 		</p>
       
   214 
       
   215 		<h2>Skripty v makrech</h2>
       
   216 		<p>
       
   217 			Uvnitř maker můžeme volat<m:podČarou>
       
   218 				Ovšem trochu jiným způsobem, než ve stránkách –
       
   219 				nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
       
   220 				nikoli v <em>datovém souboru</em> (XML stránka).
       
   221 			</m:podČarou>
       
   222 			jiná makra – mj. skripty.
       
   223 			Toho jsme využili v makru, které generuje tabulku verzí z mercurialu:
       
   224 		</p>
       
   225 
       
   226 		<m:hg-verze/>
       
   227 
       
   228 		<p>
       
   229 			Toto makro naleznete v souboru <code>vstup/makra/hg-verze.xsl</code>.
       
   230 		</p>
       
   231 
   146 	</text>
   232 	</text>
   147 
   233 
   148 </stránka>
   234 </stránka>
   149 
   235