Tabulky #15: data tabulky můžeme načítat i ze souboru + můžeme určit oddělovač.
1.1 --- a/vstup/kontakt.xml Sat Jan 07 19:06:18 2012 +0100
1.2 +++ b/vstup/kontakt.xml Sat Jan 07 19:39:28 2012 +0100
1.3 @@ -50,6 +50,14 @@
1.4 <p>
1.5 Ale protože je to tajné, tak vám neřekneme, co A, B a C znamenají.
1.6 </p>
1.7 +
1.8 + <h2>Telefonní seznam</h2>
1.9 +
1.10 + <p>
1.11 + Můžete nám kdykoli zavolat:
1.12 + </p>
1.13 +
1.14 + <m:tabulka src="telefonní-seznam.csv"/>
1.15
1.16 </text>
1.17
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/vstup/telefonní-seznam.csv Sat Jan 07 19:39:28 2012 +0100
2.3 @@ -0,0 +1,6 @@
2.4 +Osoba;Místnost;Telefon
2.5 +pan továrník (majitel);1;+420 604 123456
2.6 +pan ředitel;2;+420 604 123654
2.7 +slečna sekretářka;2;+420 604 123465
2.8 +Linuxový guru;3;+420 604 123546
2.9 +Softwarový architekt;4;+420 604 123645
3.1 --- a/šablona/makra/tabulka.xsl Sat Jan 07 19:06:18 2012 +0100
3.2 +++ b/šablona/makra/tabulka.xsl Sat Jan 07 19:39:28 2012 +0100
3.3 @@ -17,11 +17,11 @@
3.4 along with this program. If not, see <http://www.gnu.org/licenses/>.
3.5 -->
3.6 <xsl:stylesheet version="2.0"
3.7 - xmlns="http://www.w3.org/1999/xhtml"
3.8 - xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
3.9 - xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3.10 - exclude-result-prefixes="m">
3.11 -
3.12 +xmlns="http://www.w3.org/1999/xhtml"
3.13 +xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
3.14 +xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
3.15 +exclude-result-prefixes="m">
3.16 +
3.17 <!--
3.18 Jednoduché tabulky
3.19 ******************
3.20 @@ -29,26 +29,44 @@
3.21 Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí).
3.22 První řádek se považuje za záhlaví (nadpisy sloupců).
3.23 *
3.24 + @src volitelně můžeme data tabulky načítat ze souboru
3.25 + @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)
3.26 -->
3.27 - <xsl:template match="m:tabulka">
3.28 - <table>
3.29 - <xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/>
3.30 - <xsl:variable name="hlavička" select="substring-before($data, ' ')"/>
3.31 - <xsl:variable name="tělo" select="substring-after($data, ' ')"/>
3.32 - <thead>
3.33 - <tr>
3.34 - <xsl:for-each select="tokenize($hlavička, '\t+')">
3.35 - <xsl:if test="normalize-space(.)">
3.36 + <xsl:template match="m:tabulka">
3.37 + <xsl:call-template name="vykresliTabulku">
3.38 + <xsl:with-param name="zadání" select="text()"/>
3.39 + <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
3.40 + </xsl:call-template>
3.41 + </xsl:template>
3.42 +
3.43 + <xsl:template match="m:tabulka[@src]">
3.44 + <xsl:call-template name="vykresliTabulku">
3.45 + <xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/>
3.46 + <xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/>
3.47 + </xsl:call-template>
3.48 + </xsl:template>
3.49 +
3.50 + <xsl:template name="vykresliTabulku">
3.51 + <xsl:param name="zadání"/>
3.52 + <xsl:param name="oddělovač"/>
3.53 + <table>
3.54 + <xsl:variable name="data" select="replace(replace($zadání, '^\s+', ''),'\s+$','')"/>
3.55 + <xsl:variable name="hlavička" select="substring-before($data, ' ')"/>
3.56 + <xsl:variable name="tělo" select="substring-after($data, ' ')"/>
3.57 + <thead>
3.58 + <tr>
3.59 + <xsl:for-each select="tokenize($hlavička, $oddělovač)">
3.60 + <xsl:if test="normalize-space(.)">
3.61 <td><xsl:value-of select="normalize-space(.)"/></td>
3.62 </xsl:if>
3.63 </xsl:for-each>
3.64 - </tr>
3.65 - </thead>
3.66 - <tbody>
3.67 + </tr>
3.68 + </thead>
3.69 + <tbody>
3.70 <xsl:for-each select="tokenize($tělo, '\n')">
3.71 <xsl:if test="normalize-space(.)">
3.72 <tr>
3.73 - <xsl:for-each select="tokenize(., '\t+')">
3.74 + <xsl:for-each select="tokenize(., $oddělovač)">
3.75 <xsl:if test="normalize-space(.)">
3.76 <td><xsl:value-of select="normalize-space(.)"/></td>
3.77 </xsl:if>
3.78 @@ -56,9 +74,9 @@
3.79 </tr>
3.80 </xsl:if>
3.81 </xsl:for-each>
3.82 - </tbody>
3.83 - </table>
3.84 - </xsl:template>
3.85 + </tbody>
3.86 + </table>
3.87 + </xsl:template>
3.88
3.89 </xsl:stylesheet>
3.90