1 <?xml version="1.0" encoding="UTF-8"?>
3 Převzato z projektu hellDesk.
5 <xsl:stylesheet version="1.0"
6 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
7 xmlns:fn="http://www.w3.org/2005/xpath-functions"
8 xmlns:str="http://xsltsl.org/string"
9 xmlns:h="http://www.w3.org/1999/xhtml">
10 <xsl:output method="text" encoding="UTF-8"/>
11 <xsl:strip-space elements="*"/>
13 <xsl:output method="text" encoding="UTF-8"/>
14 <xsl:strip-space elements="*"/>
16 <xsl:variable name="urlBase" select="/h:html/h:head/h:base/@href"/>
19 <!-- Celý dokument -->
20 <xsl:template match="/">
21 <xsl:apply-templates select="h:html/h:body"/>
25 <xsl:template match="h:h1">
26 <xsl:value-of select="text()"/>
27 <xsl:text> </xsl:text>
28 <xsl:call-template name="str:generate-string">
29 <xsl:with-param name="text" select="'='"/>
30 <xsl:with-param name="count" select="string-length(.)"/>
32 <xsl:text> </xsl:text>
33 <xsl:text> </xsl:text>
37 <xsl:template match="h:h2">
38 <xsl:value-of select="text()"/>
39 <xsl:text> </xsl:text>
40 <xsl:call-template name="str:generate-string">
41 <xsl:with-param name="text" select="'-'"/>
42 <xsl:with-param name="count" select="string-length(.)"/>
44 <xsl:text> </xsl:text>
45 <xsl:text> </xsl:text>
49 <xsl:template match="h:h3">
50 <xsl:text>### </xsl:text>
51 <xsl:value-of select="text()"/>
52 <xsl:text> </xsl:text>
53 <xsl:text> </xsl:text>
57 <xsl:template match="h:h4">
58 <xsl:text>#### </xsl:text>
59 <xsl:value-of select="text()"/>
60 <xsl:text> </xsl:text>
61 <xsl:text> </xsl:text>
65 <xsl:template match="h:h5">
66 <xsl:text>##### </xsl:text>
67 <xsl:value-of select="text()"/>
68 <xsl:text> </xsl:text>
69 <xsl:text> </xsl:text>
73 <xsl:template match="h:h6">
74 <xsl:text>###### </xsl:text>
75 <xsl:value-of select="text()"/>
76 <xsl:text> </xsl:text>
77 <xsl:text> </xsl:text>
81 <xsl:template match="h:p">
82 <xsl:apply-templates/>
83 <xsl:text> </xsl:text>
84 <xsl:text> </xsl:text>
88 <xsl:template match="h:blockquote/h:p">
89 <xsl:text>> </xsl:text>
90 <xsl:apply-templates/>
91 <xsl:text> </xsl:text>
92 <xsl:text> </xsl:text>
96 <xsl:template match="h:cite[not(starts-with(., '„') or starts-with(., '‚'))]">
97 <xsl:text>„</xsl:text>
98 <xsl:apply-templates/>
99 <xsl:text>“</xsl:text>
103 <xsl:template match="h:a">
104 <xsl:if test="not(text() = @href)">
105 <xsl:text>'</xsl:text>
106 <xsl:apply-templates select="node()"/>
107 <xsl:text>' </xsl:text>
109 <xsl:text><</xsl:text>
111 <xsl:when test="starts-with(@href, 'http:') or starts-with(@href, 'https:') or starts-with(@href, 'ftp:')">
112 <xsl:value-of select="@href"/>
114 <xsl:when test="starts-with(@href, 'mailto:')">
115 <xsl:value-of select="substring-after(@href, 'mailto:')"/>
119 <!-- TODO: $urlBase by nemělo končit lomítkem -->
120 <xsl:when test="starts-with(@href, '/')">
121 <xsl:value-of select="concat($urlBase, @href)"/>
124 <xsl:value-of select="concat($urlBase, '/', @href)"/>
129 <xsl:text>></xsl:text>
130 <xsl:if test="normalize-space(@title)">
131 <xsl:text> (</xsl:text>
132 <xsl:value-of select="@title"/>
133 <xsl:text>)</xsl:text>
138 <xsl:template match="h:img">
139 <xsl:text>Obrázek: </xsl:text>
140 <xsl:value-of select="@src"/>
141 <!-- TODO: relativní odkazy -->
145 <xsl:template match="h:strong|h:b">
146 <xsl:text>**</xsl:text>
147 <xsl:apply-templates/>
148 <xsl:text>**</xsl:text>
152 <xsl:template match="h:em|h:i">
153 <xsl:text>*</xsl:text>
154 <xsl:apply-templates/>
155 <xsl:text>*</xsl:text>
159 <xsl:template match="h:abbr[@title]">
160 <xsl:apply-templates/>
161 <xsl:text> (</xsl:text>
162 <xsl:value-of select="@title"/>
163 <xsl:text>)</xsl:text>
167 <xsl:template match="h:pre">
168 <xsl:text>--------------------------------</xsl:text>
169 <xsl:text> </xsl:text>
170 <xsl:apply-templates/>
171 <xsl:text> </xsl:text>
172 <xsl:text>--------------------------------</xsl:text>
173 <xsl:text> </xsl:text>
174 <xsl:text> </xsl:text>
178 <xsl:template match="h:code">
179 <xsl:text>`</xsl:text>
180 <xsl:apply-templates/>
181 <xsl:text>`</xsl:text>
185 <xsl:template match="h:hr">
186 <xsl:text>----------------------------------------------------------------</xsl:text>
187 <xsl:text> </xsl:text>
188 <xsl:text> </xsl:text>
192 <xsl:template match="h:br">
193 <xsl:text> </xsl:text>
197 <xsl:template match="h:ol|h:ul">
198 <xsl:variable name="úroveň" select="count(ancestor::h:li)"/>
199 <xsl:variable name="odsazení">
200 <!-- položky na nejvyšší úrovni odsazené jednou mezerou -->
201 <xsl:value-of select="' '"/>
202 <xsl:call-template name="str:generate-string">
203 <xsl:with-param name="text" select="' '"/>
204 <!-- položky na druhé a vyšší úrovni odsazené vždy dvěma dalšími mezerami -->
205 <xsl:with-param name="count" select="$úroveň - 1"/>
209 <xsl:if test="$úroveň > 0">
210 <xsl:text> </xsl:text>
213 <xsl:for-each select="h:li">
214 <xsl:if test="parent::h:ol">
215 <xsl:value-of select="concat($odsazení, position(), ') ')"/>
217 <xsl:if test="parent::h:ul">
218 <xsl:value-of select="concat($odsazení, '- ')"/>
220 <xsl:apply-templates/>
221 <xsl:if test="$úroveň = 0 or not(position() = last())">
222 <xsl:text> </xsl:text>
226 <xsl:if test="$úroveň = 0">
227 <xsl:text> </xsl:text>
232 <xsl:template match="text()[not(parent::h:pre)]">
233 <xsl:if test="(starts-with(., ' ') or starts-with(., ' ')) and preceding-sibling::node() and not(preceding-sibling::h:br)">
234 <xsl:text> </xsl:text>
236 <xsl:value-of select="normalize-space(.)"/>
237 <xsl:variable name="posledníZnak" select="substring(., string-length(.))"/>
238 <!-- TODO: tabulátor? -->
239 <xsl:if test="($posledníZnak = ' ' or $posledníZnak = ' ') and following-sibling::node()">
240 <xsl:text> </xsl:text>
245 <xsl:template match="h:div[@class = 'patička']">
246 <xsl:text>-- </xsl:text>
247 <xsl:text> </xsl:text>
248 <xsl:apply-templates/>
254 http://xsltsl.sourceforge.net/string.html#template.str:generate-string
256 <xsl:template name="str:generate-string">
257 <xsl:param name="text"/>
258 <xsl:param name="count"/>
261 <xsl:when test="string-length($text) = 0 or $count <= 0"/>
263 <xsl:value-of select="$text"/>
264 <xsl:call-template name="str:generate-string">
265 <xsl:with-param name="text" select="$text"/>
266 <xsl:with-param name="count" select="$count - 1"/>