Changeset 111:d59023a42d4b
- Timestamp:
- 07/05/12 23:31:49 (13 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í"/> |