java/Postak/src/cz/frantovo/postak/odchozíEmailText.xsl
changeset 18 4f42075aada1
child 21 798e7455da4e
     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>&#10;</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>&#10;</xsl:text>
    1.36 +		<xsl:text>&#10;</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>&#10;</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>&#10;</xsl:text>
    1.48 +		<xsl:text>&#10;</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>&#10;</xsl:text>
    1.56 +		<xsl:text>&#10;</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>&#10;</xsl:text>
    1.64 +		<xsl:text>&#10;</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>&#10;</xsl:text>
    1.72 +		<xsl:text>&#10;</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>&#10;</xsl:text>
    1.80 +		<xsl:text>&#10;</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>&#10;</xsl:text>
    1.87 +		<xsl:text>&#10;</xsl:text>
    1.88 +	</xsl:template>
    1.89 +
    1.90 +	
    1.91 +	<xsl:template match="h:blockquote/h:p">
    1.92 +		<xsl:text>&gt; </xsl:text>
    1.93 +		<xsl:apply-templates/>
    1.94 +		<xsl:text>&#10;</xsl:text>
    1.95 +		<xsl:text>&#10;</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>&lt;</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>&gt;</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>&#10;</xsl:text>
   1.173 +		<xsl:apply-templates/>
   1.174 +		<xsl:text>&#10;</xsl:text>
   1.175 +		<xsl:text>--------------------------------</xsl:text>
   1.176 +		<xsl:text>&#10;</xsl:text>
   1.177 +		<xsl:text>&#10;</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>&#10;</xsl:text>
   1.191 +		<xsl:text>&#10;</xsl:text>
   1.192 +	</xsl:template>
   1.193 +
   1.194 +
   1.195 +	<xsl:template match="h:br">
   1.196 +		<xsl:text>&#10;</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ň &gt; 0">
   1.213 +			<xsl:text>&#10;</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>&#10;</xsl:text>
   1.226 +			</xsl:if>
   1.227 +		</xsl:for-each>
   1.228 +		
   1.229 +		<xsl:if test="$úroveň = 0">
   1.230 +			<xsl:text>&#10;</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(., '&#10;')) 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 = '&#10;') 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>&#10;</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 &lt;= 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 +