šablona/makra/tabulka.xsl
changeset 70 032c62852ef1
parent 61 9503eb8377f1
child 71 895757141bff
--- a/šablona/makra/tabulka.xsl	Sat Jan 07 19:06:18 2012 +0100
+++ b/šablona/makra/tabulka.xsl	Sat Jan 07 19:39:28 2012 +0100
@@ -17,11 +17,11 @@
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
 <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">
-	    
+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
 		******************
@@ -29,26 +29,44 @@
 		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ů).
 		*
+		@src volitelně můžeme data tabulky načítat ze souboru 
+		@oddělovač regulární výraz, který odděluje sloupce – např. „\t+“ pro tabulátory (výchozí pro tabulky vložené přímo do stránky) nebo „;“ pro středník (výchozí pro tabulky načítané ze souboru) 
 	-->
-    <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(.)">
+	<xsl:template match="m:tabulka">
+		<xsl:call-template name="vykresliTabulku">
+			<xsl:with-param name="zadání" select="text()"/>
+			<xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
+		</xsl:call-template>
+	</xsl:template>
+	
+	<xsl:template match="m:tabulka[@src]">
+		<xsl:call-template name="vykresliTabulku">
+			<xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/>
+			<xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/>
+		</xsl:call-template>
+	</xsl:template>
+	
+	<xsl:template name="vykresliTabulku">
+		<xsl:param name="zadání"/>
+		<xsl:param name="oddělovač"/>
+		<table>
+			<xsl:variable name="data" select="replace(replace($zadání, '^\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, $oddělovač)">
+						<xsl:if test="normalize-space(.)">
 							<td><xsl:value-of select="normalize-space(.)"/></td>
 						</xsl:if>
 					</xsl:for-each>
-    			</tr>
-    		</thead>
-    		<tbody>
+				</tr>
+			</thead>
+			<tbody>
 				<xsl:for-each select="tokenize($tělo, '\n')">
 					<xsl:if test="normalize-space(.)">
 						<tr>
-							<xsl:for-each select="tokenize(., '\t+')">
+							<xsl:for-each select="tokenize(., $oddělovač)">
 								<xsl:if test="normalize-space(.)">
 									<td><xsl:value-of select="normalize-space(.)"/></td>
 								</xsl:if>
@@ -56,9 +74,9 @@
 						</tr>
 					</xsl:if>
 				</xsl:for-each>
-    		</tbody>
-    	</table>    
-    </xsl:template>
+			</tbody>
+		</table>
+	</xsl:template>
 
 </xsl:stylesheet>