15 |
15 |
16 You should have received a copy of the GNU General Public License |
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/>. |
17 along with this program. If not, see <http://www.gnu.org/licenses/>. |
18 --> |
18 --> |
19 <xsl:stylesheet version="2.0" |
19 <xsl:stylesheet version="2.0" |
20 xmlns="http://www.w3.org/1999/xhtml" |
20 xmlns="http://www.w3.org/1999/xhtml" |
21 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" |
21 xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" |
22 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
22 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
23 exclude-result-prefixes="m"> |
23 exclude-result-prefixes="m"> |
24 |
24 |
25 <!-- |
25 <!-- |
26 Jednoduché tabulky |
26 Jednoduché tabulky |
27 ****************** |
27 ****************** |
28 Data zadáváme do těla elementu. |
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čí). |
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ů). |
30 První řádek se považuje za záhlaví (nadpisy sloupců). |
31 * |
31 * |
|
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) |
32 --> |
34 --> |
33 <xsl:template match="m:tabulka"> |
35 <xsl:template match="m:tabulka"> |
34 <table> |
36 <xsl:call-template name="vykresliTabulku"> |
35 <xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/> |
37 <xsl:with-param name="zadání" select="text()"/> |
36 <xsl:variable name="hlavička" select="substring-before($data, ' ')"/> |
38 <xsl:with-param name="oddělovač" select="(@oddělovač, '\t+')[1]"/> |
37 <xsl:variable name="tělo" select="substring-after($data, ' ')"/> |
39 </xsl:call-template> |
38 <thead> |
40 </xsl:template> |
39 <tr> |
41 |
40 <xsl:for-each select="tokenize($hlavička, '\t+')"> |
42 <xsl:template match="m:tabulka[@src]"> |
41 <xsl:if test="normalize-space(.)"> |
43 <xsl:call-template name="vykresliTabulku"> |
|
44 <xsl:with-param name="zadání" select="unparsed-text(concat('../', $vstup, @src))"/> |
|
45 <xsl:with-param name="oddělovač" select="(@oddělovač, ';')[1]"/> |
|
46 </xsl:call-template> |
|
47 </xsl:template> |
|
48 |
|
49 <xsl:template name="vykresliTabulku"> |
|
50 <xsl:param name="zadání"/> |
|
51 <xsl:param name="oddělovač"/> |
|
52 <table> |
|
53 <xsl:variable name="data" select="replace(replace($zadání, '^\s+', ''),'\s+$','')"/> |
|
54 <xsl:variable name="hlavička" select="substring-before($data, ' ')"/> |
|
55 <xsl:variable name="tělo" select="substring-after($data, ' ')"/> |
|
56 <thead> |
|
57 <tr> |
|
58 <xsl:for-each select="tokenize($hlavička, $oddělovač)"> |
|
59 <xsl:if test="normalize-space(.)"> |
42 <td><xsl:value-of select="normalize-space(.)"/></td> |
60 <td><xsl:value-of select="normalize-space(.)"/></td> |
43 </xsl:if> |
61 </xsl:if> |
44 </xsl:for-each> |
62 </xsl:for-each> |
45 </tr> |
63 </tr> |
46 </thead> |
64 </thead> |
47 <tbody> |
65 <tbody> |
48 <xsl:for-each select="tokenize($tělo, '\n')"> |
66 <xsl:for-each select="tokenize($tělo, '\n')"> |
49 <xsl:if test="normalize-space(.)"> |
67 <xsl:if test="normalize-space(.)"> |
50 <tr> |
68 <tr> |
51 <xsl:for-each select="tokenize(., '\t+')"> |
69 <xsl:for-each select="tokenize(., $oddělovač)"> |
52 <xsl:if test="normalize-space(.)"> |
70 <xsl:if test="normalize-space(.)"> |
53 <td><xsl:value-of select="normalize-space(.)"/></td> |
71 <td><xsl:value-of select="normalize-space(.)"/></td> |
54 </xsl:if> |
72 </xsl:if> |
55 </xsl:for-each> |
73 </xsl:for-each> |
56 </tr> |
74 </tr> |
57 </xsl:if> |
75 </xsl:if> |
58 </xsl:for-each> |
76 </xsl:for-each> |
59 </tbody> |
77 </tbody> |
60 </table> |
78 </table> |
61 </xsl:template> |
79 </xsl:template> |
62 |
80 |
63 </xsl:stylesheet> |
81 </xsl:stylesheet> |
64 |
82 |