# HG changeset patch # User František Kučera <franta-hg@frantovo.cz> # Date 1325879322 -3600 # Node ID df1f942f7b69686b487357a426f0e8a0f76a3aa3 # Parent ae8222d2c903ae6547a5475b1691d780615c4532 Přesun maker do samostatných souborů #8 + automatické generování seznamu maker → nová makra není potřeba nikde registrovat, prostě vytvoříme nový soubor v adresáři šablona/makra nebo vstup/makra a spustíme „ant makra“ – vygenruje se „šablona/.makra-seznam.xsl“ který se vloží do šablony stránky. diff -r ae8222d2c903 -r df1f942f7b69 .hgignore --- a/.hgignore Thu Jan 05 16:24:56 2012 +0100 +++ b/.hgignore Fri Jan 06 20:48:42 2012 +0100 @@ -1,6 +1,7 @@ temp/* výstup/* šablona/funkce/build/* +šablona/.makra-seznam.xsl vstup/.seznam.xml analýza/princip.png nbproject/private diff -r ae8222d2c903 -r df1f942f7b69 build.xml --- a/build.xml Thu Jan 05 16:24:56 2012 +0100 +++ b/build.xml Fri Jan 06 20:48:42 2012 +0100 @@ -4,6 +4,7 @@ <property name="vstup" value="vstup"/> <property name="výstup" value="výstup"/> <property name="šablona" value="šablona"/> + <property name="seznamMaker" value="${šablona}/.makra-seznam.xsl"/> <property name="temp" value="temp"/> <property name="funkce" value="${šablona}/funkce/build/classes"/> @@ -13,7 +14,7 @@ <target name="generuj" description="Vygeneruje kompletní web." depends="agregace,stránky"> </target> - <target name="stránky" description="Vygeneruje samotné XHTML webové stránky." depends="statický-obsah,syntaxe,kompiluj-funkce"> + <target name="stránky" description="Vygeneruje samotné XHTML webové stránky." depends="statický-obsah,syntaxe,kompiluj-funkce,makra"> <xslt basedir="${vstup}" destdir="${výstup}" includes="*${vstupníPřípona}" extension="${výstupníPřípona}" style="${šablona}/stránka.xsl" processor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"> <param name="konfigurák" expression="../${vstup}/"/> <param name="podporaZaostalýchProhlížečů" expression="false"/> @@ -37,6 +38,16 @@ </xslt> </target> + <target name="makra" description="Vygeneruje seznam maker podle souborů v příslušných složkách" depends="kompiluj-funkce"> + <xslt in="${vstup}/web.conf" out="${seznamMaker}" style="${šablona}/makra.xsl" processor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"> + <classpath location="/usr/share/java/saxonb-9.0.jar"/> + <classpath location="${funkce}"/> + <factory name="net.sf.saxon.TransformerFactoryImpl"> + <attribute name="http://saxon.sf.net/feature/allow-external-functions" value="true"/> + </factory> + </xslt> + </target> + <target name="agregace" description="Vytvoří agregované výstupy: RSS, Atom, Sitemap.xml." depends="kompiluj-funkce"> <!-- TODO: sloučit, zjednodušit, parametrizovat --> @@ -99,6 +110,7 @@ <delete includeemptydirs="true"> <fileset dir="${výstup}" includes="**/*"/> <fileset dir="${funkce}" includes="**/*"/> + <fileset file="${seznamMaker}"/> </delete> </target> diff -r ae8222d2c903 -r df1f942f7b69 vstup/makra.xsl --- a/vstup/makra.xsl Thu Jan 05 16:24:56 2012 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -<?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"> - - <!-- Ukázka vlastního „makra“: --> - <xsl:template match="m:měřák"> - <xsl:variable name="hodnota" select="number(@hodnota)"/> - <xsl:variable name="šířkaGrafu" select="128"/> - <xsl:choose> - <xsl:when test="$hodnota >= 0 and $hodnota <= 100"> - <div style="border: 1px solid black; width: {$šířkaGrafu}px; height: 16px; padding: 0px; text-align: center; background-color: #cfc;"> - <div style="margin: 0px; background-color: #A4E666; width: {@hodnota*$šířkaGrafu div 100}px; height: 16px;"><xsl:call-template name="varováníRetardace"/></div> - <p style="margin: 0px; font-size: 12px; position: relative; top: -15px;"> - <xsl:value-of select="@hodnota"/>/100 - </p> - </div> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">Hodnota měřáku musí být nejméně 0 a nejvíce 100 (udává procenta).</xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - -</xsl:stylesheet> \ No newline at end of file diff -r ae8222d2c903 -r df1f942f7b69 vstup/makra/měřák.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vstup/makra/měřák.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,33 @@ +<?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"> + + <!-- Ukázka vlastního „makra“: --> + <xsl:template match="m:měřák"> + <xsl:variable name="hodnota" select="number(@hodnota)"/> + <xsl:variable name="šířkaGrafu" select="128"/> + <xsl:choose> + <xsl:when test="$hodnota >= 0 and $hodnota <= 100"> + <div style="border: 1px solid black; width: {$šířkaGrafu}px; height: 16px; padding: 0px; text-align: center; background-color: #cfc;"> + <div style="margin: 0px; background-color: #A4E666; width: {@hodnota*$šířkaGrafu div 100}px; height: 16px;"><xsl:call-template name="varováníRetardace"/></div> + <p style="margin: 0px; font-size: 12px; position: relative; top: -15px;"> + <xsl:value-of select="@hodnota"/>/100 + </p> + </div> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes">Hodnota měřáku musí být nejméně 0 a nejvíce 100 (udává procenta).</xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> \ No newline at end of file diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra.xsl --- a/šablona/makra.xsl Thu Jan 05 16:24:56 2012 +0100 +++ b/šablona/makra.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -1,1 +1,30 @@ -../vstup/makra.xsl \ No newline at end of file +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + xmlns:XSL="http://example.com/XSL"> + <xsl:output method="xml" indent="yes" encoding="UTF-8" /> + <xsl:namespace-alias stylesheet-prefix="XSL" result-prefix="xsl"/> + + <xsl:template match="/"> + <XSL:stylesheet version="2.0"> + <xsl:text> +</xsl:text> + <xsl:comment> + Tento seznam maker je automaticky generovaný. + Neupravujte ho ručně – použijte příkaz „ant makra“. +</xsl:comment> + <xsl:text> + </xsl:text> + <!-- Makra dodávaná jako součást programu: --> + <xsl:for-each select="collection('./makra/?select=*.xsl')"> + <XSL:include href="{document-uri(.)}"/> + </xsl:for-each> + + <!-- Uživatelská makra --> + <xsl:for-each select="collection('../vstup/makra/?select=*.xsl')"> + <XSL:include href="{document-uri(.)}"/> + </xsl:for-each> + </XSL:stylesheet> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra/diagramy.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/makra/diagramy.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" + xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="m j"> + + <!-- + Diagramy/grafy + ************** + Můžeme vložit diagram – obrázek. + Pro jejich vykreslování se používá Graphviz – diagramy zadáváme v jeho syntaxi. + * + @orientace „vodorovně“ nebo „svisle“ (výchozí) + @nadpis můžeme uvést název diagramu + --> + <xsl:template match="m:diagram"> + <!-- + TODO: umožnit vkládání diagramů ze souboru (@src) + --> + <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/> + <xsl:choose> + <xsl:when test="$souborDiagramu"> + <div class="diagram"> + <a href="{$souborDiagramu}.svg"> + <img + src="{$souborDiagramu}.svg" + alt="Diagram {$souborDiagramu} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru" + title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/> + </a> + <!-- + TODO: SVG+PNG: + <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/> + <object + data="{$souborDiagramu}.svg" + type="image/svg+xml" + style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> + <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> + </object> + --> + <xsl:if test="@nadpis"> + <p class="nadpis"><xsl:value-of select="@nadpis"/></p> + </xsl:if> + </div> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra/odkazy.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/makra/odkazy.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="m"> + + <!-- + Makro pro převod interních odkazů: + - doplnění správné přípony + - URL kódování znaků + --> + <xsl:template match="m:a"> + <a> + <xsl:copy-of select="@*"/> + <xsl:attribute name="href"> + <xsl:value-of select="encode-for-uri(concat(@href, $výstupníPřípona))"/> + </xsl:attribute> + <xsl:apply-templates/> + </a> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra/tabulka.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/makra/tabulka.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="m"> + + <!-- + Jednoduché tabulky + ****************** + Data zadáváme do těla elementu. + Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí). + První řádek se považuje za záhlaví (nadpisy sloupců). + * + --> + <xsl:template match="m:tabulka"> + <table> + <xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/> + <xsl:variable name="hlavička" select="substring-before($data, ' ')"/> + <xsl:variable name="tělo" select="substring-after($data, ' ')"/> + <thead> + <tr> + <xsl:for-each select="tokenize($hlavička, '\t+')"> + <xsl:if test="normalize-space(.)"> + <td><xsl:value-of select="normalize-space(.)"/></td> + </xsl:if> + </xsl:for-each> + </tr> + </thead> + <tbody> + <xsl:for-each select="tokenize($tělo, '\n')"> + <xsl:if test="normalize-space(.)"> + <tr> + <xsl:for-each select="tokenize(., '\t+')"> + <xsl:if test="normalize-space(.)"> + <td><xsl:value-of select="normalize-space(.)"/></td> + </xsl:if> + </xsl:for-each> + </tr> + </xsl:if> + </xsl:for-each> + </tbody> + </table> + </xsl:template> + +</xsl:stylesheet> + diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra/vycpávka.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/makra/vycpávka.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="m"> + + <!-- + Vycpávkový text + *************** + Vkládá Lorem Ipsum. + * + @odstavců počet odstavců k vložení + --> + <xsl:template match="m:vycpávka"> + <!-- + TODO: stáhnout jen jednou, uložit do souboru a při dalších generováních brát z něj. + --> + <xsl:message>Stahuji vycpávkový text z http://lipsum.lipsum.com/</xsl:message> + <xsl:variable name="prostýText" select="document(concat('http://lipsum.lipsum.com/feed/xml?amount=', @odstavců, '&what=paragraphs'))/feed/lipsum"/> + <xsl:for-each select="tokenize($prostýText, '\n')"> + <p><xsl:value-of select="."/></p> + </xsl:for-each> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra/wiki.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/makra/wiki.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" + xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="m j"> + + <!-- + Wiki syntaxe + ************ + Text nemusíme vkládat v (X)HTML, ale můžeme ho uzavřít do této značky a používat „wiki“ syntaxi. + * + @syntaxe nepovinný atribut (zatím je podporován jen markdown procesor). + --> + <xsl:template match="m:wiki"> + <xsl:variable name="wikiXHTML" select="j:formátujWiki(text(), @syntaxe)"/> + <xsl:choose> + <xsl:when test="$wikiXHTML"> + <xsl:value-of select="$wikiXHTML" disable-output-escaping="yes"/> + </xsl:when> + <xsl:otherwise> + <xsl:message terminate="yes">Při zpracování wiki syntaxe došlo k chybě.</xsl:message> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/makra/zvýraznění-syntaxe.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/makra/zvýraznění-syntaxe.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="UTF-8"?> +<xsl:stylesheet version="2.0" + xmlns="http://www.w3.org/1999/xhtml" + xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" + xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce" + xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + exclude-result-prefixes="m j"> + + <!-- + Zvýraznění syntaxe zdrojového kódu + ********************************** + Ukázky zdrojového kódu budou mít zvýrazněnou syntaxi pro větší přehlednost. + * + @jazyk programovací jazyk, ve kterém je daný zdrojový kód + @src zdrojový kód nemusí být uvnitř elementu, ale můžeme se odkázat na externí soubor + @odkaz nastavíme hodnotu „ano“, pokud chceme vložit odkaz na soubor je stažení + --> + <xsl:template match="m:pre"> + <xsl:call-template name="zvýrazniZdroják"> + <xsl:with-param name="zdroják" select="text()"/> + </xsl:call-template> + </xsl:template> + + <xsl:template match="m:pre[@src]"> + <xsl:call-template name="zvýrazniZdroják"> + <xsl:with-param name="zdroják" select="unparsed-text(concat('../', $vstup, @src))"/> + </xsl:call-template> + <xsl:if test="@odkaz = 'ano'"> + <p class="zdroják-ke-stažení"> + <span>Stáhnout: <a href="{encode-for-uri(@src)}"><xsl:value-of select="@src"/></a></span> + </p> + </xsl:if> + </xsl:template> + + <xsl:template name="zvýrazniZdroják"> + <xsl:param name="zdroják"/> + <xsl:variable name="zvýrazněnýZdroják" select="j:zvýrazniSyntaxi($zdroják, @jazyk)"/> + <xsl:choose> + <xsl:when test="$zvýrazněnýZdroják"> + <xsl:comment>Následující kód je v jazyce <xsl:value-of select="@jazyk"/></xsl:comment> + <xsl:value-of disable-output-escaping="yes" select="$zvýrazněnýZdroják"/> + </xsl:when> + <xsl:otherwise> + <xsl:message>Zvýraznění syntaxe se nezdařilo → bude vložen původní nezvýrazněný kód.</xsl:message> + <pre><xsl:value-of select="$zdroják"/></pre> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/stránka-společné.xsl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/šablona/stránka-společné.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -0,0 +1,56 @@ +<?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:j="java:cz.frantovo.xmlWebGenerator.Funkce" + 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 j xs"> + + <xsl:param name="vstup" select="'../vstup/'"/> + <xsl:param name="výstup" select="'../výstup/'"/> + <xsl:param name="vstupníPřípona" select="'.xml'"/> + <xsl:param name="výstupníPřípona" select="'.xhtml'"/> + <xsl:param name="vsuvkováPřípona" select="'.inc'"/> + <xsl:param name="podporaZaostalýchProhlížečů" select="false()" as="xs:boolean"/> + + <xsl:variable name="konfigurace" select="document(concat($vstup, 'web.conf'))"/> + + <xsl:include href=".makra-seznam.xsl"/> + + + <!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: --> + <xsl:template match="*"> + <xsl:element name="{name()}"> + <xsl:copy-of select="@*"/> + <xsl:apply-templates/> + </xsl:element> + </xsl:template> + + <!-- Varování pro případ, že jsme v režimu podpory pro zaostalé prohlížeče --> + <xsl:template name="varováníRetardace"> + <xsl:if test="$podporaZaostalýchProhlížečů"> + <xsl:comment> + Generátor byl spuštěn v režimu podpory zaostalých prohlížečů. + Uživatelům doporučujeme upgrade na skutečný WWW prohlížeč, + jako je např. Firefox nebo Chromium (případně Opera či Safari). + </xsl:comment> + </xsl:if> + </xsl:template> + + <!-- Odkazy na JavaScript a kaskádové styly --> + <xsl:template match="k:web/k:js"> + <script src="{text()}" type="text/javascript"> + <xsl:call-template name="varováníRetardace"/> + </script> + </xsl:template> + <xsl:template match="k:web/k:css"> + <link href="{text()}" type="text/css" rel="StyleSheet" /> + </xsl:template> + +</xsl:stylesheet> diff -r ae8222d2c903 -r df1f942f7b69 šablona/stránka.xsl --- a/šablona/stránka.xsl Thu Jan 05 16:24:56 2012 +0100 +++ b/šablona/stránka.xsl Fri Jan 06 20:48:42 2012 +0100 @@ -17,19 +17,13 @@ encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" doctype-system="http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"/> - - <xsl:param name="vstup" select="'../vstup/'"/> - <xsl:param name="výstup" select="'../výstup/'"/> - <xsl:param name="vstupníPřípona" select="'.xml'"/> - <xsl:param name="výstupníPřípona" select="'.xhtml'"/> - <xsl:param name="vsuvkováPřípona" select="'.inc'"/> - <xsl:param name="podporaZaostalýchProhlížečů" select="false()" as="xs:boolean"/> + <xsl:include href="stránka-společné.xsl"/> - <xsl:include href="makra.xsl"/> - - <!-- Celý dokument: --> + <!-- + Šablona stránky + *************** + --> <xsl:template match="/"> - <xsl:variable name="konfigurace" select="document(concat($vstup, 'web.conf'))"/> <html> <head> <xsl:if test="$podporaZaostalýchProhlížečů"> @@ -39,7 +33,7 @@ <link title="Novinky (Atom)" href="atom.xml" type="application/atom+xml" rel="alternate"/> <link title="Novinky (RSS)" href="rss.xml" type="application/rss+xml" rel="alternate"/> <xsl:apply-templates select="$konfigurace/k:web/k:js"/> - <xsl:apply-templates select="$konfigurace/k:web/k:css"/> + <xsl:apply-templates select="$konfigurace/k:web/k:css"/> </head> <body> <div id="tělo"> @@ -70,184 +64,5 @@ </body> </html> </xsl:template> - - <!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: --> - <xsl:template match="*"> - <xsl:element name="{name()}"> - <xsl:copy-of select="@*"/> - <xsl:apply-templates/> - </xsl:element> - </xsl:template> - <!-- Varování pro případ, že jsme v režimu podpory pro zaostalé prohlížeče --> - <xsl:template name="varováníRetardace"> - <xsl:if test="$podporaZaostalýchProhlížečů"> - <xsl:comment> - Generátor byl spuštěn v režimu podpory zaostalých prohlížečů. - Uživatelům doporučujeme upgrade na skutečný WWW prohlížeč, - jako je např. Firefox nebo Chromium (případně Opera či Safari). - </xsl:comment> - </xsl:if> - </xsl:template> - - <!-- Odkazy na JavaScript a kaskádové styly --> - <xsl:template match="k:web/k:js"> - <script src="{text()}" type="text/javascript"> - <xsl:call-template name="varováníRetardace"/> - </script> - </xsl:template> - <xsl:template match="k:web/k:css"> - <link href="{text()}" type="text/css" rel="StyleSheet" /> - </xsl:template> - - <!-- - TODO: makra vyčlenit do samostatných souborů - --> - - <!-- - Makro pro převod interních odkazů: - - doplnění správné přípony - - URL kódování znaků - --> - <xsl:template match="m:a"> - <a> - <xsl:copy-of select="@*"/> - <xsl:attribute name="href"> - <xsl:value-of select="fn:encode-for-uri(concat(@href, $výstupníPřípona))"/> - </xsl:attribute> - <xsl:apply-templates/> - </a> - </xsl:template> - - <!-- - Makro pro zvýraznění syntaxe: - --> - <xsl:template match="m:pre"> - <xsl:call-template name="zvýrazniZdroják"> - <xsl:with-param name="zdroják" select="text()"/> - </xsl:call-template> - </xsl:template> - - <xsl:template match="m:pre[@src]"> - <xsl:call-template name="zvýrazniZdroják"> - <xsl:with-param name="zdroják" select="unparsed-text(concat($vstup, @src))"/> - </xsl:call-template> - <xsl:if test="@odkaz = 'ano'"> - <p class="zdroják-ke-stažení"> - <span>Stáhnout: <a href="{encode-for-uri(@src)}"><xsl:value-of select="@src"/></a></span> - </p> - </xsl:if> - </xsl:template> - - <xsl:template name="zvýrazniZdroják"> - <xsl:param name="zdroják"/> - <xsl:variable name="zvýrazněnýZdroják" select="j:zvýrazniSyntaxi($zdroják, @jazyk)"/> - <xsl:choose> - <xsl:when test="$zvýrazněnýZdroják"> - <xsl:comment>Následující kód je v jazyce <xsl:value-of select="@jazyk"/></xsl:comment> - <xsl:value-of disable-output-escaping="yes" select="$zvýrazněnýZdroják"/> - </xsl:when> - <xsl:otherwise> - <xsl:message>Zvýraznění syntaxe se nezdařilo → bude vložen původní nezvýrazněný kód.</xsl:message> - <pre><xsl:value-of select="$zdroják"/></pre> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- - Makro pro diagramy/grafy - --> - <xsl:template match="m:diagram"> - <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/> - <xsl:choose> - <xsl:when test="$souborDiagramu"> - <div class="diagram"> - <a href="{$souborDiagramu}.svg"> - <img - src="{$souborDiagramu}.svg" - alt="Diagram {$souborDiagramu} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru" - title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/> - </a> - <!-- TODO: SVG+PNG - <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/> - <object - data="{$souborDiagramu}.svg" - type="image/svg+xml" - style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> - <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> - </object> - --> - <xsl:if test="@nadpis"> - <p class="nadpis"><xsl:value-of select="@nadpis"/></p> - </xsl:if> - </div> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- - Makro pro Wiki syntaxi - --> - <xsl:template match="m:wiki"> - <xsl:variable name="wikiXHTML" select="j:formátujWiki(text(), @syntaxe)"/> - <xsl:choose> - <xsl:when test="$wikiXHTML"> - <xsl:value-of select="$wikiXHTML" disable-output-escaping="yes"/> - </xsl:when> - <xsl:otherwise> - <xsl:message terminate="yes">Při zpracování wiki syntaxe došlo k chybě.</xsl:message> - </xsl:otherwise> - </xsl:choose> - </xsl:template> - - <!-- - Makro pro vycpávkový text - --> - <xsl:template match="m:vycpávka"> - <!-- - TODO: stáhnout jen jednou, uložit do souboru a při dalších generováních brát z něj. - --> - <xsl:message>Stahuji vycpávkový text z http://lipsum.lipsum.com/</xsl:message> - <xsl:variable name="prostýText" select="document(concat('http://lipsum.lipsum.com/feed/xml?amount=', @odstavců, '&what=paragraphs'))/feed/lipsum"/> - <xsl:for-each select="fn:tokenize($prostýText, '\n')"> - <p><xsl:value-of select="."/></p> - </xsl:for-each> - </xsl:template> - - <!-- - Makro pro jednoduché tabulky - --> - <xsl:template match="m:tabulka"> - <table> - <xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/> - <xsl:variable name="hlavička" select="substring-before($data, ' ')"/> - <xsl:variable name="tělo" select="substring-after($data, ' ')"/> - <thead> - <tr> - <xsl:for-each select="tokenize($hlavička, '\t+')"> - <xsl:if test="normalize-space(.)"> - <td><xsl:value-of select="normalize-space(.)"/></td> - </xsl:if> - </xsl:for-each> - </tr> - </thead> - <tbody> - <xsl:for-each select="tokenize($tělo, '\n')"> - <xsl:if test="normalize-space(.)"> - <tr> - <xsl:for-each select="tokenize(., '\t+')"> - <xsl:if test="normalize-space(.)"> - <td><xsl:value-of select="normalize-space(.)"/></td> - </xsl:if> - </xsl:for-each> - </tr> - </xsl:if> - </xsl:for-each> - </tbody> - </table> - </xsl:template> - </xsl:stylesheet>