#20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu).
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 06 Jul 2012 14:52:05 +0200
changeset 11318bf0044f5ab
parent 112 7d4b23ccf144
child 114 9302cf6856ea
#20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu).
vstup/kontakt.xml
vstup/makra/firma.xsl
vstup/skriptování.xml
šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java
šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java
šablona/makra/skriptování.xsl
     1.1 --- a/vstup/kontakt.xml	Fri Jul 06 13:41:35 2012 +0200
     1.2 +++ b/vstup/kontakt.xml	Fri Jul 06 14:52:05 2012 +0200
     1.3 @@ -10,6 +10,7 @@
     1.4  		</p>
     1.5  		<p>
     1.6  			<strong>Naše adresa:</strong><br/>
     1.7 +			<m:firma/><br/>
     1.8  			Polární 128<br/>
     1.9  			Tučňákova Lhota<br/>
    1.10  			Česká republika
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/vstup/makra/firma.xsl	Fri Jul 06 14:52:05 2012 +0200
     2.3 @@ -0,0 +1,19 @@
     2.4 +<?xml version="1.0" encoding="UTF-8"?>
     2.5 +<xsl:stylesheet version="2.0"
     2.6 +	xmlns="http://www.w3.org/1999/xhtml"
     2.7 +	xmlns:h="http://www.w3.org/1999/xhtml"
     2.8 +	xmlns:s="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana"
     2.9 +	xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace"
    2.10 +	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
    2.11 +	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    2.12 +	xmlns:fn="http://www.w3.org/2005/xpath-functions"
    2.13 +	xmlns:svg="http://www.w3.org/2000/svg"
    2.14 +	xmlns:xs="http://www.w3.org/2001/XMLSchema"
    2.15 +	exclude-result-prefixes="fn h s k m xs">
    2.16 +
    2.17 +	<!-- Vypíše název naší firmy: -->
    2.18 +	<xsl:template match="m:firma">
    2.19 +		<xsl:text>Chovatelská stanice a.s.</xsl:text>
    2.20 +	</xsl:template>
    2.21 +
    2.22 +</xsl:stylesheet>
     3.1 --- a/vstup/skriptování.xml	Fri Jul 06 13:41:35 2012 +0200
     3.2 +++ b/vstup/skriptování.xml	Fri Jul 06 14:52:05 2012 +0200
     3.3 @@ -145,7 +145,7 @@
     3.4  echo "Perex:  $XWG_STRANKA_PEREX";
     3.5  		]]></m:skript></pre>
     3.6  
     3.7 -		<h2 id="makraVeSkriptech">Makra ve skriptech</h2>
     3.8 +		<h2 id="makraZeSkriptů">Makra ze skriptů</h2>
     3.9  		<p>
    3.10  			XML generované skriptem může také obsahovat makra, která se následně interptetují.
    3.11  			<m:skript jazyk="bash" výstup="xhtml"><![CDATA[
    3.12 @@ -214,9 +214,38 @@
    3.13  			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í).
    3.14  		</p>
    3.15  
    3.16 +		<h2>Makra ve skriptech</h2>
    3.17 +		
    3.18 +		<p>
    3.19 +			Uvnitř zdrojového kódu skriptu můžeme používat jiná makra.
    3.20 +			Např. tento kód:
    3.21 +		</p>
    3.22 +
    3.23 +		<m:pre jazyk="xml"><![CDATA[<pre>
    3.24 +	<m:skript jazyk="bash">
    3.25 +		echo "Náš podnik se jmenuje <m:firma/>";
    3.26 +	</m:skript>
    3.27 +</pre>]]></m:pre>
    3.28 +
    3.29 +		<p>
    3.30 +			nám vygeneruje:
    3.31 +		</p>
    3.32 +
    3.33 +		<pre><m:skript jazyk="bash">
    3.34 +				echo "Náš podnik se jmenuje <m:firma/>";
    3.35 +		</m:skript></pre>
    3.36 +
    3.37 +		<p>
    3.38 +			Můžete si tak vytvořit makra pro opakující se části
    3.39 +			a používat je jak v textu stránek, tak ve skriptech nebo diagramech.
    3.40 +			Jen pozor na ošetření zvláštních znaků – pokud text takové znaky obsahuje,
    3.41 +			je dobré ho zabalit ještě do jedné značky, která se postará o <em>escapování</em> 
    3.42 +			pro daný kontext (skriptovací jazyk a prostředí v něm – např. apostrofy vs. uvozovky).
    3.43 +		</p>
    3.44 +
    3.45  		<h2>Skripty v makrech</h2>
    3.46  		<p>
    3.47 -			Uvnitř maker můžeme volat<m:podČarou>
    3.48 +			Uvnitř definic maker můžeme volat<m:podČarou>
    3.49  				Ovšem trochu jiným způsobem, než ve stránkách –
    3.50  				nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
    3.51  				nikoli v <em>datovém souboru</em> (XML stránka).
    3.52 @@ -281,7 +310,7 @@
    3.53  		-->
    3.54  
    3.55  		<p>
    3.56 -			Podobně bychom mohli postupovat i u <a href="#makraVeSkriptech">diagramu</a> –
    3.57 +			Podobně bychom mohli postupovat i u <a href="#makraZeSkriptů">diagramu</a> –
    3.58  			negenerovat skriptem značky makra, ale pouze jeho obsah – zadání diagramu, nebo jen jeho část.
    3.59  			Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky.
    3.60  		</p>
     4.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java	Fri Jul 06 13:41:35 2012 +0200
     4.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java	Fri Jul 06 14:52:05 2012 +0200
     4.3 @@ -1,36 +1,37 @@
     4.4  /**
     4.5   * XML Web generátor – program na generování webových stránek
     4.6   * Copyright © 2012 František Kučera (frantovo.cz)
     4.7 - * 
     4.8 + *
     4.9   * This program is free software: you can redistribute it and/or modify
    4.10   * it under the terms of the GNU General Public License as published by
    4.11   * the Free Software Foundation, either version 3 of the License, or
    4.12   * (at your option) any later version.
    4.13 - * 
    4.14 + *
    4.15   * This program is distributed in the hope that it will be useful,
    4.16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
    4.17 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    4.18 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    4.19   * GNU General Public License for more details.
    4.20 - * 
    4.21 + *
    4.22   * You should have received a copy of the GNU General Public License
    4.23 - * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    4.24 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
    4.25   */
    4.26  package cz.frantovo.xmlWebGenerator;
    4.27  
    4.28  import java.io.File;
    4.29 -import java.util.Date;
    4.30  import java.net.URI;
    4.31  import java.net.URISyntaxException;
    4.32 +import java.util.Date;
    4.33  
    4.34  /**
    4.35   * Společná knihovna funkcí volaných z XSLT
    4.36 - *  
    4.37 + *
    4.38   * @author František Kučera (frantovo.cz)
    4.39   */
    4.40  public class Funkce {
    4.41  
    4.42  	/**
    4.43  	 * Zjištuje, kdy byl naposledy daný soubor změněn.
    4.44 +	 *
    4.45  	 * @param soubor cesta k souboru
    4.46  	 * @return datum poslední změny
    4.47  	 * @throws URISyntaxException
    4.48 @@ -40,5 +41,16 @@
    4.49  		File f = new File(uri);
    4.50  		return new Date(f.lastModified());
    4.51  	}
    4.52 +
    4.53 +	public static String spojText(String[] kusyTextu) {
    4.54 +		if (kusyTextu == null || kusyTextu.length < 1) {
    4.55 +			return null;
    4.56 +		} else {
    4.57 +			StringBuilder sb = new StringBuilder();
    4.58 +			for (int i = 0; i < kusyTextu.length; i++) {
    4.59 +				sb.append(kusyTextu[i]);
    4.60 +			}
    4.61 +			return sb.toString();
    4.62 +		}
    4.63 +	}
    4.64  }
    4.65 -
     5.1 --- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java	Fri Jul 06 13:41:35 2012 +0200
     5.2 +++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java	Fri Jul 06 14:52:05 2012 +0200
     5.3 @@ -18,6 +18,7 @@
     5.4  package cz.frantovo.xmlWebGenerator.makra;
     5.5  
     5.6  import static cz.frantovo.xmlWebGenerator.NástrojeCLI.načtiProud;
     5.7 +import static cz.frantovo.xmlWebGenerator.Funkce.spojText;
     5.8  import static cz.frantovo.xmlWebGenerator.Xmlns.*;
     5.9  import java.io.ByteArrayInputStream;
    5.10  import java.io.File;
    5.11 @@ -74,8 +75,8 @@
    5.12  	 * @param perexStránky perex stránky → proměnná prostředí
    5.13  	 * @return výstup příkazu buď jako textový řetězec nebo jako XML (DOMSource)
    5.14  	 */
    5.15 -	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 {
    5.16 -		String výstupSkriptu = získejVýstupSkriptu(skriptText, skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky);
    5.17 +	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 {
    5.18 +		String výstupSkriptu = získejVýstupSkriptu(spojText(skriptText), skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky);
    5.19  		return vyrobXml(výstupSkriptu, zjistiFormát(výstupníFormát));
    5.20  	}
    5.21  
     6.1 --- a/šablona/makra/skriptování.xsl	Fri Jul 06 13:41:35 2012 +0200
     6.2 +++ b/šablona/makra/skriptování.xsl	Fri Jul 06 14:52:05 2012 +0200
     6.3 @@ -44,8 +44,11 @@
     6.4  		
     6.5  		<xsl:choose>
     6.6  			<xsl:when test="$režim = 'povolit'">
     6.7 +				<xsl:variable name="zadáníSkriptu">
     6.8 +					<xsl:apply-templates select="*|text()"/>
     6.9 +				</xsl:variable>
    6.10  				<xsl:variable name="výstupSkriptu" select="j:interpretuj(
    6.11 -																	text(),
    6.12 +																	$zadáníSkriptu,
    6.13  																	@src,
    6.14  																	@jazyk,
    6.15  																	@výstup,