Drupal: XSL šablona pro formátování XHTML části zprávy.
1 <?xml version="1.0" encoding="UTF-8"?>
2 <xsl:stylesheet version="1.0"
3 xmlns="http://www.w3.org/1999/xhtml"
4 xmlns:h="http://www.w3.org/1999/xhtml"
5 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
6 xmlns:fn="http://www.w3.org/2005/xpath-functions"
7 xmlns:svg="http://www.w3.org/2000/svg"
8 xmlns:xs="http://www.w3.org/2001/XMLSchema"
9 exclude-result-prefixes="fn h xs">
14 doctype-public="-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN"
15 doctype-system="http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"/>
18 <xsl:param name="title"/>
19 <xsl:param name="isRoot"/>
20 <xsl:param name="urlBase"/>
21 <xsl:param name="wwwRead"/>
22 <xsl:param name="wwwPost"/>
25 <!-- Celý dokument -->
26 <xsl:template match="/">
29 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
30 <xsl:if test="$urlBase">
31 <base href="{$urlBase}"/>
33 <xsl:if test="$title">
34 <title><xsl:value-of select="$title"/></title>
36 <style type="text/css">
38 font-family: sans-serif;
43 border-top: 2px solid grey;
49 background-color: #eee;
53 border-left: 3px solid silver;
57 background-color: #eee;
60 border-left: 3px solid #a00;
73 <xsl:if test="$title and $isRoot">
74 <h1><xsl:value-of select="$title"/></h1>
76 <xsl:apply-templates select="h:html/h:body/node()"/>
78 <xsl:if test="$wwwRead or $wwwPost">
79 <div class="wwwLinks">
80 <p>Přístup přes síť www:</p>
82 <xsl:if test="$wwwRead"><li><a href="{$wwwRead}">číst tento příspěvek</a></li></xsl:if>
83 <xsl:if test="$wwwPost"><li><a href="{$wwwPost}">odpovědět na tento příspěvek</a></li></xsl:if>
93 <xsl:template match="h:a">
94 <a href="{@href}" title="{@title}"><xsl:apply-templates/></a>
99 <xsl:template match="h:img">
100 <img src="{@src}" alt="{@alt}" title="{@title}"><xsl:apply-templates/></img>
104 <xsl:template match="h:abbr">
105 <abbr title="{@title}"><xsl:apply-templates/></abbr>
109 <!-- Další povolené značky – ostatní odfiltrujeme (zbude z nich jen text) -->
110 <xsl:template match="*">
132 name() = 'blockquote'">
133 <xsl:element name="{name()}">
134 <xsl:apply-templates/>
138 <xsl:value-of select="."/>
145 Z neuzavřeného (nevalidně se vyskytujícího v body) textu uděláme odstavce.
146 Bohužel nefunguje, když neuzavřený text obsahuje jiné značky (odkazy atd.),
147 pak se totiž jedná o dva textové uzly (před značkou a za ní) a vzniknou dva odstavce.
149 <xsl:template match="h:body/text()">
150 <xsl:call-template name="makeParagraphs">
151 <xsl:with-param name="string" select="."/>
154 <xsl:variable name="newLinePlaceholder" select="'ߜ'"/>
155 <xsl:template name="makeParagraphs">
156 <xsl:param name="string" />
157 <xsl:call-template name="makeParagraphsInternal">
159 Konec řádku převedeme na obskurní znak,
160 normalizací pročistíme bílé znaky →
161 dva obskurní znaky oddělené mezerou pak značí předěl mezi odstavci
163 <xsl:with-param name="string" select="normalize-space(translate(., ' ', $newLinePlaceholder))"/>
166 <xsl:template name="makeParagraphsInternal">
167 <xsl:param name="string" />
168 <xsl:if test="ends-with($string, $newLinePlaceholder)"><xsl:comment>končí na $newLinePlaceholder</xsl:comment> </xsl:if>
169 <!-- V XSLT 2.0 můžeme použít fn:tokenize -->
170 <xsl:param name="delimiter" select="concat($newLinePlaceholder, ' ', $newLinePlaceholder)"/>
172 <xsl:when test="$delimiter and contains($string, $delimiter)">
173 <xsl:call-template name="makeParagraph">
174 <xsl:with-param name="string" select="substring-before($string, $delimiter)"></xsl:with-param>
176 <xsl:call-template name="makeParagraphsInternal">
177 <xsl:with-param name="string" select="substring-after($string, $delimiter)" />
178 <xsl:with-param name="delimiter" select="$delimiter" />
183 Poslední odstavec → zkontrolovat, zda je za ním
185 <xsl:call-template name="makeParagraph">
186 <xsl:with-param name="string" select="$string"></xsl:with-param>
191 <xsl:template name="makeParagraph">
192 <xsl:param name="string" />
193 <!-- prázdné textové uzly nás nezajímají – nechceme prázdné odstavce -->
194 <xsl:if test="normalize-space($string)">
195 <p class="mešuge"><xsl:value-of select="translate($string, $newLinePlaceholder, ' ')" /></p>