Subject: Re: Word Wrap and PRE From: "Steve Muench" <smuench@xxxxxxxxxxxxx> Date: Tue, 26 Sep 2000 21:40:48 -0700 |
Here's an example from my soon-to-be-released book "Building Oracle XML Applications" where we work through building an XSLT-powered online discussion forum application. I use a combination of the following two templates to format code listings in the application. You can use the routines by importing "UtilText.xsl" into your stylesheet. Then, presuming your code example is selected by the expression "programlisting", you could use this with the code: <span style="font-family: monospace"> <xsl:call-template name="br-replace"> <xsl:with-param name="text"> <xsl:call-template name="sp-replace"> <xsl:with-param select="programlisting"/> </xsl:call-template> </xsl:with-param> </xsl:call-template> </span> the inner call-template replaces occurrences of pairs of consecutive spaces with a pair of non-breaking spaces represented by  . The outer call-template replaces line breaks with a <br/> tag. <!-- UtilText.xsl: Common text formatting routines --> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- Replace new lines with html <br> tags --> <xsl:template name="br-replace"> <xsl:param name="text"/> <xsl:variable name="cr" select="'
'"/> <xsl:choose> <!-- If the value of the $text parameter contains a carriage return... --> <xsl:when test="contains($text,$cr)"> <!-- Return the substring of $text before the carriage return --> <xsl:value-of select="substring-before($text,$cr)"/> <!-- And construct a <br/> element --> <br/> <!-- | Then invoke this same br-replace template again, passing the | substring *after* the carriage return as the new "$text" to | consider for replacement +--> <xsl:call-template name="br-replace"> <xsl:with-param name="text" select="substring-after($text,$cr)"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- Replace two consecutive spaces w/ 2 non-breaking spaces --> <xsl:template name="sp-replace"> <xsl:param name="text"/> <!-- NOTE: There are two spaces ** here below --> <xsl:variable name="sp"><xsl:text> </xsl:text></xsl:variable> <xsl:choose> <xsl:when test="contains($text,$sp)"> <xsl:value-of select="substring-before($text,$sp)"/> <xsl:text>  </xsl:text> <xsl:call-template name="sp-replace"> <xsl:with-param name="text" select="substring-after($text,$sp)"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$text"/> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet> ______________________________________________________________ Steve Muench, Lead XML Evangelist & Consulting Product Manager BC4J & XSQL Servlet Development Teams, Oracle Rep to XSL WG Author "Building Oracle XML Applications", O'Reilly http://www.oreilly.com/catalog/orxmlapp/ ----- Original Message ----- From: "Richard Saunders" <richards@xxxxxxxxxxxxxxxxx> To: <XSL-List@xxxxxxxxxxxxxxxx> Sent: Tuesday, September 26, 2000 5:56 PM Subject: Word Wrap and PRE | | I have a block of text from XML I wish to display on a web page. I wish to | keep the same carriage returns and line spaces as the in the block of text | in the XML. This I can do by using <PRE></PRE> in the XSL. However, the | space I have on the HTML page is only 300 pix wide and <PRE> simply over | runs this. How can I have the text maintain its format and word wrap at the | same time? | | Thanks | | | Richard | | | | XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list | XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Word Wrap and PRE, Richard Saunders | Thread | XSLT namespace, Paula Marin |
Re: Re: Urgent JSP, XML, XSL, Priya Pinto | Date | Re: special character, Lars Marius Garshol |
Month |