helpers/mimeTextPart.xsl
author František Kučera <franta-hg@frantovo.cz>
Tue Oct 18 22:55:43 2011 +0200 (2011-10-18)
changeset 99 dd361cf60002
parent 97 7520a9246ff5
child 110 c81406884e16
permissions -rw-r--r--
Drupal: text/plain – odstranění přebytečných mezer na začátcích a koncích odstavců (oprava).
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <xsl:stylesheet version="2.0"
     3 	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     4 	xmlns:fn="http://www.w3.org/2005/xpath-functions"
     5 	xmlns:h="http://www.w3.org/1999/xhtml">
     6 	<xsl:output method="text" encoding="UTF-8"/>
     7 	<xsl:strip-space elements="*"/>
     8 	
     9 	<xsl:output method="text" encoding="UTF-8"/>
    10 	<xsl:strip-space elements="*"/>
    11 	
    12 	<xsl:variable name="urlBase" select="/h:html/h:head/h:base/@href"/>
    13 
    14 	
    15 	<!-- Celý dokument -->
    16 	<xsl:template match="/">
    17 		<xsl:apply-templates select="h:html/h:body"/>
    18 	</xsl:template>
    19 
    20 
    21 	<xsl:template match="h:h1">
    22 		<xsl:value-of select="text()"/>
    23 		<xsl:text>&#10;</xsl:text>
    24 		<xsl:for-each select="1 to string-length(.)">=</xsl:for-each>		
    25 		<xsl:text>&#10;</xsl:text>
    26 		<xsl:text>&#10;</xsl:text>
    27 	</xsl:template>
    28 	
    29 	
    30 	<xsl:template match="h:h2">
    31 		<xsl:value-of select="text()"/>
    32 		<xsl:text>&#10;</xsl:text>
    33 		<xsl:for-each select="1 to string-length(.)">-</xsl:for-each>		
    34 		<xsl:text>&#10;</xsl:text>
    35 		<xsl:text>&#10;</xsl:text>
    36 	</xsl:template>
    37 	
    38 	
    39 	<xsl:template match="h:h3">
    40 		<xsl:for-each select="1 to 3">#</xsl:for-each>
    41 		<xsl:text> </xsl:text>
    42 		<xsl:value-of select="text()"/>
    43 		<xsl:text>&#10;</xsl:text>
    44 		<xsl:text>&#10;</xsl:text>
    45 	</xsl:template>
    46 	
    47 	
    48 	<xsl:template match="h:h4">
    49 		<xsl:for-each select="1 to 4">#</xsl:for-each>
    50 		<xsl:text> </xsl:text>
    51 		<xsl:value-of select="text()"/>
    52 		<xsl:text>&#10;</xsl:text>
    53 		<xsl:text>&#10;</xsl:text>
    54 	</xsl:template>
    55 	
    56 	
    57 	<xsl:template match="h:h5">
    58 		<xsl:for-each select="1 to 5">#</xsl:for-each>
    59 		<xsl:text> </xsl:text>
    60 		<xsl:value-of select="text()"/>
    61 		<xsl:text>&#10;</xsl:text>
    62 		<xsl:text>&#10;</xsl:text>
    63 	</xsl:template>
    64 	
    65 	
    66 	<xsl:template match="h:h6">
    67 		<xsl:for-each select="1 to 6">#</xsl:for-each>
    68 		<xsl:text> </xsl:text>
    69 		<xsl:value-of select="text()"/>
    70 		<xsl:text>&#10;</xsl:text>
    71 		<xsl:text>&#10;</xsl:text>
    72 	</xsl:template>
    73 
    74 
    75 	<xsl:template match="h:p">
    76 		<xsl:apply-templates/>
    77 		<xsl:text>&#10;</xsl:text>
    78 		<xsl:text>&#10;</xsl:text>
    79 	</xsl:template>
    80 
    81 	
    82 	<xsl:template match="h:blockquote/h:p">
    83 		<xsl:text>&gt; </xsl:text>
    84 		<xsl:apply-templates/>
    85 		<xsl:text>&#10;</xsl:text>
    86 		<xsl:text>&#10;</xsl:text>
    87 	</xsl:template>
    88 
    89 	
    90 	<xsl:template match="h:cite[not(matches(., '^(&quot;|„)'))]">
    91 		<xsl:text>„</xsl:text>
    92 		<xsl:apply-templates/>
    93 		<xsl:text>“</xsl:text>
    94 	</xsl:template>	
    95 	
    96 	
    97 	<xsl:template match="h:a">
    98 		<xsl:text>'</xsl:text>
    99 		<xsl:apply-templates select="node()"/>
   100 		<xsl:text>' &lt;</xsl:text>
   101 		<xsl:choose>
   102 			<xsl:when test="matches(@href, '^(http:|https:|ftp:)')">
   103 				<xsl:value-of select="@href"/>
   104 			</xsl:when>
   105 			<xsl:when test="matches(@href, '^mailto:')">
   106 				<xsl:value-of select="substring-after(@href, 'mailto:')"/>
   107 			</xsl:when>
   108 			<xsl:otherwise>
   109 				<xsl:choose>
   110 					<xsl:when test="ends-with($urlBase, '/') or starts-with(@href, '/')">
   111 						<xsl:value-of select="concat($urlBase, @href)"/>
   112 					</xsl:when>
   113 					<xsl:otherwise>
   114 						<xsl:value-of select="concat($urlBase, '/', @href)"/>
   115 					</xsl:otherwise>
   116 				</xsl:choose>
   117 			</xsl:otherwise>
   118 		</xsl:choose>	
   119 		<xsl:text>&gt;</xsl:text>
   120 		<xsl:if test="@title and not(matches(@title, '^\s*$'))">
   121 			<xsl:text> (</xsl:text>
   122 			<xsl:value-of select="@title"/>
   123 			<xsl:text>)</xsl:text>
   124 		</xsl:if>
   125 	</xsl:template>
   126 	
   127 	
   128 	<xsl:template match="h:img">
   129 		<xsl:variable name="obrázek">
   130 			<h:a href="{@src}" title="{@title}">Obrázek: <xsl:value-of select="@alt"/></h:a>
   131 		</xsl:variable>
   132 		<xsl:apply-templates select="$obrázek/node()"/>
   133 	</xsl:template>
   134 	
   135 	
   136 	<xsl:template match="h:strong|h:b">
   137 		<xsl:text>**</xsl:text>
   138 		<xsl:apply-templates/>
   139 		<xsl:text>**</xsl:text>
   140 	</xsl:template>
   141 	
   142 	
   143 	<xsl:template match="h:em|h:i">
   144 		<xsl:text>*</xsl:text>
   145 		<xsl:apply-templates/>
   146 		<xsl:text>*</xsl:text>
   147 	</xsl:template>
   148 	
   149 	
   150 	<xsl:template match="h:abbr[@title]">
   151 		<xsl:apply-templates/>
   152 		<xsl:text> (</xsl:text>
   153 		<xsl:value-of select="@title"/>
   154 		<xsl:text>)</xsl:text>
   155 	</xsl:template>
   156 	
   157 	
   158 	<xsl:template match="h:pre">
   159 		<xsl:text>--------------------------------</xsl:text>
   160 		<xsl:text>&#10;</xsl:text>
   161 		<xsl:apply-templates/>
   162 		<xsl:text>&#10;</xsl:text>
   163 		<xsl:text>--------------------------------</xsl:text>
   164 		<xsl:text>&#10;</xsl:text>
   165 		<xsl:text>&#10;</xsl:text>
   166 	</xsl:template>
   167 	
   168 	
   169 	<xsl:template match="h:code">
   170 		<xsl:text>`</xsl:text>
   171 		<xsl:apply-templates/>
   172 		<xsl:text>`</xsl:text>
   173 	</xsl:template>
   174 	
   175 	
   176 	<xsl:template match="h:hr">
   177 		<xsl:text>----------------------------------------------------------------</xsl:text>
   178 		<xsl:text>&#10;</xsl:text>
   179 		<xsl:text>&#10;</xsl:text>
   180 	</xsl:template>
   181 	
   182 	
   183 	<xsl:template match="h:ol|h:ul">
   184 		<xsl:variable name="úroveň" select="count(ancestor::h:li)"/>
   185 		<xsl:variable name="odsazení">
   186 			<!-- položky na nejvyšší úrovni odsazené jednou mezerou -->
   187 			<xsl:value-of select="' '"/>
   188 			<xsl:for-each select="2 to $úroveň+1">
   189 				<!-- položky na druhé a vyšší úrovni odsazené vždy dvěma dalšími mezerami -->
   190 				<xsl:value-of select="'  '"/>
   191 			</xsl:for-each>
   192 		</xsl:variable>
   193 		
   194 		<xsl:if test="$úroveň gt 0">
   195 			<xsl:text>&#10;</xsl:text>
   196 		</xsl:if>
   197 		
   198 		<xsl:for-each select="h:li">
   199 			<xsl:if test="parent::h:ol"><xsl:value-of select="concat($odsazení, position(), ') ')"/></xsl:if>
   200 			<xsl:if test="parent::h:ul"><xsl:value-of select="concat($odsazení, '- ')"/></xsl:if>
   201 			<xsl:apply-templates/>
   202 			<xsl:if test="$úroveň = 0 or not(position() = last())">
   203 				<xsl:text>&#10;</xsl:text>
   204 			</xsl:if>
   205 		</xsl:for-each>		
   206 		
   207 		<xsl:if test="$úroveň = 0">
   208 			<xsl:text>&#10;</xsl:text>
   209 		</xsl:if>
   210 	</xsl:template>
   211 	
   212 	
   213 	<xsl:template match="text()[not(parent::h:pre)]">
   214 		<xsl:if test="matches(., '^\s') and preceding-sibling::node()">
   215 			<xsl:text> </xsl:text>
   216 		</xsl:if>
   217 		<xsl:value-of select="normalize-space(.)"/>
   218 		<xsl:if test="matches(., '\s$') and following-sibling::node()">
   219 			<xsl:text> </xsl:text>
   220 		</xsl:if>
   221 	</xsl:template>
   222 
   223 	
   224 	<xsl:template match="h:div[@class='wwwLinks']">
   225 		<!-- 
   226 			Dvě pomlčky a mezeru budou e-maliloví klienti považovat za začátek podpisu
   227 			a zobrazí ho šedivým písmem a nebudou ho citovat v odpovědích.
   228 		-->
   229 		<xsl:text>-- </xsl:text>
   230 		<xsl:text>&#10;</xsl:text>
   231 		<xsl:apply-templates/>	
   232 	</xsl:template>	
   233 
   234 
   235 </xsl:stylesheet>