šablona/makra/tabulka.xsl
author František Kučera <franta-hg@frantovo.cz>
Thu Oct 24 22:06:44 2019 +0200 (2019-10-24)
changeset 136 d5feb9d8ebc3
parent 111 d59023a42d4b
permissions -rw-r--r--
fix license version: GNU GPLv3
franta-hg@51
     1
<?xml version="1.0" encoding="UTF-8"?>
franta-hg@61
     2
<!--
franta-hg@61
     3
XML Web generátor – program na generování webových stránek
franta-hg@61
     4
Copyright © 2012 František Kučera (frantovo.cz)
franta-hg@61
     5
franta-hg@61
     6
This program is free software: you can redistribute it and/or modify
franta-hg@61
     7
it under the terms of the GNU General Public License as published by
franta-hg@136
     8
the Free Software Foundation, version 3 of the License.
franta-hg@61
     9
franta-hg@61
    10
This program is distributed in the hope that it will be useful,
franta-hg@61
    11
but WITHOUT ANY WARRANTY; without even the implied warranty of
franta-hg@61
    12
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
franta-hg@61
    13
GNU General Public License for more details.
franta-hg@61
    14
franta-hg@61
    15
You should have received a copy of the GNU General Public License
franta-hg@61
    16
along with this program.  If not, see <http://www.gnu.org/licenses/>.
franta-hg@61
    17
-->
franta-hg@51
    18
<xsl:stylesheet version="2.0"
franta-hg@71
    19
	xmlns="http://www.w3.org/1999/xhtml"
franta-hg@71
    20
	xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro"
franta-hg@71
    21
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
franta-hg@71
    22
	exclude-result-prefixes="m">
franta-hg@70
    23
franta-hg@51
    24
	<!--
franta-hg@51
    25
		Jednoduché tabulky
franta-hg@51
    26
		******************
franta-hg@51
    27
		Data zadáváme do těla elementu.
franta-hg@51
    28
		Sloupce oddělujeme tabulátorem (může jich být víc, minimálně však jeden, mezery nestačí).
franta-hg@51
    29
		První řádek se považuje za záhlaví (nadpisy sloupců).
franta-hg@51
    30
		*
franta-hg@70
    31
		@src volitelně můžeme data tabulky načítat ze souboru 
franta-hg@70
    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) 
franta-hg@51
    33
	-->
franta-hg@70
    34
	<xsl:template match="m:tabulka">
franta-hg@70
    35
		<xsl:call-template name="vykresliTabulku">
franta-hg@70
    36
			<xsl:with-param name="zadání" select="text()"/>
franta-hg@70
    37
			<xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
franta-hg@70
    38
		</xsl:call-template>
franta-hg@70
    39
	</xsl:template>
franta-hg@70
    40
	
franta-hg@111
    41
	<!-- Skript je potřeba interpretovat ještě před tabulkou – ostatní makra budou interpretovat uvnitř buněk -->
franta-hg@111
    42
	<xsl:template match="m:tabulka[m:skript]">
franta-hg@111
    43
		<xsl:variable name="zadání">
franta-hg@111
    44
			<xsl:apply-templates select="*"/>
franta-hg@111
    45
		</xsl:variable>
franta-hg@111
    46
		<xsl:call-template name="vykresliTabulku">
franta-hg@111
    47
			<xsl:with-param name="zadání" select="$zadání"/>
franta-hg@111
    48
			<xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/>
franta-hg@111
    49
		</xsl:call-template>
franta-hg@111
    50
	</xsl:template>
franta-hg@111
    51
	
franta-hg@111
    52
	<!-- Tabulka načítaná ze souboru: -->
franta-hg@70
    53
	<xsl:template match="m:tabulka[@src]">
franta-hg@70
    54
		<xsl:call-template name="vykresliTabulku">
franta-hg@71
    55
			<xsl:with-param name="zadání" select="m:načti-textový-soubor(@src)"/>
franta-hg@70
    56
			<xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/>
franta-hg@70
    57
		</xsl:call-template>
franta-hg@70
    58
	</xsl:template>
franta-hg@70
    59
	
franta-hg@111
    60
	<!-- TODO: Umožnit použití maker a značek uvnitř buněk tabulky. -->
franta-hg@70
    61
	<xsl:template name="vykresliTabulku">
franta-hg@70
    62
		<xsl:param name="zadání"/>
franta-hg@70
    63
		<xsl:param name="oddělovač"/>
franta-hg@70
    64
		<table>
franta-hg@70
    65
			<xsl:variable name="data" select="replace(replace($zadání, '^\s+', ''),'\s+$','')"/>
franta-hg@70
    66
			<xsl:variable name="hlavička" select="substring-before($data, '&#10;')"/>
franta-hg@70
    67
			<xsl:variable name="tělo" select="substring-after($data, '&#10;')"/>
franta-hg@70
    68
			<thead>
franta-hg@70
    69
				<tr>
franta-hg@70
    70
					<xsl:for-each select="tokenize($hlavička, $oddělovač)">
franta-hg@70
    71
						<xsl:if test="normalize-space(.)">
franta-hg@51
    72
							<td><xsl:value-of select="normalize-space(.)"/></td>
franta-hg@51
    73
						</xsl:if>
franta-hg@51
    74
					</xsl:for-each>
franta-hg@70
    75
				</tr>
franta-hg@70
    76
			</thead>
franta-hg@70
    77
			<tbody>
franta-hg@51
    78
				<xsl:for-each select="tokenize($tělo, '\n')">
franta-hg@51
    79
					<xsl:if test="normalize-space(.)">
franta-hg@51
    80
						<tr>
franta-hg@70
    81
							<xsl:for-each select="tokenize(., $oddělovač)">
franta-hg@51
    82
								<xsl:if test="normalize-space(.)">
franta-hg@90
    83
									<xsl:element name="td">
franta-hg@90
    84
										<xsl:if test="number(normalize-space(.))">
franta-hg@90
    85
											<xsl:attribute name="class">číslo</xsl:attribute>
franta-hg@90
    86
										</xsl:if>
franta-hg@90
    87
										<xsl:value-of select="normalize-space(.)"/>
franta-hg@90
    88
									</xsl:element>
franta-hg@51
    89
								</xsl:if>
franta-hg@51
    90
							</xsl:for-each>
franta-hg@51
    91
						</tr>
franta-hg@51
    92
					</xsl:if>
franta-hg@51
    93
				</xsl:for-each>
franta-hg@70
    94
			</tbody>
franta-hg@70
    95
		</table>
franta-hg@70
    96
	</xsl:template>
franta-hg@51
    97
franta-hg@51
    98
</xsl:stylesheet>
franta-hg@51
    99