<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:string="http://symphony-cms.com/functions" xmlns:_string="http://symphony-cms.com/functions" xmlns:func="http://exslt.org/functions" extension-element-prefixes="func"> <!-- Convert string to lowercase --> <func:function name="string:lower-case"> <xsl:param name="in" /> <func:result select="translate($in,'ABCDEFGHIJKLMNOPQRSTUVWXYZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜŸÅÆŒÇÐØ','abcdefghijklmnopqrstuvwxyzàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðø')" /> </func:function> <!-- Convert string to uppercase --> <func:function name="string:upper-case"> <xsl:param name="in" /> <func:result select="translate($in,'abcdefghijklmnopqrstuvwxyzàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðø','ABCDEFGHIJKLMNOPQRSTUVWXYZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜŸÅÆŒÇÐØ')" /> </func:function> <!-- Capitalize first letter in string --> <func:function name="string:capitalize"> <xsl:param name="in" /> <func:result> <xsl:copy-of select="string:upper-case(substring($in, 1, 1))" /> <xsl:copy-of select="string:lower-case(substring($in, 2))" /> </func:result> </func:function> <!-- Alias for capitalize string --> <func:function name="string:ucfirst"> <xsl:param name="in" /> <func:result> <xsl:value-of select="string:capitalize($in)" /> </func:result> </func:function> <!-- Capitalize all words in string --> <func:function name="string:capitalize-words"> <xsl:param name="in" /> <func:result> <xsl:value-of select="_string:grabword($in,' ')"/> </func:result> </func:function> <func:function name="_string:grabword"> <xsl:param name="haystack" /> <xsl:param name="needle" /> <func:result> <xsl:choose> <xsl:when test="contains($haystack, $needle)"> <xsl:value-of select="concat(string:capitalize(substring-before($haystack, $needle)),$needle)" /> <xsl:copy-of select="_string:grabword(substring-after($haystack, $needle),$needle)" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="concat(string:capitalize($haystack), $needle)" /> </xsl:otherwise> </xsl:choose> </func:result> </func:function> <!-- Replace a string within a string (or find the needle in the haystack and replace it) --> <func:function name="string:replace"> <xsl:param name="in" /> <xsl:param name="needle" /> <xsl:param name="replace" select="''" /> <func:result> <xsl:choose> <xsl:when test="contains($in, $needle)"> <xsl:value-of select="substring-before($in, $needle)" /> <xsl:value-of select="$replace" /> <xsl:value-of select="string:replace(substring-after($in, $needle),$needle,$replace)" /> </xsl:when> <xsl:otherwise> <xsl:value-of select="$in" /> </xsl:otherwise> </xsl:choose> </func:result> </func:function> <!-- Splits a string and returns a nodeset --> <func:function name="string:split"> <xsl:param name="in" /> <xsl:param name="delim" select="','" /> <xsl:param name="rootnode" select="'nodeset'" /> <xsl:param name="nodename" select="'node'" /> <func:result> <xsl:element name="{$rootnode}"> <xsl:copy-of select="_string:createnodes($in,$delim,$nodename)" /> </xsl:element> </func:result> </func:function> <func:function name="_string:createnodes"> <xsl:param name="haystack" /> <xsl:param name="needle" /> <xsl:param name="nodename" select="'node'" /> <func:result> <xsl:choose> <xsl:when test="contains($haystack, $needle)"> <xsl:element name="{$nodename}"> <xsl:value-of select="substring-before($haystack, $needle)" /> </xsl:element> <xsl:copy-of select="_string:createnodes(substring-after($haystack, $needle),$needle,$nodename)" /> </xsl:when> <xsl:otherwise> <xsl:element name="{$nodename}"> <xsl:value-of select="$haystack" /> </xsl:element> </xsl:otherwise> </xsl:choose> </func:result> </func:function> <!--Count occurrences of a string in a string--> <func:function name="string:substring-count"> <xsl:param name="haystack" /> <xsl:param name="needle" /> <func:result> <xsl:choose> <xsl:when test="contains($haystack, $needle) and $haystack and $needle"> <xsl:variable name="count"> <xsl:copy-of select="string:substring-count(substring-after($haystack, $needle), $needle)" /> </xsl:variable> <xsl:value-of select="$count + 1" /> </xsl:when> <xsl:otherwise>0</xsl:otherwise> </xsl:choose> </func:result> </func:function> </xsl:stylesheet>