[1] | 1 | <?xml version="1.0" encoding="UTF-8"?> |
---|
| 2 | <xsl:stylesheet version="2.0" |
---|
| 3 | xmlns="http://www.w3.org/1999/xhtml" |
---|
[2] | 4 | xmlns:h="http://www.w3.org/1999/xhtml" |
---|
[18] | 5 | xmlns:s="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/strana" |
---|
| 6 | xmlns:k="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/konfigurace" |
---|
[17] | 7 | xmlns:m="https://trac.frantovo.cz/xml-web-generator/wiki/xmlns/makro" |
---|
[27] | 8 | xmlns:j="java:cz.frantovo.xmlWebGenerator.Funkce" |
---|
[2] | 9 | xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
---|
| 10 | xmlns:fn="http://www.w3.org/2005/xpath-functions" |
---|
[5] | 11 | xmlns:svg="http://www.w3.org/2000/svg" |
---|
[15] | 12 | xmlns:xs="http://www.w3.org/2001/XMLSchema" |
---|
[27] | 13 | exclude-result-prefixes="fn h s k m j xs"> |
---|
[2] | 14 | <xsl:output |
---|
| 15 | method="xml" |
---|
| 16 | indent="yes" |
---|
| 17 | encoding="UTF-8" |
---|
| 18 | doctype-public="-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" |
---|
| 19 | doctype-system="http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"/> |
---|
[19] | 20 | |
---|
[11] | 21 | <xsl:param name="vstup" select="'../vstup/'"/> |
---|
[33] | 22 | <xsl:param name="výstup" select="'../výstup/'"/> |
---|
[15] | 23 | <xsl:param name="vstupníPřípona" select="'.xml'"/> |
---|
| 24 | <xsl:param name="výstupníPřípona" select="'.xhtml'"/> |
---|
| 25 | <xsl:param name="vsuvkováPřípona" select="'.inc'"/> |
---|
| 26 | <xsl:param name="podporaZaostalýchProhlížečů" select="false()" as="xs:boolean"/> |
---|
[1] | 27 | |
---|
[19] | 28 | <xsl:include href="makra.xsl"/> |
---|
| 29 | |
---|
[5] | 30 | <!-- Celý dokument: --> |
---|
[1] | 31 | <xsl:template match="/"> |
---|
[11] | 32 | <xsl:variable name="konfigurace" select="document(concat($vstup, 'web.conf'))"/> |
---|
[1] | 33 | <html> |
---|
| 34 | <head> |
---|
[16] | 35 | <xsl:if test="$podporaZaostalýchProhlížečů"> |
---|
| 36 | <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> |
---|
| 37 | </xsl:if> |
---|
[18] | 38 | <title><xsl:value-of select="s:stránka/s:nadpis"/></title> |
---|
[8] | 39 | <link title="Novinky (Atom)" href="atom.xml" type="application/atom+xml" rel="alternate"/> |
---|
[10] | 40 | <link title="Novinky (RSS)" href="rss.xml" type="application/rss+xml" rel="alternate"/> |
---|
[18] | 41 | <xsl:apply-templates select="$konfigurace/k:web/k:js"/> |
---|
| 42 | <xsl:apply-templates select="$konfigurace/k:web/k:css"/> |
---|
[1] | 43 | </head> |
---|
| 44 | <body> |
---|
[12] | 45 | <div id="tělo"> |
---|
| 46 | <div id="záhlaví"> |
---|
[18] | 47 | <xsl:apply-templates select="document(fn:encode-for-uri(concat($vstup, 'záhlaví', $vsuvkováPřípona)))/s:stránka/h:text/node()"/> |
---|
[12] | 48 | </div> |
---|
| 49 | <div id="vnitřek"> |
---|
[18] | 50 | <h1><xsl:value-of select="s:stránka/s:nadpis"/></h1> |
---|
[12] | 51 | <ul id="nabídka"> |
---|
[20] | 52 | <xsl:for-each select="collection(concat('./', $vstup ,'/?select=*', $vstupníPřípona))[s:stránka/s:pořadí]"> |
---|
[18] | 53 | <xsl:sort select="empty(./s:stránka/s:pořadí)"/> |
---|
| 54 | <xsl:sort select="./s:stránka/s:pořadí"/> |
---|
[12] | 55 | <li> |
---|
| 56 | <xsl:variable name="xmlSoubor" select="tokenize(document-uri(.), '/')[last()]"/> |
---|
[15] | 57 | <xsl:variable name="xhtmlSoubor" select="replace($xmlSoubor, $vstupníPřípona, $výstupníPřípona)"/> |
---|
[18] | 58 | <a href="{fn:encode-for-uri($xhtmlSoubor)}"><xsl:value-of select="./s:stránka/s:nadpis"/></a> |
---|
[12] | 59 | </li> |
---|
| 60 | </xsl:for-each> |
---|
| 61 | </ul> |
---|
| 62 | <div id="text"> |
---|
[18] | 63 | <xsl:apply-templates select="s:stránka/h:text/node()"/> |
---|
[12] | 64 | </div> |
---|
| 65 | </div> |
---|
| 66 | <div id="zápatí"> |
---|
[18] | 67 | <xsl:apply-templates select="document(fn:encode-for-uri(concat($vstup, 'zápatí', $vsuvkováPřípona)))/s:stránka/h:text/node()"/> |
---|
[12] | 68 | </div> |
---|
| 69 | </div> |
---|
[1] | 70 | </body> |
---|
| 71 | </html> |
---|
| 72 | </xsl:template> |
---|
| 73 | |
---|
[5] | 74 | <!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: --> |
---|
| 75 | <xsl:template match="*"> |
---|
| 76 | <xsl:element name="{name()}"> |
---|
| 77 | <xsl:copy-of select="@*"/> |
---|
| 78 | <xsl:apply-templates/> |
---|
| 79 | </xsl:element> |
---|
| 80 | </xsl:template> |
---|
[10] | 81 | |
---|
[18] | 82 | <!-- Varování pro případ, že jsme v režimu podpory pro zaostalé prohlížeče --> |
---|
[15] | 83 | <xsl:template name="varováníRetardace"> |
---|
| 84 | <xsl:if test="$podporaZaostalýchProhlížečů"> |
---|
| 85 | <xsl:comment> |
---|
| 86 | Generátor byl spuštěn v režimu podpory zaostalých prohlížečů. |
---|
| 87 | Uživatelům doporučujeme upgrade na skutečný WWW prohlížeč, |
---|
| 88 | jako je např. Firefox nebo Chromium (případně Opera či Safari). |
---|
| 89 | </xsl:comment> |
---|
| 90 | </xsl:if> |
---|
[18] | 91 | </xsl:template> |
---|
| 92 | |
---|
| 93 | <!-- Odkazy na JavaScript a kaskádové styly --> |
---|
| 94 | <xsl:template match="k:web/k:js"> |
---|
[15] | 95 | <script src="{text()}" type="text/javascript"> |
---|
| 96 | <xsl:call-template name="varováníRetardace"/> |
---|
| 97 | </script> |
---|
[10] | 98 | </xsl:template> |
---|
[18] | 99 | <xsl:template match="k:web/k:css"> |
---|
[10] | 100 | <link href="{text()}" type="text/css" rel="StyleSheet" /> |
---|
| 101 | </xsl:template> |
---|
[36] | 102 | |
---|
| 103 | <!-- |
---|
| 104 | TODO: makra vyčlenit do samostatných souborů |
---|
| 105 | --> |
---|
[17] | 106 | |
---|
| 107 | <!-- |
---|
| 108 | Makro pro převod interních odkazů: |
---|
| 109 | - doplnění správné přípony |
---|
| 110 | - URL kódování znaků |
---|
| 111 | --> |
---|
| 112 | <xsl:template match="m:a"> |
---|
| 113 | <a> |
---|
| 114 | <xsl:copy-of select="@*"/> |
---|
| 115 | <xsl:attribute name="href"> |
---|
| 116 | <xsl:value-of select="fn:encode-for-uri(concat(@href, $výstupníPřípona))"/> |
---|
| 117 | </xsl:attribute> |
---|
| 118 | <xsl:apply-templates/> |
---|
| 119 | </a> |
---|
| 120 | </xsl:template> |
---|
[27] | 121 | |
---|
| 122 | <!-- |
---|
| 123 | Makro pro zvýraznění syntaxe: |
---|
| 124 | --> |
---|
| 125 | <xsl:template match="m:pre"> |
---|
[43] | 126 | <xsl:call-template name="zvýrazniZdroják"> |
---|
| 127 | <xsl:with-param name="zdroják" select="text()"/> |
---|
[40] | 128 | </xsl:call-template> |
---|
| 129 | </xsl:template> |
---|
| 130 | |
---|
| 131 | <xsl:template match="m:pre[@src]"> |
---|
[43] | 132 | <xsl:call-template name="zvýrazniZdroják"> |
---|
| 133 | <xsl:with-param name="zdroják" select="unparsed-text(concat($vstup, @src))"/> |
---|
[40] | 134 | </xsl:call-template> |
---|
[43] | 135 | <xsl:if test="@odkaz = 'ano'"> |
---|
| 136 | <p class="zdroják-ke-stažení"> |
---|
| 137 | <span>Stáhnout: <a href="{encode-for-uri(@src)}"><xsl:value-of select="@src"/></a></span> |
---|
| 138 | </p> |
---|
| 139 | </xsl:if> |
---|
[40] | 140 | </xsl:template> |
---|
| 141 | |
---|
[43] | 142 | <xsl:template name="zvýrazniZdroják"> |
---|
| 143 | <xsl:param name="zdroják"/> |
---|
| 144 | <xsl:variable name="zvýrazněnýZdroják" select="j:zvýrazniSyntaxi($zdroják, @jazyk)"/> |
---|
[28] | 145 | <xsl:choose> |
---|
[43] | 146 | <xsl:when test="$zvýrazněnýZdroják"> |
---|
[29] | 147 | <xsl:comment>Následující kód je v jazyce <xsl:value-of select="@jazyk"/></xsl:comment> |
---|
[43] | 148 | <xsl:value-of disable-output-escaping="yes" select="$zvýrazněnýZdroják"/> |
---|
[28] | 149 | </xsl:when> |
---|
| 150 | <xsl:otherwise> |
---|
| 151 | <xsl:message>Zvýraznění syntaxe se nezdařilo → bude vložen původní nezvýrazněný kód.</xsl:message> |
---|
[43] | 152 | <pre><xsl:value-of select="$zdroják"/></pre> |
---|
[28] | 153 | </xsl:otherwise> |
---|
[43] | 154 | </xsl:choose> |
---|
[32] | 155 | </xsl:template> |
---|
| 156 | |
---|
| 157 | <!-- |
---|
| 158 | Makro pro diagramy/grafy |
---|
| 159 | --> |
---|
| 160 | <xsl:template match="m:diagram"> |
---|
| 161 | <xsl:variable name="souborDiagramu" select="j:vytvořDiagram(text(), @orientace = 'vodorovně')"/> |
---|
| 162 | <xsl:choose> |
---|
| 163 | <xsl:when test="$souborDiagramu"> |
---|
| 164 | <div class="diagram"> |
---|
| 165 | <a href="{$souborDiagramu}.svg"> |
---|
[33] | 166 | <img |
---|
| 167 | src="{$souborDiagramu}.svg" |
---|
| 168 | alt="Diagram {$souborDiagramu} | pokud nevidíte obrázek, váš prohlížeč stojí za starou bačkoru" |
---|
| 169 | title="{@nadpis} (klikněte pro zobrazení samotného diagramu)"/> |
---|
[32] | 170 | </a> |
---|
[33] | 171 | <!-- TODO: SVG+PNG |
---|
| 172 | <xsl:variable name="svgDiagramu" select="document(concat($výstup, $souborDiagramu, '.svg'))/svg:svg"/> |
---|
| 173 | <object |
---|
| 174 | data="{$souborDiagramu}.svg" |
---|
| 175 | type="image/svg+xml" |
---|
| 176 | style="width: {$svgDiagramu/@width}; height: {$svgDiagramu/@height}"> |
---|
| 177 | <img src="{$souborDiagramu}.png" alt="Diagram {$souborDiagramu}"/> |
---|
[32] | 178 | </object> |
---|
[33] | 179 | --> |
---|
[32] | 180 | <xsl:if test="@nadpis"> |
---|
| 181 | <p class="nadpis"><xsl:value-of select="@nadpis"/></p> |
---|
| 182 | </xsl:if> |
---|
| 183 | </div> |
---|
| 184 | </xsl:when> |
---|
| 185 | <xsl:otherwise> |
---|
| 186 | <xsl:message terminate="yes">Při vytváření diagramu došlo k chybě.</xsl:message> |
---|
| 187 | </xsl:otherwise> |
---|
| 188 | </xsl:choose> |
---|
| 189 | </xsl:template> |
---|
[37] | 190 | |
---|
| 191 | <!-- |
---|
| 192 | Makro pro Wiki syntaxi |
---|
| 193 | --> |
---|
| 194 | <xsl:template match="m:wiki"> |
---|
| 195 | <xsl:variable name="wikiXHTML" select="j:formátujWiki(text(), @syntaxe)"/> |
---|
| 196 | <xsl:choose> |
---|
| 197 | <xsl:when test="$wikiXHTML"> |
---|
| 198 | <xsl:value-of select="$wikiXHTML" disable-output-escaping="yes"/> |
---|
| 199 | </xsl:when> |
---|
| 200 | <xsl:otherwise> |
---|
| 201 | <xsl:message terminate="yes">Při zpracování wiki syntaxe došlo k chybě.</xsl:message> |
---|
| 202 | </xsl:otherwise> |
---|
| 203 | </xsl:choose> |
---|
| 204 | </xsl:template> |
---|
[44] | 205 | |
---|
| 206 | <!-- |
---|
| 207 | Makro pro vycpávkový text |
---|
| 208 | --> |
---|
| 209 | <xsl:template match="m:vycpávka"> |
---|
| 210 | <!-- |
---|
| 211 | TODO: stáhnout jen jednou, uložit do souboru a při dalších generováních brát z něj. |
---|
| 212 | --> |
---|
[45] | 213 | <xsl:message>Stahuji vycpávkový text z http://lipsum.lipsum.com/</xsl:message> |
---|
[44] | 214 | <xsl:variable name="prostýText" select="document(concat('http://lipsum.lipsum.com/feed/xml?amount=', @odstavců, '&what=paragraphs'))/feed/lipsum"/> |
---|
| 215 | <xsl:for-each select="fn:tokenize($prostýText, '\n')"> |
---|
| 216 | <p><xsl:value-of select="."/></p> |
---|
[46] | 217 | </xsl:for-each> |
---|
[44] | 218 | </xsl:template> |
---|
| 219 | |
---|
[46] | 220 | <!-- |
---|
| 221 | Makro pro jednoduché tabulky |
---|
| 222 | --> |
---|
| 223 | <xsl:template match="m:tabulka"> |
---|
| 224 | <table> |
---|
| 225 | <xsl:variable name="data" select="replace(replace(text(), '^\s+', ''),'\s+$','')"/> |
---|
| 226 | <xsl:variable name="hlavička" select="substring-before($data, ' ')"/> |
---|
| 227 | <xsl:variable name="tělo" select="substring-after($data, ' ')"/> |
---|
| 228 | <thead> |
---|
| 229 | <tr> |
---|
[49] | 230 | <xsl:for-each select="tokenize($hlavička, '\t')"> |
---|
| 231 | <xsl:if test="normalize-space(.)"> |
---|
| 232 | <td><xsl:value-of select="normalize-space(.)"/></td> |
---|
| 233 | </xsl:if> |
---|
[46] | 234 | </xsl:for-each> |
---|
| 235 | </tr> |
---|
| 236 | </thead> |
---|
| 237 | <tbody> |
---|
| 238 | <xsl:for-each select="tokenize($tělo, '\n')"> |
---|
| 239 | <xsl:if test="normalize-space(.)"> |
---|
| 240 | <tr> |
---|
[49] | 241 | <xsl:for-each select="tokenize(., '\t')"> |
---|
| 242 | <xsl:if test="normalize-space(.)"> |
---|
| 243 | <td><xsl:value-of select="normalize-space(.)"/></td> |
---|
| 244 | </xsl:if> |
---|
[46] | 245 | </xsl:for-each> |
---|
| 246 | </tr> |
---|
| 247 | </xsl:if> |
---|
| 248 | </xsl:for-each> |
---|
| 249 | </tbody> |
---|
| 250 | </table> |
---|
| 251 | </xsl:template> |
---|
[1] | 252 | |
---|
| 253 | </xsl:stylesheet> |
---|