# HG changeset patch # User František Kučera <franta-hg@frantovo.cz> # Date 1325961568 -3600 # Node ID 032c62852ef18a1e2507d8b221ff9fd1466407eb # Parent e7908e307b61892d3b599cf98f7ea1aac80b4b79 Tabulky #15: data tabulky můžeme načítat i ze souboru + můžeme určit oddělovač. diff -r e7908e307b61 -r 032c62852ef1 vstup/kontakt.xml --- 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> diff -r e7908e307b61 -r 032c62852ef1 vstup/telefonní-seznam.csv --- /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 diff -r e7908e307b61 -r 032c62852ef1 šablona/makra/tabulka.xsl --- 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>