# HG changeset patch # User František Kučera <franta-hg@frantovo.cz> # Date 1341579125 -7200 # Node ID 18bf0044f5ab96417c20ad3f89e52c1af3fe0a11 # Parent 7d4b23ccf144f275433458c7fcf8bc037c4ddcb9 #20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu). diff -r 7d4b23ccf144 -r 18bf0044f5ab vstup/kontakt.xml --- 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 diff -r 7d4b23ccf144 -r 18bf0044f5ab vstup/makra/firma.xsl --- /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> diff -r 7d4b23ccf144 -r 18bf0044f5ab vstup/skriptování.xml --- 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> diff -r 7d4b23ccf144 -r 18bf0044f5ab šablona/funkce/src/cz/frantovo/xmlWebGenerator/Funkce.java --- 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(); + } + } } - diff -r 7d4b23ccf144 -r 18bf0044f5ab šablona/funkce/src/cz/frantovo/xmlWebGenerator/makra/Skriptování.java --- 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)); } diff -r 7d4b23ccf144 -r 18bf0044f5ab šablona/makra/skriptování.xsl --- 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,