Drupal: XSLT odstavce – vnořující se.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 14 Oct 2011 15:36:54 +0200
changeset 79245311d10726
parent 78 969f001a0f5f
child 80 1f9e5757caf4
Drupal: XSLT odstavce – vnořující se.
helpers/mimeXhtmlPart.xsl
     1.1 --- a/helpers/mimeXhtmlPart.xsl	Fri Oct 14 13:32:34 2011 +0200
     1.2 +++ b/helpers/mimeXhtmlPart.xsl	Fri Oct 14 15:36:54 2011 +0200
     1.3 @@ -155,40 +155,80 @@
     1.4  	<xsl:template name="zpracujTělo">
     1.5  		<xsl:param name="prvek"/>
     1.6  		<xsl:if test="$prvek">
     1.7 -			<li>
     1.8 -				&lt;
     1.9 -				<xsl:choose>
    1.10 -					<xsl:when test="$prvek/self::text()">
    1.11 -						<!--
    1.12 -							Textový uzel → budeme dělat odstavce
    1.13 -							(rekurzivně se opět zavolá šablona zpracujTělo)
    1.14 -						<xsl:call-template name="dělejOdstavce">
    1.15 -							<xsl:with-param name="blokTextu" select="."/>
    1.16 -						</xsl:call-template>
    1.17 -						-->
    1.18 -						[T]
    1.19 -					</xsl:when>
    1.20 -					<xsl:otherwise>
    1.21 -						<!--
    1.22 -							Jiný uzel → aplikujeme obecné šablony
    1.23 -							a zpracujeme následující uzel.
    1.24 -						<xsl:apply-templates select="."/>
    1.25 -						-->
    1.26 -						[N]
    1.27 -					</xsl:otherwise>					
    1.28 -				</xsl:choose>
    1.29 -				[<xsl:value-of select="$prvek/name()"/>]
    1.30 -				[<xsl:value-of select="$prvek/text()"/>]
    1.31 -				[<xsl:value-of select="$prvek/self::text()"/>]
    1.32 -				&gt;
    1.33 -			</li>	
    1.34 -			<xsl:call-template name="zpracujTělo">
    1.35 -					<xsl:with-param name="prvek" select="$prvek/following-sibling::node()[1]"/>
    1.36 -			</xsl:call-template>
    1.37 -				
    1.38 +			<xsl:choose>
    1.39 +				<xsl:when test="$prvek/self::text()">
    1.40 +					<!--
    1.41 +						Textový uzel → budeme dělat odstavce
    1.42 +						(rekurzivně se opět zavolá šablona zpracujTělo)
    1.43 +					-->
    1.44 +					<xsl:call-template name="dělejOdstavceX">
    1.45 +						<xsl:with-param name="blokTextu" select="$prvek"/>
    1.46 +					</xsl:call-template>
    1.47 +				</xsl:when>
    1.48 +				<xsl:otherwise>
    1.49 +					<!--
    1.50 +						Jiný uzel → aplikujeme obecné šablony
    1.51 +						a zpracujeme následující uzel.
    1.52 +					-->
    1.53 +					<xsl:apply-templates select="$prvek"/>
    1.54 +					<xsl:call-template name="zpracujTělo">
    1.55 +						<xsl:with-param name="prvek" select="$prvek/following-sibling::node()[1]"/>
    1.56 +					</xsl:call-template>
    1.57 +				</xsl:otherwise>					
    1.58 +			</xsl:choose>				
    1.59  		</xsl:if>
    1.60  	</xsl:template>
    1.61  	
    1.62 +	<xsl:template name="dělejOdstavceX">
    1.63 +		<xsl:param name="blokTextu"/>
    1.64 +		<xsl:variable name="oddělovač" select="'\n\s+\n\s+'"/>
    1.65 +		<xsl:variable name="dalšíUzel" select="$blokTextu/following-sibling::node()[1]"/>
    1.66 +		
    1.67 +		<xsl:variable name="navázat" select="
    1.68 +				not(fn:matches($blokTextu, concat('.*', $oddělovač ,'$'))) and
    1.69 +				$dalšíUzel and
    1.70 +				not(
    1.71 +					$dalšíUzel/name() = 'p' or
    1.72 +					$dalšíUzel/name() = 'div' or								
    1.73 +					$dalšíUzel/name() = 'h1' or								
    1.74 +					$dalšíUzel/name() = 'h2' or								
    1.75 +					$dalšíUzel/name() = 'h3' or								
    1.76 +					$dalšíUzel/name() = 'h4' or								
    1.77 +					$dalšíUzel/name() = 'h5' or								
    1.78 +					$dalšíUzel/name() = 'h6' or								
    1.79 +					$dalšíUzel/name() = 'pre' or								
    1.80 +					$dalšíUzel/name() = 'table' or								
    1.81 +					$dalšíUzel/name() = 'blockquote' or								
    1.82 +					$dalšíUzel/name() = 'hr'								
    1.83 +				)
    1.84 +				"/>
    1.85 +		
    1.86 +		<xsl:for-each select="fn:tokenize($blokTextu, $oddělovač)">
    1.87 +			<xsl:if test="normalize-space(.)">
    1.88 +				<p class="mešuge">
    1.89 +					<xsl:value-of select="."/>
    1.90 +					<xsl:if test="$navázat and position() = last()">
    1.91 +						<xsl:apply-templates select="$dalšíUzel"/>
    1.92 +					</xsl:if>
    1.93 +					<xsl:call-template name="zpracujTělo">
    1.94 +						<xsl:with-param name="prvek" select="$dalšíUzel/following-sibling::node()[1]"/>
    1.95 +					</xsl:call-template>
    1.96 +				</p>
    1.97 +			</xsl:if>
    1.98 +		</xsl:for-each>
    1.99 +		
   1.100 +		<xsl:if test="not($navázat)">
   1.101 +			<xsl:call-template name="zpracujTělo">
   1.102 +				<xsl:with-param name="prvek" select="$dalšíUzel"/>
   1.103 +			</xsl:call-template>
   1.104 +		</xsl:if>
   1.105 +	</xsl:template>
   1.106 +	
   1.107 +	
   1.108 +	
   1.109 +	
   1.110 +	
   1.111 +	
   1.112  	<xsl:template name="dělejOdstavce">
   1.113  		<xsl:param name="blokTextu"/>
   1.114  		<xsl:variable name="oddělovač" select="'\n\s+\n\s+'"/>
   1.115 @@ -206,8 +246,7 @@
   1.116  						position() = last() and
   1.117  						not(fn:matches($blokTextu, concat('.*', $oddělovač ,'$')))
   1.118  						">
   1.119 -						
   1.120 -						<xsl:variable name="n" select="$blokTextu/following-sibling::*[position() = 1]"/>
   1.121 +						<xsl:variable name="n" select="$blokTextu/following-sibling::*[1]"/>
   1.122  						<xsl:variable name="nn" select="$n/name()"/>
   1.123  						<!--
   1.124  							Za blokem textu nenásleduje značka, která nemůže být uvnitř odstavce.
   1.125 @@ -227,10 +266,14 @@
   1.126  								$nn = 'hr'								
   1.127  							)">
   1.128  							<xsl:apply-templates select="$n"/>
   1.129 -							<xsl:apply-templates select="$n/following-sibling::text()[position() = 1]"/>
   1.130 -						</xsl:if>						
   1.131 +						</xsl:if>
   1.132 +						
   1.133 +						<xsl:call-template name="zpracujTělo">
   1.134 +							<xsl:with-param name="prvek" select="$blokTextu/following-sibling::node()[1]"/>
   1.135 +						</xsl:call-template>
   1.136 +				
   1.137  					</xsl:if>
   1.138 -				</p>
   1.139 +				</p>				
   1.140  			</xsl:if>
   1.141  		</xsl:for-each>
   1.142  	</xsl:template>