Changeset 111:d59023a42d4b
- Timestamp:
- 07/05/12 23:31:49 (12 years ago)
- Author:
- František Kučera <franta-hg@…>
- Branch:
- default
- Message:
-
#20 Skriptování: vnořování maker – zadání tabulky nebo diagramu může být generované skriptem.
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
r110
|
r111
|
|
75 | 75 | use warnings; |
76 | 76 | |
77 | | open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"}); |
| 77 | open(XML, "<", $ENV{"XWG_STRANKA_SOUBOR"}) or die $!; |
78 | 78 | my %skripty; |
79 | 79 | |
… |
… |
|
89 | 89 | ]]></m:skript></pre> |
90 | 90 | |
91 | | <h3>BASH – ukázka</h3> |
| 91 | <h3>BASH – ukázka</h3> |
92 | 92 | <pre><m:skript jazyk="bash"><![CDATA[ |
93 | 93 | echo -n "Právě je: "; |
… |
… |
|
146 | 146 | ]]></m:skript></pre> |
147 | 147 | |
148 | | <h2>Makra ve skriptech</h2> |
| 148 | <h2 id="makraVeSkriptech">Makra ve skriptech</h2> |
149 | 149 | <p> |
150 | 150 | XML generované skriptem může také obsahovat makra, která se následně interptetují. |
… |
… |
|
223 | 223 | </m:podČarou> |
224 | 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 | 227 | </p> |
227 | 228 | |
… |
… |
|
232 | 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 | ]]]]>><![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 | 289 | </text> |
235 | 290 | |
-
r87
|
r111
|
|
36 | 36 | --> |
37 | 37 | <xsl:template match="m:diagram"> |
| 38 | <xsl:variable name="zadání"> |
| 39 | <xsl:apply-templates select="*|text()"/> |
| 40 | </xsl:variable> |
38 | 41 | <xsl:call-template name="vložDiagram"> |
39 | | <xsl:with-param name="zadání" select="text()"/> |
| 42 | <xsl:with-param name="zadání" select="$zadání"/> |
40 | 43 | <xsl:with-param name="kompletní" select="@kompletní = 'ano'"/> |
41 | 44 | </xsl:call-template> |
-
r90
|
r111
|
|
40 | 40 | </xsl:template> |
41 | 41 | |
| 42 | <!-- Skript je potřeba interpretovat ještě před tabulkou – ostatní makra budou interpretovat uvnitř buněk --> |
| 43 | <xsl:template match="m:tabulka[m:skript]"> |
| 44 | <xsl:variable name="zadání"> |
| 45 | <xsl:apply-templates select="*"/> |
| 46 | </xsl:variable> |
| 47 | <xsl:call-template name="vykresliTabulku"> |
| 48 | <xsl:with-param name="zadání" select="$zadání"/> |
| 49 | <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/> |
| 50 | </xsl:call-template> |
| 51 | </xsl:template> |
| 52 | |
| 53 | <!-- Tabulka načítaná ze souboru: --> |
42 | 54 | <xsl:template match="m:tabulka[@src]"> |
43 | 55 | <xsl:call-template name="vykresliTabulku"> |
… |
… |
|
47 | 59 | </xsl:template> |
48 | 60 | |
| 61 | <!-- TODO: Umožnit použití maker a značek uvnitř buněk tabulky. --> |
49 | 62 | <xsl:template name="vykresliTabulku"> |
50 | 63 | <xsl:param name="zadání"/> |