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, version 3 of the License.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
18 <xsl:stylesheet version="2.0"
19 xmlns="http://www.w3.org/1999/xhtml"
20 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
21 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
22 exclude-result-prefixes="m">
27 Data zadáváme do těla elementu.
28 Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí).
29 První řádek se považuje za záhlaví (nadpisy sloupců).
31 @src volitelně můžeme data tabulky načítat ze souboru
32 @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)
34 <xsl:template match="m:tabulka">
35 <xsl:call-template name="vykresliTabulku">
36 <xsl:with-param name="zadání" select="text()"/>
37 <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
41 <!-- Skript je potřeba interpretovat ještě před tabulkou – ostatní makra budou interpretovat uvnitř buněk -->
42 <xsl:template match="m:tabulka[m:skript]">
43 <xsl:variable name="zadání">
44 <xsl:apply-templates select="*"/>
46 <xsl:call-template name="vykresliTabulku">
47 <xsl:with-param name="zadání" select="$zadání"/>
48 <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
52 <!-- Tabulka načítaná ze souboru: -->
53 <xsl:template match="m:tabulka[@src]">
54 <xsl:call-template name="vykresliTabulku">
55 <xsl:with-param name="zadání" select="m:načti-textový-soubor(@src)"/>
56 <xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/>
60 <!-- TODO: Umožnit použití maker a značek uvnitř buněk tabulky. -->
61 <xsl:template name="vykresliTabulku">
62 <xsl:param name="zadání"/>
63 <xsl:param name="oddělovač"/>
65 <xsl:variable name="data" select="replace(replace($zadání, '^\s+', ''),'\s+$','')"/>
66 <xsl:variable name="hlavička" select="substring-before($data, ' ')"/>
67 <xsl:variable name="tělo" select="substring-after($data, ' ')"/>
70 <xsl:for-each select="tokenize($hlavička, $oddělovač)">
71 <xsl:if test="normalize-space(.)">
72 <td><xsl:value-of select="normalize-space(.)"/></td>
78 <xsl:for-each select="tokenize($tělo, '\n')">
79 <xsl:if test="normalize-space(.)">
81 <xsl:for-each select="tokenize(., $oddělovač)">
82 <xsl:if test="normalize-space(.)">
83 <xsl:element name="td">
84 <xsl:if test="number(normalize-space(.))">
85 <xsl:attribute name="class">číslo</xsl:attribute>
87 <xsl:value-of select="normalize-space(.)"/>