#20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu).
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,