|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Line break algorithm
Hi Rick,
I pulled this function using regular expressions (assuming there are no inline
elements present) from some past project (no XSLT 3, sorry):
<!--
try to break a string at the latest space character before the defined
width
returns a sequence of strings
-->
<xsl:function name="dy:wrapTextToLines" as="xs:string+">
<xsl:param name="text" as="xs:string" />
<xsl:param name="width" as="xs:integer" />
<xsl:choose>
<xsl:when test="normalize-space($text) = ''">
<!-- return empty string -->
<xsl:value-of select="''"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="cleaned" select="mormalize-space($text)"/>
<xsl:variable name="wrapped" select="
replace(concat($cleaned,' '),
concat('(.{0,', $width, '}) '), concat('$1', $gLF))"/>
<xsl:sequence select="tokenize(replace($wrapped, concat($gLF, '$'),
''), $gLF)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:function>
It works by adding a space to the end and then using a regular expression to
select up to the max characters followed by a space. Since regexes are greedy
by default, it will try to capture as many words as possible within the given
limit.
In my situation $gLF was a linefeed character, and in the last line I removed
the closing LF before tokenizing the result.
HTH,
- Michael
PS: Always nice remembering our FrameMaker timesb&
> Am 03.05.2020 um 02:45 schrieb Rick Quatro rick@xxxxxxxxxxxxxx
<mailto:rick@xxxxxxxxxxxxxx> <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx
<mailto:xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>>:
>
> 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








