This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: substring manipulation to wrap text in an SVG <rect>
- To: xsl-list at lists dot mulberrytech dot com
- Subject: RE: [xsl] substring manipulation to wrap text in an SVG <rect>
- From: timw at 3d3 dot com
- Date: Tue, 18 Sep 2001 09:48:04 +1000
- Reply-To: xsl-list at lists dot mulberrytech dot com
Joerg,
Have you considered adding it to the XSLT Cookbook, or one of the other
projects which store XSLT resources?
(http://aspn.activestate.com/ASPN/Cookbook/XSLT/)
Tim Watts
> -----Original Message-----
> From: Jörg Heinicke [mailto:joerg.heinicke@gmx.de]
> Sent: Tuesday, 18 September 2001 7:36 AM
> To: xsl-list@lists.mulberrytech.com
> Subject: Re: [xsl] substring manipulation to wrap text in an
> SVG <rect>
>
>
> I wrote a stylesheet for text-wrapping a few weeks ago. It
> must be adapted a
> liitle bit, but it could be a help I think. Important is the
> template named
> "word-wrap".
>
> This is a stylesheet for transforming a Docbook-glossary to a
> text-file.
> Also there is a indenting implemented. So it's maybe
> interesting for other
> people too. For the SVG-text you can simplify it.
>
> Regards,
>
> Joerg
>
>
> <?xml version="1.0"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="1.0">
> <xsl:output method="text"/>
>
> <xsl:template match="chapter">
> <xsl:apply-templates select="glossary"/>
> </xsl:template>
>
> <xsl:template match="glossary">
>
> <xsl:text>####################################################
> ##############
> ##############
> </xsl:text>
> <xsl:apply-templates select="title"/>
> <xsl:text>
> ##############################################################
> ##############
> ####
>
> </xsl:text>
> <xsl:apply-templates select="glossdiv|glosslist|glossentry"/>
> </xsl:template>
>
> <xsl:template match="glossdiv">
>
> <xsl:text>====================================================
> ==============
> ==============
> </xsl:text>
> <xsl:apply-templates select="title"/>
> <xsl:text>
> </xsl:text>
> <xsl:apply-templates select="para"/>
>
> <xsl:text>====================================================
> ==============
> ==============
>
> </xsl:text>
> <xsl:apply-templates select="glosslist|glossentry"/>
> </xsl:template>
>
> <xsl:template match="glosslist">
> <xsl:apply-templates select="glossentry"/>
> </xsl:template>
>
> <xsl:template match="glossentry">
> <xsl:apply-templates select="glossterm|glossdef"/>
> </xsl:template>
>
> <xsl:template match="glossterm">
> <xsl:for-each select="ancestor::*[not(name()='chapter' or
> name()='glossary')]">
> <xsl:text> </xsl:text>
> </xsl:for-each>
> <xsl:value-of select="normalize-space(.)"/>
> <xsl:text>
> </xsl:text>
> </xsl:template>
>
> <xsl:template match="glossdef">
> <xsl:apply-templates select="para|glosslist"/>
> </xsl:template>
>
> <xsl:template match="title">
> <xsl:value-of select="normalize-space(.)"/>
> </xsl:template>
>
> <xsl:template match="para">
> <xsl:call-template name="word-wrap">
> <xsl:with-param name="indent">
> <xsl:for-each
> select="ancestor::*[not(name()='chapter' or
> name()='glossary')]">
> <xsl:text> </xsl:text>
> </xsl:for-each>
> </xsl:with-param>
> <xsl:with-param name="tobewrapped"
> select="normalize-space(.)"/>
> </xsl:call-template>
> <xsl:text>
>
> </xsl:text>
> </xsl:template>
>
> <xsl:template match="*">
> <xsl:value-of select="text()"/>
> </xsl:template>
>
> <xsl:template name="word-wrap">
> <xsl:param name="tobewrapped"/>
> <xsl:param name="size" select="0"/>
> <xsl:param name="indent"/>
> <xsl:variable name="maxlength" select="80"/>
> <xsl:choose>
> <xsl:when test="contains($tobewrapped,' ')">
> <xsl:variable name="word"
> select="substring-before($tobewrapped,' ')"/>
> <xsl:variable name="length"
> select="string-length($word)"/>
> <xsl:choose>
> <xsl:when test="$size=0">
> <xsl:value-of select="$indent"/>
> <xsl:value-of select="$word"/>
> <xsl:call-template name="word-wrap">
> <xsl:with-param name="tobewrapped"
> select="substring-after($tobewrapped,' ')"/>
> <xsl:with-param name="size"
> select="string-length(concat($indent,$word))"/>
> <xsl:with-param name="indent"
> select="$indent"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:otherwise>
> <xsl:choose>
> <xsl:when test="($size + $length + 1) >
> $maxlength">
> <xsl:text>
> </xsl:text>
> <xsl:value-of select="$indent"/>
> <xsl:value-of select="$word"/>
> <xsl:call-template name="word-wrap">
> <xsl:with-param name="tobewrapped"
> select="substring-after($tobewrapped,' ')"/>
> <xsl:with-param name="size"
> select="string-length(concat($indent,$word))"/>
> <xsl:with-param name="indent"
> select="$indent"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:otherwise>
> <xsl:value-of
> select="concat(' ',$word)"/>
> <xsl:call-template name="word-wrap">
> <xsl:with-param name="tobewrapped"
> select="substring-after($tobewrapped,' ')"/>
> <xsl:with-param name="size"
> select="$size + 1 + string-length($word)"/>
> <xsl:with-param name="indent"
> select="$indent"/>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:when>
> <xsl:otherwise>
> <xsl:choose>
> <xsl:when test="$size=0">
> <xsl:value-of select="$indent"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:choose>
> <xsl:when test="$size +
> string-length($tobewrapped) > $maxlength">
> <xsl:text>
> </xsl:text>
> <xsl:value-of select="$indent"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:text> </xsl:text>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:otherwise>
> </xsl:choose>
> <xsl:value-of select="$tobewrapped"/>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
> </xsl:stylesheet>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list