# HG changeset patch
# User František Kučera <franta-hg@frantovo.cz>
# Date 1318607435 -7200
# Node ID 1f9e5757caf4eea300fe86d68418071e130637ca
# Parent  245311d1072632b0100431b00d630bc70f358ed3
Drupal: XSLT odstavce – [not(navázat)] TODO:…

diff -r 245311d10726 -r 1f9e5757caf4 helpers/mimeXhtmlPart.xsl
--- a/helpers/mimeXhtmlPart.xsl	Fri Oct 14 15:36:54 2011 +0200
+++ b/helpers/mimeXhtmlPart.xsl	Fri Oct 14 17:50:35 2011 +0200
@@ -72,6 +72,7 @@
 					/** TODO: smazat */
 					.mešuge {
 						background-color: #afa;
+						border: 1px solid #5f5;
 					}
 				</style>
 			</head>
@@ -148,12 +149,12 @@
 		</xsl:choose>		
     </xsl:template>
     
-    
     <!-- 
     	Z neuzavřeného (nevalidně se vyskytujícího v body) textu uděláme odstavce.
     -->
 	<xsl:template name="zpracujTělo">
 		<xsl:param name="prvek"/>
+		<xsl:param name="vnořeno" select="false()"/>
 		<xsl:if test="$prvek">
 			<xsl:choose>
 				<xsl:when test="$prvek/self::text()">
@@ -163,7 +164,18 @@
 					-->
 					<xsl:call-template name="dělejOdstavceX">
 						<xsl:with-param name="blokTextu" select="$prvek"/>
+						<xsl:with-param name="vnořeno" select="$vnořeno"/>
 					</xsl:call-template>
+					<!-- TODO: někdy zpracujTělo dalšího prvku -->
+					
+					<xsl:variable name="navázat" as="xs:boolean">
+						<xsl:call-template name="navázat">
+							<xsl:with-param name="blokTextu" select="$prvek"/>
+						</xsl:call-template>
+					</xsl:variable>
+					
+					<xsl:if test="not($navázat)">[not(navázat)]</xsl:if>
+					
 				</xsl:when>
 				<xsl:otherwise>
 					<!--
@@ -173,47 +185,73 @@
 					<xsl:apply-templates select="$prvek"/>
 					<xsl:call-template name="zpracujTělo">
 						<xsl:with-param name="prvek" select="$prvek/following-sibling::node()[1]"/>
+						<xsl:with-param name="vnořeno" select="$vnořeno"/>
 					</xsl:call-template>
 				</xsl:otherwise>					
 			</xsl:choose>				
 		</xsl:if>
 	</xsl:template>
 	
+	<xsl:variable name="oddělovač" select="'\n\s+\n\s+'"/>
+	
+	<xsl:template name="navázat" as="xs:boolean">
+		<xsl:param name="blokTextu"/>
+		<xsl:variable name="dalšíUzel" select="$blokTextu/following-sibling::node()[1]"/>
+		<xsl:sequence select="
+			not(fn:matches($blokTextu, concat('.*', $oddělovač ,'$'))) and
+			$dalšíUzel and
+			not(
+				$dalšíUzel/name() = 'p' or
+				$dalšíUzel/name() = 'div' or								
+				$dalšíUzel/name() = 'h1' or								
+				$dalšíUzel/name() = 'h2' or								
+				$dalšíUzel/name() = 'h3' or								
+				$dalšíUzel/name() = 'h4' or								
+				$dalšíUzel/name() = 'h5' or								
+				$dalšíUzel/name() = 'h6' or								
+				$dalšíUzel/name() = 'pre' or								
+				$dalšíUzel/name() = 'table' or								
+				$dalšíUzel/name() = 'blockquote' or								
+				$dalšíUzel/name() = 'hr'								
+			)
+		"/>
+	</xsl:template>
+	
 	<xsl:template name="dělejOdstavceX">
 		<xsl:param name="blokTextu"/>
-		<xsl:variable name="oddělovač" select="'\n\s+\n\s+'"/>
+		<xsl:param name="vnořeno" select="false()"/>
+		
 		<xsl:variable name="dalšíUzel" select="$blokTextu/following-sibling::node()[1]"/>
 		
-		<xsl:variable name="navázat" select="
-				not(fn:matches($blokTextu, concat('.*', $oddělovač ,'$'))) and
-				$dalšíUzel and
-				not(
-					$dalšíUzel/name() = 'p' or
-					$dalšíUzel/name() = 'div' or								
-					$dalšíUzel/name() = 'h1' or								
-					$dalšíUzel/name() = 'h2' or								
-					$dalšíUzel/name() = 'h3' or								
-					$dalšíUzel/name() = 'h4' or								
-					$dalšíUzel/name() = 'h5' or								
-					$dalšíUzel/name() = 'h6' or								
-					$dalšíUzel/name() = 'pre' or								
-					$dalšíUzel/name() = 'table' or								
-					$dalšíUzel/name() = 'blockquote' or								
-					$dalšíUzel/name() = 'hr'								
-				)
-				"/>
+		<xsl:variable name="navázat" as="xs:boolean">
+			<xsl:call-template name="navázat">
+				<xsl:with-param name="blokTextu" select="$blokTextu"/>
+			</xsl:call-template>
+		</xsl:variable>
 		
 		<xsl:for-each select="fn:tokenize($blokTextu, $oddělovač)">
 			<xsl:if test="normalize-space(.)">
-				<p class="mešuge">
-					<xsl:value-of select="."/>
-					<xsl:if test="$navázat and position() = last()">
-						<xsl:apply-templates select="$dalšíUzel"/>
-					</xsl:if>
-					<xsl:call-template name="zpracujTělo">
-						<xsl:with-param name="prvek" select="$dalšíUzel/following-sibling::node()[1]"/>
-					</xsl:call-template>
-				</p>
+				<xsl:choose>
+					<xsl:when test="$vnořeno">
+						<xsl:value-of select="."/>
+						<xsl:if test="$navázat and position() = last()">
+							<xsl:call-template name="zpracujTělo">
+								<xsl:with-param name="prvek" select="$dalšíUzel"/>
+							</xsl:call-template>
+						</xsl:if>
+					</xsl:when>
+					<xsl:otherwise>
+						<p class="mešuge">
+							<xsl:value-of select="."/>
+							<xsl:if test="$navázat and position() = last()">
+								<xsl:call-template name="zpracujTělo">
+									<xsl:with-param name="prvek" select="$dalšíUzel"/>
+									<xsl:with-param name="vnořeno" select="true()"/>
+								</xsl:call-template>
+							</xsl:if>
+						</p>
+					</xsl:otherwise>
+				</xsl:choose>
 			</xsl:if>
 		</xsl:for-each>