blob: 2bfe3a70589d1fbc4c75b2b2209c2648e3c3abf6 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8"?>
<!--
* Copyright (c) 2002 World Wide Web Consortium,
* (Massachusetts Institute of Technology, Institut National de
* Recherche en Informatique et en Automatique, Keio University). All
* Rights Reserved. This program is distributed under the W3C's Software
* Intellectual Property License. This program is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY; without even
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE.
* See W3C License http://www.w3.org/Consortium/Legal/ for more details.
-->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<!-- Tokenize a list of strings, delimited by single spaces,
and output the unique ones,
prefixed by $before-output and followed by $after-output. -->
<xsl:template name="tokenize-and-output">
<xsl:param name="string" select="''"/>
<xsl:param name="before-output" select="''"/>
<xsl:param name="after-output" select="''"/>
<xsl:param name="delimit-output" select="' '"/>
<xsl:param name="used-states" select="' '"/> <!-- Private -->
<xsl:if test="$string">
<xsl:variable name="token" select="substring-before($string,' ')"/>
<xsl:choose>
<xsl:when test="$token">
<xsl:if test="not(contains($used-states, concat(' ', $token, ' ')))">
<xsl:choose>
<xsl:when test="$used-states = ' '">
<xsl:value-of select="$before-output"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$delimit-output"/>
</xsl:otherwise>
</xsl:choose>
<xsl:value-of select="$token"/>
</xsl:if>
<xsl:call-template name="tokenize-and-output">
<xsl:with-param name="string"
select="substring($string, string-length($token)+2)"/>
<xsl:with-param name="used-states"
select="concat($used-states, $token, ' ')"/>
<xsl:with-param name="before-output" select="$before-output"/>
<xsl:with-param name="after-output" select="$after-output"/>
<xsl:with-param name="delimit-output" select="$delimit-output"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$after-output"/>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
<!-- Do xsl:apply-templates to the children of the current node,
adding a delimiter between each child. -->
<xsl:template name="apply-delimited-children">
<xsl:param name="delimeter" select="', '"/>
<xsl:for-each select="*">
<xsl:if test="position()!=1 and position != last()">
<xsl:copy-of select="$delimeter"/>
</xsl:if>
<xsl:apply-templates select="."/>
</xsl:for-each>
</xsl:template>
<!-- Output characters of a string, replacing the character
specified by the "from" parameter with the characters specified
by the "to" parameter. -->
<xsl:template name="replace-char">
<xsl:param name="from" select="''"/>
<xsl:param name="to" select="''"/>
<xsl:param name="string" select="''"/>
<xsl:if test="$string">
<xsl:choose>
<xsl:when test="substring($string,1,1)=$from">
<!-- Added this to avoid empty commas in sequences of
spaces. It should be removed, I think. -sb -->
<xsl:if test="substring($string,2,1)!=$from">
<xsl:value-of select="$to"/>
</xsl:if>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring($string,1,1)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:call-template name="replace-char">
<xsl:with-param name="string" select="substring($string, 2)"/>
<xsl:with-param name="to" select="$to"/>
<xsl:with-param name="from" select="$from"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>