#20 Skriptování: uvnitř zadání skriptu lze používat jiná makra (interpretují se před provedením skriptu).
1 <?xml version="1.0" encoding="UTF-8"?>
3 XML Web generátor – program na generování webových stránek
4 Copyright © 2012 František Kučera (frantovo.cz)
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 <xsl:stylesheet version="2.0"
20 xmlns="http://www.w3.org/1999/xhtml"
21 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
22 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
23 exclude-result-prefixes="m">
28 Data zadáváme do těla elementu.
29 Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí).
30 První řádek se považuje za záhlaví (nadpisy sloupců).
32 @src volitelně můžeme data tabulky načítat ze souboru
33 @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)
35 <xsl:template match="m:tabulka">
36 <xsl:call-template name="vykresliTabulku">
37 <xsl:with-param name="zadání" select="text()"/>
38 <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
42 <!-- Skript je potřeba interpretovat ještě před tabulkou – ostatní makra budou interpretovat uvnitř buněk -->
43 <xsl:template match="m:tabulka[m:skript]">
44 <xsl:variable name="zadání">
45 <xsl:apply-templates select="*"/>
47 <xsl:call-template name="vykresliTabulku">
48 <xsl:with-param name="zadání" select="$zadání"/>
49 <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
53 <!-- Tabulka načítaná ze souboru: -->
54 <xsl:template match="m:tabulka[@src]">
55 <xsl:call-template name="vykresliTabulku">
56 <xsl:with-param name="zadání" select="m:načti-textový-soubor(@src)"/>
57 <xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/>
61 <!-- TODO: Umožnit použití maker a značek uvnitř buněk tabulky. -->
62 <xsl:template name="vykresliTabulku">
63 <xsl:param name="zadání"/>
64 <xsl:param name="oddělovač"/>
66 <xsl:variable name="data" select="replace(replace($zadání, '^\s+', ''),'\s+$','')"/>
67 <xsl:variable name="hlavička" select="substring-before($data, ' ')"/>
68 <xsl:variable name="tělo" select="substring-after($data, ' ')"/>
71 <xsl:for-each select="tokenize($hlavička, $oddělovač)">
72 <xsl:if test="normalize-space(.)">
73 <td><xsl:value-of select="normalize-space(.)"/></td>
79 <xsl:for-each select="tokenize($tělo, '\n')">
80 <xsl:if test="normalize-space(.)">
82 <xsl:for-each select="tokenize(., $oddělovač)">
83 <xsl:if test="normalize-space(.)">
84 <xsl:element name="td">
85 <xsl:if test="number(normalize-space(.))">
86 <xsl:attribute name="class">číslo</xsl:attribute>
88 <xsl:value-of select="normalize-space(.)"/>