[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Creating Fixed-Width Text Data


Subject: RE: [xsl] Creating Fixed-Width Text Data
From: Peter Van de Water <peter.vandewater@xxxxxxxxxxxxxxx>
Date: Wed, 15 Jan 2003 09:18:40 +1300

You can do it without recursion by calculating $column-width - $text-width
and then using substring on a constant of a whole lot of spaces to get the
right amount of padding. (I build the padding constant with a one-off
recursion but you could just hard code it)

Below is what I'm using to do left, right and centre alignment. Fully
justified is not worth the effort at the moment :-)

Peter

	<xsl:variable name="MAX_WIDTH" select="100"/>

	<xsl:variable name="LEFT" select="'Left'"/>
	<xsl:variable name="RIGHT" select="'Right'"/>
	<xsl:variable name="CENTRE" select="'Centre'"/>
	<xsl:variable name="PADDING">
		<xsl:call-template name="Repeat">
			<xsl:with-param name="count" select="$MAX_WIDTH"/>
		</xsl:call-template>
	</xsl:variable>

	<xsl:template name="Align">
		<xsl:param name="alignment" select="$LEFT"/>
		<xsl:param name="width"/>
		<xsl:param name="text"/>
		<xsl:variable name="paddingwidth">
			<xsl:choose>
				<xsl:when test="$alignment = $RIGHT">
					<xsl:value-of select="$width -
string-length($text)"/>
				</xsl:when>
				
				<xsl:when test="$alignment = $CENTRE">
					<xsl:value-of select="($width -
string-length($text)) div 2"/>
				</xsl:when>
				
				<xsl:otherwise>0</xsl:otherwise>
			</xsl:choose>
		</xsl:variable>
		<xsl:value-of select="substring($PADDING, 1,
$paddingwidth)"/>
		<xsl:value-of select="$text"/>
	</xsl:template>

	<xsl:template name="Repeat">
		<xsl:param name="char" select="' '"/>
		<xsl:param name="count"/>
		<xsl:if test="$count">
			<xsl:value-of select="$char"/>
			<xsl:call-template name="Repeat">
				<xsl:with-param name="char" select="$char"/>
				<xsl:with-param name="count" select="$count
- 1"/>
			</xsl:call-template>
		</xsl:if>
	</xsl:template>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread