1.1 --- a/helpers/mimeXhtmlPart-make-paragraphs.xsl Mon Nov 07 17:47:10 2011 +0100
1.2 +++ b/helpers/mimeXhtmlPart-make-paragraphs.xsl Thu Jul 05 13:19:19 2012 +0200
1.3 @@ -29,35 +29,35 @@
1.4 </body>
1.5 </html>
1.6 </xsl:template>
1.7 -
1.8 -
1.9 +
1.10 +
1.11 <!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: -->
1.12 <xsl:template match="*" mode="kopíruj">
1.13 <xsl:element name="{name()}">
1.14 <xsl:copy-of select="@*"/>
1.15 <xsl:apply-templates mode="kopíruj"/>
1.16 </xsl:element>
1.17 - </xsl:template>
1.18 -
1.19 -
1.20 - <!-- Mezi odstavci je prázdný řádek, můžou být mezery/tabulátory. -->
1.21 + </xsl:template>
1.22 +
1.23 +
1.24 + <!-- Mezi odstavci je prázdný řádek, můžou být mezery/tabulátory. -->
1.25 <xsl:variable name="oddělovač" select="'\n\s*\n\s*'"/>
1.26 -
1.27 -
1.28 +
1.29 +
1.30 <!-- Funkce: zda jde o XHTML inline element – může se vyskytovat uvnitř odstavců. -->
1.31 <xsl:template name="inlineElement" as="xs:boolean">
1.32 <xsl:param name="prvek"/>
1.33 <xsl:sequence select="
1.34 - $prvek/name() = 'a' or
1.35 - $prvek/name() = 'abbr' or
1.36 - $prvek/name() = 'acronym' or
1.37 - $prvek/name() = 'b' or
1.38 - $prvek/name() = 'br' or
1.39 - $prvek/name() = 'cite' or
1.40 - $prvek/name() = 'code' or
1.41 - $prvek/name() = 'em' or
1.42 - $prvek/name() = 'i' or
1.43 - $prvek/name() = 'img' or
1.44 + $prvek/name() = 'a' or
1.45 + $prvek/name() = 'abbr' or
1.46 + $prvek/name() = 'acronym' or
1.47 + $prvek/name() = 'b' or
1.48 + $prvek/name() = 'br' or
1.49 + $prvek/name() = 'cite' or
1.50 + $prvek/name() = 'code' or
1.51 + $prvek/name() = 'em' or
1.52 + $prvek/name() = 'i' or
1.53 + $prvek/name() = 'img' or
1.54 $prvek/name() = 'q' or
1.55 $prvek/name() = 'span' or
1.56 $prvek/name() = 'strong' or
1.57 @@ -69,27 +69,27 @@
1.58 "/>
1.59 <!-- …případně další, pokud je budeme chtít podporovat. -->
1.60 </xsl:template>
1.61 -
1.62 -
1.63 +
1.64 +
1.65 <!-- Funkce: zda je prvek začátkem odstavce. -->
1.66 <xsl:template name="začátekOdstavce" as="xs:boolean">
1.67 <xsl:param name="prvek"/>
1.68 -
1.69 +
1.70 <xsl:variable name="inlineElement" as="xs:boolean">
1.71 <xsl:call-template name="inlineElement"><xsl:with-param name="prvek" select="$prvek"/></xsl:call-template>
1.72 </xsl:variable>
1.73 -
1.74 +
1.75 <xsl:variable name="předchůdce" select="$prvek/preceding-sibling::node()[1]"/>
1.76 -
1.77 +
1.78 <xsl:variable name="inlineElementPředchůdce" as="xs:boolean">
1.79 <xsl:call-template name="inlineElement"><xsl:with-param name="prvek" select="$předchůdce"/></xsl:call-template>
1.80 </xsl:variable>
1.81 -
1.82 +
1.83 <xsl:variable name="textovýUzel" select="boolean($prvek/self::text())"/>
1.84 -
1.85 +
1.86 <xsl:sequence select="
1.87 - ($inlineElement or $textovýUzel)
1.88 - and
1.89 + ($inlineElement or $textovýUzel)
1.90 + and
1.91 (
1.92 ($inlineElementPředchůdce and matches($prvek, concat('^', $oddělovač, '.*')))
1.93 or
1.94 @@ -105,20 +105,20 @@
1.95 )
1.96 "/>
1.97 </xsl:template>
1.98 -
1.99 -
1.100 +
1.101 +
1.102 <!--
1.103 V prvním kole zavřeme volný text a inline elementy do značek <o:odstavec typ=""/>,
1.104 kde typ může být "začátek", což značí, že se jedná o první část budoucího odstavce <p/>.
1.105 -->
1.106 <xsl:template match="text()" mode="prvníKolo">
1.107 -
1.108 +
1.109 <xsl:variable name="začátekOdstavce" as="xs:boolean">
1.110 <xsl:call-template name="začátekOdstavce">
1.111 <xsl:with-param name="prvek" select="."/>
1.112 </xsl:call-template>
1.113 </xsl:variable>
1.114 -
1.115 +
1.116 <xsl:for-each select="fn:tokenize(., $oddělovač)">
1.117 <xsl:element name="o:odstavec">
1.118 <xsl:if test="$začátekOdstavce or not(position() = 1)">
1.119 @@ -127,21 +127,21 @@
1.120 <xsl:value-of select="."/>
1.121 </xsl:element>
1.122 </xsl:for-each>
1.123 -
1.124 +
1.125 </xsl:template>
1.126 -
1.127 - <!--
1.128 +
1.129 + <!--
1.130 Inline elementy zavíráme do <o:odstavec typ=""/>,
1.131 ostatní vkládáme, jak jsou.
1.132 -->
1.133 <xsl:template match="*" mode="prvníKolo">
1.134 -
1.135 +
1.136 <xsl:variable name="inlineElement" as="xs:boolean">
1.137 <xsl:call-template name="inlineElement">
1.138 <xsl:with-param name="prvek" select="."/>
1.139 </xsl:call-template>
1.140 </xsl:variable>
1.141 -
1.142 +
1.143 <xsl:choose>
1.144 <!-- TODO: zvláštní šablona (match="…") pro inline elementy místo větvení? -->
1.145 <xsl:when test="$inlineElement">
1.146 @@ -157,13 +157,13 @@
1.147 <xsl:copy-of select="."/>
1.148 </xsl:element>
1.149 </xsl:when>
1.150 - <xsl:otherwise>
1.151 + <xsl:otherwise>
1.152 <xsl:copy-of select="."/>
1.153 - </xsl:otherwise>
1.154 + </xsl:otherwise>
1.155 </xsl:choose>
1.156 -
1.157 +
1.158 </xsl:template>
1.159 -
1.160 +
1.161 <!-- V druhém kole spojíme jednotlivé části odstavců. -->
1.162 <xsl:template match="o:odstavec[@typ='začátek']" mode="druhéKolo">
1.163 <o:odstavec>
1.164 @@ -178,8 +178,8 @@
1.165 <xsl:template match="*" mode="druhéKolo">
1.166 <xsl:copy-of select="."/>
1.167 </xsl:template>
1.168 -
1.169 -
1.170 +
1.171 +
1.172 <!--
1.173 Za první část (parametr, <o:odstavec typ="začátek"/>) resp. její vnitřek
1.174 připojíme (rekurze) všechny další části téhož odstavce (oddělíme mezerou).
1.175 @@ -195,8 +195,8 @@
1.176 </xsl:call-template>
1.177 </xsl:if>
1.178 </xsl:template>
1.179 -
1.180 -
1.181 +
1.182 +
1.183 <!-- Ve třetím kole smažeme prázdné mešuge odstavce. -->
1.184 <xsl:template mode="třetíKolo" match="o:odstavec[
1.185 count(child::node()) = 0
1.186 @@ -209,7 +209,7 @@
1.187 matches(text(), '^\s*$')
1.188 )
1.189 ]">
1.190 - <xsl:text> </xsl:text>
1.191 + <xsl:text> </xsl:text>
1.192 </xsl:template>
1.193 <!-- Převedeme z <o:odstavec/> na <p/> -->
1.194 <xsl:template match="o:odstavec" mode="třetíKolo">
1.195 @@ -224,6 +224,6 @@
1.196 <xsl:template match="*" mode="třetíKolo">
1.197 <xsl:copy-of select="."/>
1.198 </xsl:template>
1.199 -
1.200 -
1.201 +
1.202 +
1.203 </xsl:stylesheet>