Drupal: XSLT odstavce – vnořující se.
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 - <
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 - >
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>