Changeset 113:18bf0044f5ab

Show
Ignore:
Timestamp:
07/06/12 14:52:05 (12 years ago)
Author:
František Kučera <franta-hg@…>
Branch:
default
Message:

#20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu).

Files:
1 added
5 modified

Legend:

Unmodified
Added
Removed
  • vstup/kontakt.xml

    r97 r113  
    1111                <p> 
    1212                        <strong>Naše adresa:</strong><br/> 
     13                        <m:firma/><br/> 
    1314                        Polární 128<br/> 
    1415                        Tučňákova Lhota<br/> 
  • vstup/skriptování.xml

    r112 r113  
    146146                ]]></m:skript></pre> 
    147147 
    148                 <h2 id="makraVeSkriptech">Makra ve skriptech</h2> 
     148                <h2 id="makraZeSkriptů">Makra ze skriptů</h2> 
    149149                <p> 
    150150                        XML generované skriptem může také obsahovat makra, která se následně interptetují. 
     
    215215                </p> 
    216216 
     217                <h2>Makra ve skriptech</h2> 
     218                 
     219                <p> 
     220                        Uvnitř zdrojového kódu skriptu můžeme používat jiná makra. 
     221                        Např. tento kód: 
     222                </p> 
     223 
     224                <m:pre jazyk="xml"><![CDATA[<pre> 
     225        <m:skript jazyk="bash"> 
     226                echo "Náš podnik se jmenuje <m:firma/>"; 
     227        </m:skript> 
     228</pre>]]></m:pre> 
     229 
     230                <p> 
     231                        nám vygeneruje: 
     232                </p> 
     233 
     234                <pre><m:skript jazyk="bash"> 
     235                                echo "Náš podnik se jmenuje <m:firma/>"; 
     236                </m:skript></pre> 
     237 
     238                <p> 
     239                        Můžete si tak vytvořit makra pro opakující se části 
     240                        a používat je jak v textu stránek, tak ve skriptech nebo diagramech. 
     241                        Jen pozor na ošetření zvláštních znaků – pokud text takové znaky obsahuje, 
     242                        je dobré ho zabalit ještě do jedné značky, která se postará o <em>escapování</em>  
     243                        pro daný kontext (skriptovací jazyk a prostředí v něm – např. apostrofy vs. uvozovky). 
     244                </p> 
     245 
    217246                <h2>Skripty v makrech</h2> 
    218247                <p> 
    219                         Uvnitř maker můžeme volat<m:podČarou> 
     248                        Uvnitř definic maker můžeme volat<m:podČarou> 
    220249                                Ovšem trochu jiným způsobem, než ve stránkách – 
    221250                                nacházíme se totiž v <em>programu</em> (XSL šablona definující makro) 
     
    282311 
    283312                <p> 
    284                         Podobně bychom mohli postupovat i u <a href="#makraVeSkriptech">diagramu</a> – 
     313                        Podobně bychom mohli postupovat i u <a href="#makraZeSkriptů">diagramu</a> – 
    285314                        negenerovat skriptem značky makra, ale pouze jeho obsah – zadání diagramu, nebo jen jeho část. 
    286315                        Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky. 
  • šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java

    r87 r113  
    22 * XML Web generátor – program na generování webových stránek 
    33 * Copyright © 2012 František Kučera (frantovo.cz) 
    4  *  
     4 * 
    55 * This program is free software: you can redistribute it and/or modify 
    66 * it under the terms of the GNU General Public License as published by 
    77 * the Free Software Foundation, either version 3 of the License, or 
    88 * (at your option) any later version. 
    9  *  
     9 * 
    1010 * This program is distributed in the hope that it will be useful, 
    1111 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
    1313 * GNU General Public License for more details. 
    14  *  
     14 * 
    1515 * You should have received a copy of the GNU General Public License 
    16  * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
     16 * along with this program. If not, see <http://www.gnu.org/licenses/>. 
    1717 */ 
    1818package cz.frantovo.xmlWebGenerator; 
    1919 
    2020import java.io.File; 
    21 import java.util.Date; 
    2221import java.net.URI; 
    2322import java.net.URISyntaxException; 
     23import java.util.Date; 
    2424 
    2525/** 
    2626 * Společná knihovna funkcí volaných z XSLT 
    27  *   
     27 * 
    2828 * @author František Kučera (frantovo.cz) 
    2929 */ 
     
    3232        /** 
    3333         * Zjištuje, kdy byl naposledy daný soubor změněn. 
     34         * 
    3435         * @param soubor cesta k souboru 
    3536         * @return datum poslední změny 
     
    4142                return new Date(f.lastModified()); 
    4243        } 
     44 
     45        public static String spojText(String[] kusyTextu) { 
     46                if (kusyTextu == null || kusyTextu.length < 1) { 
     47                        return null; 
     48                } else { 
     49                        StringBuilder sb = new StringBuilder(); 
     50                        for (int i = 0; i < kusyTextu.length; i++) { 
     51                                sb.append(kusyTextu[i]); 
     52                        } 
     53                        return sb.toString(); 
     54                } 
     55        } 
    4356} 
    44  
  • šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java

    r108 r113  
    1919 
    2020import static cz.frantovo.xmlWebGenerator.NástrojeCLI.načtiProud; 
     21import static cz.frantovo.xmlWebGenerator.Funkce.spojText; 
    2122import static cz.frantovo.xmlWebGenerator.Xmlns.*; 
    2223import java.io.ByteArrayInputStream; 
     
    7576         * @return výstup příkazu buď jako textový řetězec nebo jako XML (DOMSource) 
    7677         */ 
    77         public static Source interpretuj(String skriptText, String skriptSoubor, String jazyk, String výstupníFormát, String uriStránky, String nadpisStránky, String perexStránky) throws Exception { 
    78                 String výstupSkriptu = získejVýstupSkriptu(skriptText, skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky); 
     78        public static Source interpretuj(String[] skriptText, String skriptSoubor, String jazyk, String výstupníFormát, String uriStránky, String nadpisStránky, String perexStránky) throws Exception { 
     79                String výstupSkriptu = získejVýstupSkriptu(spojText(skriptText), skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky); 
    7980                return vyrobXml(výstupSkriptu, zjistiFormát(výstupníFormát)); 
    8081        } 
  • šablona/makra/skriptování.xsl

    r108 r113  
    4545                <xsl:choose> 
    4646                        <xsl:when test="$režim = 'povolit'"> 
     47                                <xsl:variable name="zadáníSkriptu"> 
     48                                        <xsl:apply-templates select="*|text()"/> 
     49                                </xsl:variable> 
    4750                                <xsl:variable name="výstupSkriptu" select="j:interpretuj( 
    48                                                                                                                                         text(), 
     51                                                                                                                                        $zadáníSkriptu, 
    4952                                                                                                                                        @src, 
    5053                                                                                                                                        @jazyk,