# 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>