Přesun maker do samostatných souborů #8 + automatické generování seznamu maker
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 06 Jan 2012 20:48:42 +0100
changeset 51 df1f942f7b69
parent 50 ae8222d2c903
child 52 a221785fe3ac
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.
.hgignore
build.xml
vstup/makra.xsl
vstup/makra/měřák.xsl
šablona/makra.xsl
šablona/makra/diagramy.xsl
šablona/makra/odkazy.xsl
šablona/makra/tabulka.xsl
šablona/makra/vycpávka.xsl
šablona/makra/wiki.xsl
šablona/makra/zvýraznění-syntaxe.xsl
šablona/stránka-společné.xsl
šablona/stránka.xsl
--- 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
--- 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>
 	
--- 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 &gt;= 0 and $hodnota &lt;= 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
--- /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 &gt;= 0 and $hodnota &lt;= 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
--- 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>
--- /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>
--- /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>
--- /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, '&#10;')"/>
+    		<xsl:variable name="tělo" select="substring-after($data, '&#10;')"/>
+    		<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>
+
--- /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ů, '&amp;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>
--- /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>
--- /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>
--- /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>
--- 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ů, '&amp;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, '&#10;')"/>
-    		<xsl:variable name="tělo" select="substring-after($data, '&#10;')"/>
-    		<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>