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í |
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 |