Drupal: XSLT odstavce – [not(navázat)] TODO:…
authorFrantišek Kučera <franta-hg@frantovo.cz>
Fri, 14 Oct 2011 17:50:35 +0200
changeset 801f9e5757caf4
parent 79 245311d10726
child 81 b51ab80c7a9d
Drupal: XSLT odstavce – [not(navázat)] TODO:…
helpers/mimeXhtmlPart.xsl
     1.1 --- a/helpers/mimeXhtmlPart.xsl	Fri Oct 14 15:36:54 2011 +0200
     1.2 +++ b/helpers/mimeXhtmlPart.xsl	Fri Oct 14 17:50:35 2011 +0200
     1.3 @@ -72,6 +72,7 @@
     1.4  					/** TODO: smazat */
     1.5  					.mešuge {
     1.6  						background-color: #afa;
     1.7 +						border: 1px solid #5f5;
     1.8  					}
     1.9  				</style>
    1.10  			</head>
    1.11 @@ -148,12 +149,12 @@
    1.12  		</xsl:choose>		
    1.13      </xsl:template>
    1.14      
    1.15 -    
    1.16      <!-- 
    1.17      	Z neuzavřeného (nevalidně se vyskytujícího v body) textu uděláme odstavce.
    1.18      -->
    1.19  	<xsl:template name="zpracujTělo">
    1.20  		<xsl:param name="prvek"/>
    1.21 +		<xsl:param name="vnořeno" select="false()"/>
    1.22  		<xsl:if test="$prvek">
    1.23  			<xsl:choose>
    1.24  				<xsl:when test="$prvek/self::text()">
    1.25 @@ -163,7 +164,18 @@
    1.26  					-->
    1.27  					<xsl:call-template name="dělejOdstavceX">
    1.28  						<xsl:with-param name="blokTextu" select="$prvek"/>
    1.29 +						<xsl:with-param name="vnořeno" select="$vnořeno"/>
    1.30  					</xsl:call-template>
    1.31 +					<!-- TODO: někdy zpracujTělo dalšího prvku -->
    1.32 +					
    1.33 +					<xsl:variable name="navázat" as="xs:boolean">
    1.34 +						<xsl:call-template name="navázat">
    1.35 +							<xsl:with-param name="blokTextu" select="$prvek"/>
    1.36 +						</xsl:call-template>
    1.37 +					</xsl:variable>
    1.38 +					
    1.39 +					<xsl:if test="not($navázat)">[not(navázat)]</xsl:if>
    1.40 +					
    1.41  				</xsl:when>
    1.42  				<xsl:otherwise>
    1.43  					<!--
    1.44 @@ -173,47 +185,73 @@
    1.45  					<xsl:apply-templates select="$prvek"/>
    1.46  					<xsl:call-template name="zpracujTělo">
    1.47  						<xsl:with-param name="prvek" select="$prvek/following-sibling::node()[1]"/>
    1.48 +						<xsl:with-param name="vnořeno" select="$vnořeno"/>
    1.49  					</xsl:call-template>
    1.50  				</xsl:otherwise>					
    1.51  			</xsl:choose>				
    1.52  		</xsl:if>
    1.53  	</xsl:template>
    1.54  	
    1.55 +	<xsl:variable name="oddělovač" select="'\n\s+\n\s+'"/>
    1.56 +	
    1.57 +	<xsl:template name="navázat" as="xs:boolean">
    1.58 +		<xsl:param name="blokTextu"/>
    1.59 +		<xsl:variable name="dalšíUzel" select="$blokTextu/following-sibling::node()[1]"/>
    1.60 +		<xsl:sequence select="
    1.61 +			not(fn:matches($blokTextu, concat('.*', $oddělovač ,'$'))) and
    1.62 +			$dalšíUzel and
    1.63 +			not(
    1.64 +				$dalšíUzel/name() = 'p' or
    1.65 +				$dalšíUzel/name() = 'div' or								
    1.66 +				$dalšíUzel/name() = 'h1' or								
    1.67 +				$dalšíUzel/name() = 'h2' or								
    1.68 +				$dalšíUzel/name() = 'h3' or								
    1.69 +				$dalšíUzel/name() = 'h4' or								
    1.70 +				$dalšíUzel/name() = 'h5' or								
    1.71 +				$dalšíUzel/name() = 'h6' or								
    1.72 +				$dalšíUzel/name() = 'pre' or								
    1.73 +				$dalšíUzel/name() = 'table' or								
    1.74 +				$dalšíUzel/name() = 'blockquote' or								
    1.75 +				$dalšíUzel/name() = 'hr'								
    1.76 +			)
    1.77 +		"/>
    1.78 +	</xsl:template>
    1.79 +	
    1.80  	<xsl:template name="dělejOdstavceX">
    1.81  		<xsl:param name="blokTextu"/>
    1.82 -		<xsl:variable name="oddělovač" select="'\n\s+\n\s+'"/>
    1.83 +		<xsl:param name="vnořeno" select="false()"/>
    1.84 +		
    1.85  		<xsl:variable name="dalšíUzel" select="$blokTextu/following-sibling::node()[1]"/>
    1.86  		
    1.87 -		<xsl:variable name="navázat" select="
    1.88 -				not(fn:matches($blokTextu, concat('.*', $oddělovač ,'$'))) and
    1.89 -				$dalšíUzel and
    1.90 -				not(
    1.91 -					$dalšíUzel/name() = 'p' or
    1.92 -					$dalšíUzel/name() = 'div' or								
    1.93 -					$dalšíUzel/name() = 'h1' or								
    1.94 -					$dalšíUzel/name() = 'h2' or								
    1.95 -					$dalšíUzel/name() = 'h3' or								
    1.96 -					$dalšíUzel/name() = 'h4' or								
    1.97 -					$dalšíUzel/name() = 'h5' or								
    1.98 -					$dalšíUzel/name() = 'h6' or								
    1.99 -					$dalšíUzel/name() = 'pre' or								
   1.100 -					$dalšíUzel/name() = 'table' or								
   1.101 -					$dalšíUzel/name() = 'blockquote' or								
   1.102 -					$dalšíUzel/name() = 'hr'								
   1.103 -				)
   1.104 -				"/>
   1.105 +		<xsl:variable name="navázat" as="xs:boolean">
   1.106 +			<xsl:call-template name="navázat">
   1.107 +				<xsl:with-param name="blokTextu" select="$blokTextu"/>
   1.108 +			</xsl:call-template>
   1.109 +		</xsl:variable>
   1.110  		
   1.111  		<xsl:for-each select="fn:tokenize($blokTextu, $oddělovač)">
   1.112  			<xsl:if test="normalize-space(.)">
   1.113 -				<p class="mešuge">
   1.114 -					<xsl:value-of select="."/>
   1.115 -					<xsl:if test="$navázat and position() = last()">
   1.116 -						<xsl:apply-templates select="$dalšíUzel"/>
   1.117 -					</xsl:if>
   1.118 -					<xsl:call-template name="zpracujTělo">
   1.119 -						<xsl:with-param name="prvek" select="$dalšíUzel/following-sibling::node()[1]"/>
   1.120 -					</xsl:call-template>
   1.121 -				</p>
   1.122 +				<xsl:choose>
   1.123 +					<xsl:when test="$vnořeno">
   1.124 +						<xsl:value-of select="."/>
   1.125 +						<xsl:if test="$navázat and position() = last()">
   1.126 +							<xsl:call-template name="zpracujTělo">
   1.127 +								<xsl:with-param name="prvek" select="$dalšíUzel"/>
   1.128 +							</xsl:call-template>
   1.129 +						</xsl:if>
   1.130 +					</xsl:when>
   1.131 +					<xsl:otherwise>
   1.132 +						<p class="mešuge">
   1.133 +							<xsl:value-of select="."/>
   1.134 +							<xsl:if test="$navázat and position() = last()">
   1.135 +								<xsl:call-template name="zpracujTělo">
   1.136 +									<xsl:with-param name="prvek" select="$dalšíUzel"/>
   1.137 +									<xsl:with-param name="vnořeno" select="true()"/>
   1.138 +								</xsl:call-template>
   1.139 +							</xsl:if>
   1.140 +						</p>
   1.141 +					</xsl:otherwise>
   1.142 +				</xsl:choose>
   1.143  			</xsl:if>
   1.144  		</xsl:for-each>
   1.145