#20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu).
--- a/vstup/kontakt.xml Fri Jul 06 13:41:35 2012 +0200
+++ b/vstup/kontakt.xml Fri Jul 06 14:52:05 2012 +0200
@@ -10,6 +10,7 @@
</p>
<p>
<strong>Naše adresa:</strong><br/>
+ <m:firma/><br/>
Polární 128<br/>
Tučňákova Lhota<br/>
Česká republika
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vstup/makra/firma.xsl Fri Jul 06 14:52:05 2012 +0200
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="2.0"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://www.w3.org/1999/xhtml"
+ xmlns:s="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana"
+ xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace"
+ xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fn="http://www.w3.org/2005/xpath-functions"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ exclude-result-prefixes="fn h s k m xs">
+
+ <!-- Vypíše název naší firmy: -->
+ <xsl:template match="m:firma">
+ <xsl:text>Chovatelská stanice a.s.</xsl:text>
+ </xsl:template>
+
+</xsl:stylesheet>
--- a/vstup/skriptování.xml Fri Jul 06 13:41:35 2012 +0200
+++ b/vstup/skriptování.xml Fri Jul 06 14:52:05 2012 +0200
@@ -145,7 +145,7 @@
echo "Perex: $XWG_STRANKA_PEREX";
]]></m:skript></pre>
- <h2 id="makraVeSkriptech">Makra ve skriptech</h2>
+ <h2 id="makraZeSkriptů">Makra ze skriptů</h2>
<p>
XML generované skriptem může také obsahovat makra, která se následně interptetují.
<m:skript jazyk="bash" výstup="xhtml"><![CDATA[
@@ -214,9 +214,38 @@
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í).
</p>
+ <h2>Makra ve skriptech</h2>
+
+ <p>
+ Uvnitř zdrojového kódu skriptu můžeme používat jiná makra.
+ Např. tento kód:
+ </p>
+
+ <m:pre jazyk="xml"><![CDATA[<pre>
+ <m:skript jazyk="bash">
+ echo "Náš podnik se jmenuje <m:firma/>";
+ </m:skript>
+</pre>]]></m:pre>
+
+ <p>
+ nám vygeneruje:
+ </p>
+
+ <pre><m:skript jazyk="bash">
+ echo "Náš podnik se jmenuje <m:firma/>";
+ </m:skript></pre>
+
+ <p>
+ Můžete si tak vytvořit makra pro opakující se části
+ a používat je jak v textu stránek, tak ve skriptech nebo diagramech.
+ Jen pozor na ošetření zvláštních znaků – pokud text takové znaky obsahuje,
+ je dobré ho zabalit ještě do jedné značky, která se postará o <em>escapování</em>
+ pro daný kontext (skriptovací jazyk a prostředí v něm – např. apostrofy vs. uvozovky).
+ </p>
+
<h2>Skripty v makrech</h2>
<p>
- Uvnitř maker můžeme volat<m:podČarou>
+ Uvnitř definic maker můžeme volat<m:podČarou>
Ovšem trochu jiným způsobem, než ve stránkách –
nacházíme se totiž v <em>programu</em> (XSL šablona definující makro)
nikoli v <em>datovém souboru</em> (XML stránka).
@@ -281,7 +310,7 @@
-->
<p>
- Podobně bychom mohli postupovat i u <a href="#makraVeSkriptech">diagramu</a> –
+ Podobně bychom mohli postupovat i u <a href="#makraZeSkriptů">diagramu</a> –
negenerovat skriptem značky makra, ale pouze jeho obsah – zadání diagramu, nebo jen jeho část.
Někdy se ale může hodit ve skriptu nastavovat atributy elementů nebo elementy vytvářet dynamicky.
</p>
--- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Fri Jul 06 13:41:35 2012 +0200
+++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java Fri Jul 06 14:52:05 2012 +0200
@@ -1,36 +1,37 @@
/**
* XML Web generátor – program na generování webových stránek
* Copyright © 2012 František Kučera (frantovo.cz)
- *
+ *
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
- *
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cz.frantovo.xmlWebGenerator;
import java.io.File;
-import java.util.Date;
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.Date;
/**
* Společná knihovna funkcí volaných z XSLT
- *
+ *
* @author František Kučera (frantovo.cz)
*/
public class Funkce {
/**
* Zjištuje, kdy byl naposledy daný soubor změněn.
+ *
* @param soubor cesta k souboru
* @return datum poslední změny
* @throws URISyntaxException
@@ -40,5 +41,16 @@
File f = new File(uri);
return new Date(f.lastModified());
}
+
+ public static String spojText(String[] kusyTextu) {
+ if (kusyTextu == null || kusyTextu.length < 1) {
+ return null;
+ } else {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < kusyTextu.length; i++) {
+ sb.append(kusyTextu[i]);
+ }
+ return sb.toString();
+ }
+ }
}
-
--- a/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java Fri Jul 06 13:41:35 2012 +0200
+++ b/šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java Fri Jul 06 14:52:05 2012 +0200
@@ -18,6 +18,7 @@
package cz.frantovo.xmlWebGenerator.makra;
import static cz.frantovo.xmlWebGenerator.NástrojeCLI.načtiProud;
+import static cz.frantovo.xmlWebGenerator.Funkce.spojText;
import static cz.frantovo.xmlWebGenerator.Xmlns.*;
import java.io.ByteArrayInputStream;
import java.io.File;
@@ -74,8 +75,8 @@
* @param perexStránky perex stránky → proměnná prostředí
* @return výstup příkazu buď jako textový řetězec nebo jako XML (DOMSource)
*/
- 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 {
- String výstupSkriptu = získejVýstupSkriptu(skriptText, skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky);
+ 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 {
+ String výstupSkriptu = získejVýstupSkriptu(spojText(skriptText), skriptSoubor, jazyk, uriStránky, nadpisStránky, perexStránky);
return vyrobXml(výstupSkriptu, zjistiFormát(výstupníFormát));
}
--- a/šablona/makra/skriptování.xsl Fri Jul 06 13:41:35 2012 +0200
+++ b/šablona/makra/skriptování.xsl Fri Jul 06 14:52:05 2012 +0200
@@ -44,8 +44,11 @@
<xsl:choose>
<xsl:when test="$režim = 'povolit'">
+ <xsl:variable name="zadáníSkriptu">
+ <xsl:apply-templates select="*|text()"/>
+ </xsl:variable>
<xsl:variable name="výstupSkriptu" select="j:interpretuj(
- text(),
+ $zadáníSkriptu,
@src,
@jazyk,
@výstup,