<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ssml="http://www.w3.org/2001/10/synthesis" exclude-result-prefixes="#all" version="2.0">
<xsl:param name="lang"/>
<xsl:param name="style-ns"/>
<xsl:variable name="mark-delimiter" select="'___'"/>
<xsl:variable name="voice-attr" select="'voice-family'"/>
<xsl:template match="/">
<ssml:speak version="1.1">
<xsl:for-each-group select="/*/ssml:s" group-by="string-join(@xml:lang|ssml:get-voice(.),'_')">
<xsl:for-each-group select="current-group()" group-by="(position() - 1) idiv 10">
<xsl:variable name="packet" select="current-group()"/>
<xsl:choose>
<xsl:when test="count($packet) = 1">
<s id="{ssml:get-skippable($packet[1])/@id}">
<xsl:copy-of select="$packet[1]/@* except @*[local-name()=$voice-attr] except @id"/>
<xsl:copy-of select="ssml:get-voice($packet[1])"/>
<xsl:copy-of select="$packet[1]/node()"/>
</s>
</xsl:when>
<xsl:otherwise>
<s>
<xsl:copy-of select="$packet[1]/@* except @id except @*[local-name()=$voice-attr]"/>
<xsl:copy-of select="ssml:get-voice($packet[1])"/>
<xsl:for-each select="$packet">
<xsl:variable name="foreach-pos" select="position()"/>
<xsl:variable name="current-skippable" select="ssml:get-skippable(current())"/>
<xsl:variable name="next-skippable" select="ssml:get-skippable($packet[$foreach-pos + 1])"/>
<xsl:copy-of select="current()/node()"/>
<xsl:value-of select="','"/>
<xsl:if test="$next-skippable">
<ssml:mark name="{concat($current-skippable/@id, $mark-delimiter, $next-skippable/@id)}"/>
<xsl:value-of select="' . '"/>
</xsl:if>
</xsl:for-each>
</s>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each-group>
</xsl:for-each-group>
</ssml:speak>
</xsl:template>
<xsl:function name="ssml:get-skippable">
<xsl:param name="sentence"/>
<xsl:sequence select="$sentence/descendant::*[@id][last()]"/>
</xsl:function>
<xsl:function name="ssml:get-voice">
<xsl:param name="sentence"/>
<xsl:sequence select="ssml:get-skippable($sentence)/ancestor-or-self::*[@*[local-name()=$voice-attr]]/@*[local-name()=$voice-attr]"/>
</xsl:function>
</xsl:stylesheet>