Tabulky #15: data tabulky můžeme načítat i ze souboru + můžeme určit oddělovač.
--- a/vstup/kontakt.xml Sat Jan 07 19:06:18 2012 +0100
+++ b/vstup/kontakt.xml Sat Jan 07 19:39:28 2012 +0100
@@ -50,6 +50,14 @@
<p>
Ale protože je to tajné, tak vám neřekneme, co A, B a C znamenají.
</p>
+
+ <h2>Telefonní seznam</h2>
+
+ <p>
+ Můžete nám kdykoli zavolat:
+ </p>
+
+ <m:tabulka src="telefonní-seznam.csv"/>
</text>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vstup/telefonní-seznam.csv Sat Jan 07 19:39:28 2012 +0100
@@ -0,0 +1,6 @@
+Osoba;Místnost;Telefon
+pan továrník (majitel);1;+420 604 123456
+pan ředitel;2;+420 604 123654
+slečna sekretářka;2;+420 604 123465
+Linuxový guru;3;+420 604 123546
+Softwarový architekt;4;+420 604 123645
--- 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, ' ')"/>
- <xsl:variable name="tělo" select="substring-after($data, ' ')"/>
- <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, ' ')"/>
+ <xsl:variable name="tělo" select="substring-after($data, ' ')"/>
+ <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>