<?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">
<func:function name="string:lower-case">
<xsl:param name="in" />
<func:result select="translate($in,'ABCDEFGHIJKLMNOPQRSTUVWXYZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜŸÅÆŒÇÐØ','abcdefghijklmnopqrstuvwxyzàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðø')" />
</func:function>
<func:function name="string:upper-case">
<xsl:param name="in" />
<func:result select="translate($in,'abcdefghijklmnopqrstuvwxyzàèìòùáéíóúýâêîôûãñõäëïöüÿåæœçðø','ABCDEFGHIJKLMNOPQRSTUVWXYZÀÈÌÒÙÁÉÍÓÚÝÂÊÎÔÛÃÑÕÄËÏÖÜŸÅÆŒÇÐØ')" />
</func:function>
<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>
<func:function name="string:ucfirst">
<xsl:param name="in" />
<func:result>
<xsl:value-of select="string:capitalize($in)" />
</func:result>
</func:function>
<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>
<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>
<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>
<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>