1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/Postak/src/cz/frantovo/postak/odchozíEmailText.xsl Wed May 09 18:09:06 2012 +0200
1.3 @@ -0,0 +1,274 @@
1.4 +<?xml version="1.0" encoding="UTF-8"?>
1.5 +<!--
1.6 + Převzato z projektu hellDesk.
1.7 +-->
1.8 +<xsl:stylesheet version="1.0"
1.9 + xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
1.10 + xmlns:fn="http://www.w3.org/2005/xpath-functions"
1.11 + xmlns:str="http://xsltsl.org/string"
1.12 + xmlns:h="http://www.w3.org/1999/xhtml">
1.13 + <xsl:output method="text" encoding="UTF-8"/>
1.14 + <xsl:strip-space elements="*"/>
1.15 +
1.16 + <xsl:output method="text" encoding="UTF-8"/>
1.17 + <xsl:strip-space elements="*"/>
1.18 +
1.19 + <xsl:variable name="urlBase" select="/h:html/h:head/h:base/@href"/>
1.20 +
1.21 +
1.22 + <!-- Celý dokument -->
1.23 + <xsl:template match="/">
1.24 + <xsl:apply-templates select="h:html/h:body"/>
1.25 + </xsl:template>
1.26 +
1.27 +
1.28 + <xsl:template match="h:h1">
1.29 + <xsl:value-of select="text()"/>
1.30 + <xsl:text> </xsl:text>
1.31 + <xsl:call-template name="str:generate-string">
1.32 + <xsl:with-param name="text" select="'='"/>
1.33 + <xsl:with-param name="count" select="string-length(.)"/>
1.34 + </xsl:call-template>
1.35 + <xsl:text> </xsl:text>
1.36 + <xsl:text> </xsl:text>
1.37 + </xsl:template>
1.38 +
1.39 +
1.40 + <xsl:template match="h:h2">
1.41 + <xsl:value-of select="text()"/>
1.42 + <xsl:text> </xsl:text>
1.43 + <xsl:call-template name="str:generate-string">
1.44 + <xsl:with-param name="text" select="'-'"/>
1.45 + <xsl:with-param name="count" select="string-length(.)"/>
1.46 + </xsl:call-template>
1.47 + <xsl:text> </xsl:text>
1.48 + <xsl:text> </xsl:text>
1.49 + </xsl:template>
1.50 +
1.51 +
1.52 + <xsl:template match="h:h3">
1.53 + <xsl:text>### </xsl:text>
1.54 + <xsl:value-of select="text()"/>
1.55 + <xsl:text> </xsl:text>
1.56 + <xsl:text> </xsl:text>
1.57 + </xsl:template>
1.58 +
1.59 +
1.60 + <xsl:template match="h:h4">
1.61 + <xsl:text>#### </xsl:text>
1.62 + <xsl:value-of select="text()"/>
1.63 + <xsl:text> </xsl:text>
1.64 + <xsl:text> </xsl:text>
1.65 + </xsl:template>
1.66 +
1.67 +
1.68 + <xsl:template match="h:h5">
1.69 + <xsl:text>##### </xsl:text>
1.70 + <xsl:value-of select="text()"/>
1.71 + <xsl:text> </xsl:text>
1.72 + <xsl:text> </xsl:text>
1.73 + </xsl:template>
1.74 +
1.75 +
1.76 + <xsl:template match="h:h6">
1.77 + <xsl:text>###### </xsl:text>
1.78 + <xsl:value-of select="text()"/>
1.79 + <xsl:text> </xsl:text>
1.80 + <xsl:text> </xsl:text>
1.81 + </xsl:template>
1.82 +
1.83 +
1.84 + <xsl:template match="h:p">
1.85 + <xsl:apply-templates/>
1.86 + <xsl:text> </xsl:text>
1.87 + <xsl:text> </xsl:text>
1.88 + </xsl:template>
1.89 +
1.90 +
1.91 + <xsl:template match="h:blockquote/h:p">
1.92 + <xsl:text>> </xsl:text>
1.93 + <xsl:apply-templates/>
1.94 + <xsl:text> </xsl:text>
1.95 + <xsl:text> </xsl:text>
1.96 + </xsl:template>
1.97 +
1.98 +
1.99 + <xsl:template match="h:cite[not(starts-with(., '„') or starts-with(., '‚'))]">
1.100 + <xsl:text>„</xsl:text>
1.101 + <xsl:apply-templates/>
1.102 + <xsl:text>“</xsl:text>
1.103 + </xsl:template>
1.104 +
1.105 +
1.106 + <xsl:template match="h:a">
1.107 + <xsl:if test="not(text() = @href)">
1.108 + <xsl:text>'</xsl:text>
1.109 + <xsl:apply-templates select="node()"/>
1.110 + <xsl:text>' </xsl:text>
1.111 + </xsl:if>
1.112 + <xsl:text><</xsl:text>
1.113 + <xsl:choose>
1.114 + <xsl:when test="starts-with(@href, 'http:') or starts-with(@href, 'https:') or starts-with(@href, 'ftp:')">
1.115 + <xsl:value-of select="@href"/>
1.116 + </xsl:when>
1.117 + <xsl:when test="starts-with(@href, 'mailto:')">
1.118 + <xsl:value-of select="substring-after(@href, 'mailto:')"/>
1.119 + </xsl:when>
1.120 + <xsl:otherwise>
1.121 + <xsl:choose>
1.122 + <!-- TODO: $urlBase by nemělo končit lomítkem -->
1.123 + <xsl:when test="starts-with(@href, '/')">
1.124 + <xsl:value-of select="concat($urlBase, @href)"/>
1.125 + </xsl:when>
1.126 + <xsl:otherwise>
1.127 + <xsl:value-of select="concat($urlBase, '/', @href)"/>
1.128 + </xsl:otherwise>
1.129 + </xsl:choose>
1.130 + </xsl:otherwise>
1.131 + </xsl:choose>
1.132 + <xsl:text>></xsl:text>
1.133 + <xsl:if test="normalize-space(@title)">
1.134 + <xsl:text> (</xsl:text>
1.135 + <xsl:value-of select="@title"/>
1.136 + <xsl:text>)</xsl:text>
1.137 + </xsl:if>
1.138 + </xsl:template>
1.139 +
1.140 +
1.141 + <xsl:template match="h:img">
1.142 + <xsl:text>Obrázek: </xsl:text>
1.143 + <xsl:value-of select="@src"/>
1.144 + <!-- TODO: relativní odkazy -->
1.145 + </xsl:template>
1.146 +
1.147 +
1.148 + <xsl:template match="h:strong|h:b">
1.149 + <xsl:text>**</xsl:text>
1.150 + <xsl:apply-templates/>
1.151 + <xsl:text>**</xsl:text>
1.152 + </xsl:template>
1.153 +
1.154 +
1.155 + <xsl:template match="h:em|h:i">
1.156 + <xsl:text>*</xsl:text>
1.157 + <xsl:apply-templates/>
1.158 + <xsl:text>*</xsl:text>
1.159 + </xsl:template>
1.160 +
1.161 +
1.162 + <xsl:template match="h:abbr[@title]">
1.163 + <xsl:apply-templates/>
1.164 + <xsl:text> (</xsl:text>
1.165 + <xsl:value-of select="@title"/>
1.166 + <xsl:text>)</xsl:text>
1.167 + </xsl:template>
1.168 +
1.169 +
1.170 + <xsl:template match="h:pre">
1.171 + <xsl:text>--------------------------------</xsl:text>
1.172 + <xsl:text> </xsl:text>
1.173 + <xsl:apply-templates/>
1.174 + <xsl:text> </xsl:text>
1.175 + <xsl:text>--------------------------------</xsl:text>
1.176 + <xsl:text> </xsl:text>
1.177 + <xsl:text> </xsl:text>
1.178 + </xsl:template>
1.179 +
1.180 +
1.181 + <xsl:template match="h:code">
1.182 + <xsl:text>`</xsl:text>
1.183 + <xsl:apply-templates/>
1.184 + <xsl:text>`</xsl:text>
1.185 + </xsl:template>
1.186 +
1.187 +
1.188 + <xsl:template match="h:hr">
1.189 + <xsl:text>----------------------------------------------------------------</xsl:text>
1.190 + <xsl:text> </xsl:text>
1.191 + <xsl:text> </xsl:text>
1.192 + </xsl:template>
1.193 +
1.194 +
1.195 + <xsl:template match="h:br">
1.196 + <xsl:text> </xsl:text>
1.197 + </xsl:template>
1.198 +
1.199 +
1.200 + <xsl:template match="h:ol|h:ul">
1.201 + <xsl:variable name="úroveň" select="count(ancestor::h:li)"/>
1.202 + <xsl:variable name="odsazení">
1.203 + <!-- položky na nejvyšší úrovni odsazené jednou mezerou -->
1.204 + <xsl:value-of select="' '"/>
1.205 + <xsl:call-template name="str:generate-string">
1.206 + <xsl:with-param name="text" select="' '"/>
1.207 + <!-- položky na druhé a vyšší úrovni odsazené vždy dvěma dalšími mezerami -->
1.208 + <xsl:with-param name="count" select="$úroveň - 1"/>
1.209 + </xsl:call-template>
1.210 + </xsl:variable>
1.211 +
1.212 + <xsl:if test="$úroveň > 0">
1.213 + <xsl:text> </xsl:text>
1.214 + </xsl:if>
1.215 +
1.216 + <xsl:for-each select="h:li">
1.217 + <xsl:if test="parent::h:ol">
1.218 + <xsl:value-of select="concat($odsazení, position(), ') ')"/>
1.219 + </xsl:if>
1.220 + <xsl:if test="parent::h:ul">
1.221 + <xsl:value-of select="concat($odsazení, '- ')"/>
1.222 + </xsl:if>
1.223 + <xsl:apply-templates/>
1.224 + <xsl:if test="$úroveň = 0 or not(position() = last())">
1.225 + <xsl:text> </xsl:text>
1.226 + </xsl:if>
1.227 + </xsl:for-each>
1.228 +
1.229 + <xsl:if test="$úroveň = 0">
1.230 + <xsl:text> </xsl:text>
1.231 + </xsl:if>
1.232 + </xsl:template>
1.233 +
1.234 +
1.235 + <xsl:template match="text()[not(parent::h:pre)]">
1.236 + <xsl:if test="(starts-with(., ' ') or starts-with(., ' ')) and preceding-sibling::node() and not(preceding-sibling::h:br)">
1.237 + <xsl:text> </xsl:text>
1.238 + </xsl:if>
1.239 + <xsl:value-of select="normalize-space(.)"/>
1.240 + <xsl:variable name="posledníZnak" select="substring(., string-length(.))"/>
1.241 + <!-- TODO: tabulátor? -->
1.242 + <xsl:if test="($posledníZnak = ' ' or $posledníZnak = ' ') and following-sibling::node()">
1.243 + <xsl:text> </xsl:text>
1.244 + </xsl:if>
1.245 + </xsl:template>
1.246 +
1.247 +
1.248 + <xsl:template match="h:div[@class = 'patička']">
1.249 + <xsl:text>-- </xsl:text>
1.250 + <xsl:text> </xsl:text>
1.251 + <xsl:apply-templates/>
1.252 + </xsl:template>
1.253 +
1.254 +
1.255 + <!--
1.256 + Převzato z:
1.257 + http://xsltsl.sourceforge.net/string.html#template.str:generate-string
1.258 + -->
1.259 + <xsl:template name="str:generate-string">
1.260 + <xsl:param name="text"/>
1.261 + <xsl:param name="count"/>
1.262 +
1.263 + <xsl:choose>
1.264 + <xsl:when test="string-length($text) = 0 or $count <= 0"/>
1.265 + <xsl:otherwise>
1.266 + <xsl:value-of select="$text"/>
1.267 + <xsl:call-template name="str:generate-string">
1.268 + <xsl:with-param name="text" select="$text"/>
1.269 + <xsl:with-param name="count" select="$count - 1"/>
1.270 + </xsl:call-template>
1.271 + </xsl:otherwise>
1.272 + </xsl:choose>
1.273 + </xsl:template>
1.274 +
1.275 +
1.276 +</xsl:stylesheet>
1.277 +