# HG changeset patch # User František Kučera <franta-hg@frantovo.cz> # Date 1341487159 -7200 # Node ID f5b57e221e388499c94d9a48c768ce4b60dc9867 # Parent ba7ea56fd672ae91c3427bb058fa79f99db9d772 mezery, tabulátory diff -r ba7ea56fd672 -r f5b57e221e38 helpers/mimeXhtmlPart-make-paragraphs.xsl --- a/helpers/mimeXhtmlPart-make-paragraphs.xsl Mon Nov 07 17:47:10 2011 +0100 +++ b/helpers/mimeXhtmlPart-make-paragraphs.xsl Thu Jul 05 13:19:19 2012 +0200 @@ -29,35 +29,35 @@ </body> </html> </xsl:template> - - + + <!-- Kopírujeme elementy, ale vynecháme nepoužité xmlns deklarace: --> <xsl:template match="*" mode="kopíruj"> <xsl:element name="{name()}"> <xsl:copy-of select="@*"/> <xsl:apply-templates mode="kopíruj"/> </xsl:element> - </xsl:template> - - - <!-- Mezi odstavci je prázdný řádek, můžou být mezery/tabulátory. --> + </xsl:template> + + + <!-- Mezi odstavci je prázdný řádek, můžou být mezery/tabulátory. --> <xsl:variable name="oddělovač" select="'\n\s*\n\s*'"/> - - + + <!-- Funkce: zda jde o XHTML inline element – může se vyskytovat uvnitř odstavců. --> <xsl:template name="inlineElement" as="xs:boolean"> <xsl:param name="prvek"/> <xsl:sequence select=" - $prvek/name() = 'a' or - $prvek/name() = 'abbr' or - $prvek/name() = 'acronym' or - $prvek/name() = 'b' or - $prvek/name() = 'br' or - $prvek/name() = 'cite' or - $prvek/name() = 'code' or - $prvek/name() = 'em' or - $prvek/name() = 'i' or - $prvek/name() = 'img' or + $prvek/name() = 'a' or + $prvek/name() = 'abbr' or + $prvek/name() = 'acronym' or + $prvek/name() = 'b' or + $prvek/name() = 'br' or + $prvek/name() = 'cite' or + $prvek/name() = 'code' or + $prvek/name() = 'em' or + $prvek/name() = 'i' or + $prvek/name() = 'img' or $prvek/name() = 'q' or $prvek/name() = 'span' or $prvek/name() = 'strong' or @@ -69,27 +69,27 @@ "/> <!-- …případně další, pokud je budeme chtít podporovat. --> </xsl:template> - - + + <!-- Funkce: zda je prvek začátkem odstavce. --> <xsl:template name="začátekOdstavce" as="xs:boolean"> <xsl:param name="prvek"/> - + <xsl:variable name="inlineElement" as="xs:boolean"> <xsl:call-template name="inlineElement"><xsl:with-param name="prvek" select="$prvek"/></xsl:call-template> </xsl:variable> - + <xsl:variable name="předchůdce" select="$prvek/preceding-sibling::node()[1]"/> - + <xsl:variable name="inlineElementPředchůdce" as="xs:boolean"> <xsl:call-template name="inlineElement"><xsl:with-param name="prvek" select="$předchůdce"/></xsl:call-template> </xsl:variable> - + <xsl:variable name="textovýUzel" select="boolean($prvek/self::text())"/> - + <xsl:sequence select=" - ($inlineElement or $textovýUzel) - and + ($inlineElement or $textovýUzel) + and ( ($inlineElementPředchůdce and matches($prvek, concat('^', $oddělovač, '.*'))) or @@ -105,20 +105,20 @@ ) "/> </xsl:template> - - + + <!-- V prvním kole zavřeme volný text a inline elementy do značek <o:odstavec typ=""/>, kde typ může být "začátek", což značí, že se jedná o první část budoucího odstavce <p/>. --> <xsl:template match="text()" mode="prvníKolo"> - + <xsl:variable name="začátekOdstavce" as="xs:boolean"> <xsl:call-template name="začátekOdstavce"> <xsl:with-param name="prvek" select="."/> </xsl:call-template> </xsl:variable> - + <xsl:for-each select="fn:tokenize(., $oddělovač)"> <xsl:element name="o:odstavec"> <xsl:if test="$začátekOdstavce or not(position() = 1)"> @@ -127,21 +127,21 @@ <xsl:value-of select="."/> </xsl:element> </xsl:for-each> - + </xsl:template> - - <!-- + + <!-- Inline elementy zavíráme do <o:odstavec typ=""/>, ostatní vkládáme, jak jsou. --> <xsl:template match="*" mode="prvníKolo"> - + <xsl:variable name="inlineElement" as="xs:boolean"> <xsl:call-template name="inlineElement"> <xsl:with-param name="prvek" select="."/> </xsl:call-template> </xsl:variable> - + <xsl:choose> <!-- TODO: zvláštní šablona (match="…") pro inline elementy místo větvení? --> <xsl:when test="$inlineElement"> @@ -157,13 +157,13 @@ <xsl:copy-of select="."/> </xsl:element> </xsl:when> - <xsl:otherwise> + <xsl:otherwise> <xsl:copy-of select="."/> - </xsl:otherwise> + </xsl:otherwise> </xsl:choose> - + </xsl:template> - + <!-- V druhém kole spojíme jednotlivé části odstavců. --> <xsl:template match="o:odstavec[@typ='začátek']" mode="druhéKolo"> <o:odstavec> @@ -178,8 +178,8 @@ <xsl:template match="*" mode="druhéKolo"> <xsl:copy-of select="."/> </xsl:template> - - + + <!-- Za první část (parametr, <o:odstavec typ="začátek"/>) resp. její vnitřek připojíme (rekurze) všechny další části téhož odstavce (oddělíme mezerou). @@ -195,8 +195,8 @@ </xsl:call-template> </xsl:if> </xsl:template> - - + + <!-- Ve třetím kole smažeme prázdné mešuge odstavce. --> <xsl:template mode="třetíKolo" match="o:odstavec[ count(child::node()) = 0 @@ -209,7 +209,7 @@ matches(text(), '^\s*$') ) ]"> - <xsl:text> </xsl:text> + <xsl:text> </xsl:text> </xsl:template> <!-- Převedeme z <o:odstavec/> na <p/> --> <xsl:template match="o:odstavec" mode="třetíKolo"> @@ -224,6 +224,6 @@ <xsl:template match="*" mode="třetíKolo"> <xsl:copy-of select="."/> </xsl:template> - - + + </xsl:stylesheet>