Subject: Re: [xsl] Line break algorithm From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Sun, 3 May 2020 09:26:44 -0000 |
If (like me) you find xsl:iterate easier to get right than recursive functions, then you could do something like <xsl:iterate select="tokenize($input)"> <xsl:param name="line-length" select="0"/> <xsl:choose> <xsl:when test="$line-length gt 35"> <break/> <xsl:value-of select=". || ' '"/> <xsl:next-iteration> <xsl:with-param name="line-length" select="string-length(.) + 1"/> </xsl:next-iteration> </xsl:when> <xsl:otherwise> <xsl:value-of select=". || ' '"/> <xsl:next-iteration> <xsl:with-param name="line-length" select="$line-length + string-length(.) + 1"/> </xsl:next-iteration> </xsl:otherwise> </xsl:choose> </xsl:iterate> Note that a solution using tokenize loses the original separators; if you want to retain separators such as multiple spaces or tabs then you'll need to use analyse-string instead. There are probably more concise/elegant solutions using higher-order functions and folding, but this one seems easy to read and understand. Michael Kay Saxonica > On 3 May 2020, at 01:45, Rick Quatro rick@xxxxxxxxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > > Hi All, > > I have lines in my input that I want to add <break> elements to in my output. For example, this might be the input: > > <xsl:param name="line" select="'Takeoff from Unlisted and Alternate Airports'"/> > > and I want to replace a space with a <break> so that each line doesn't exceed, for example, 35 characters > > <line>Takeoff from Unlisted and Alternate<break/>Airports</line> > > I am thinking the I can tokenize the line and then recursively build the string back up from the beginning, checking its length. Any other suggestions on a general-purpose algorithm that I can use in XSLT 3 would be appreciated. Thanks in advance. > > Rick > > Rick Quatro > Carmen Publishing Inc. > rick@xxxxxxxxxxxxxxx <mailto:rick@xxxxxxxxxxxxxxx> > 585-729-6746 > www.frameexpert.com/store/ <http://www.frameexpert.com/store/> > XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> > EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by email <>)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Line break algorithm, Dimitre Novatchev dn | Thread | Re: [xsl] Line break algorithm, Rick Quatro rick@xxx |
Re: [xsl] Joining list fragments (w, gerrit.imsieke@xxxxx | Date | Re: [xsl] Joining list fragments (w, Michael Kay mike@xxx |
Month |