mezery, tabulátory
authorFrantišek Kučera <franta-hg@frantovo.cz>
Thu, 05 Jul 2012 13:19:19 +0200
changeset 119f5b57e221e38
parent 118 ba7ea56fd672
child 120 bb1c8a7b774c
mezery, tabulátory
helpers/mimeXhtmlPart-make-paragraphs.xsl
     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>