<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generated by NiceXSL 2.0.4 at Sun Jul 25 16:17:21 BST 2004 -->
<!--
 * Copyright (c) 2002,2004 E.D.Willink and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     E.D.Willink
 *
 * This stylesheet accepts an XSLT stylesheet as input and emits a NiceXSL
 * reverse compilation as output. The resulting translation makes a plausible
 * attempt to use compact NiceXSL formats, though users may find that they can
 * improve the layout, or just adjust to suit their style.
 *
 -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text"/>
    <xsl:strip-space elements="*"/>
    <xsl:variable name="version" select="&quot;2.0.4&quot;"/>
    <xsl:variable name="xslt-keywords" select="concat(&quot;,&quot;, &quot;analyze-string,&quot;, &quot;apply-imports,&quot;, &quot;apply-templates,&quot;, &quot;attribute,&quot;, &quot;attribute-set,&quot;, &quot;call,&quot;, &quot;call-template,&quot;, &quot;character-map,&quot;, &quot;choose,&quot;, &quot;comment,&quot;, &quot;copy,&quot;, &quot;copy-of,&quot;, &quot;decimal-format,&quot;, &quot;document,&quot;, &quot;element,&quot;, &quot;else,&quot;, &quot;fallback,&quot;, &quot;for-each,&quot;, &quot;for-each-group,&quot;, &quot;function,&quot;, &quot;if,&quot;, &quot;import,&quot;, &quot;import-schema,&quot;, &quot;include,&quot;, &quot;key,&quot;, &quot;match,&quot;, &quot;matching-substring,&quot;, &quot;message,&quot;, &quot;namespace,&quot;, &quot;namespace-alias,&quot;, &quot;next-match,&quot;, &quot;non-matching-substring,&quot;, &quot;number,&quot;, &quot;otherwise,&quot;, &quot;output,&quot;, &quot;output-character,&quot;, &quot;perform-sort,&quot;, &quot;preserve-space,&quot;, &quot;processing-instruction,&quot;, &quot;result-document,&quot;, &quot;sequence,&quot;, &quot;sort,&quot;, &quot;strip-space,&quot;, &quot;stylesheet,&quot;, &quot;template,&quot;, &quot;text,&quot;, &quot;transform,&quot;, &quot;value-of,&quot;, &quot;variable,&quot;, &quot;when,&quot;, &quot;xmlns,&quot;)"/>
    <!-- 
        Write out the current attribute as '@name="expr"'.
    -->
    <xsl:template name="write-attribute">
        <xsl:variable name="name" select="name()"/>
        <xsl:value-of select="' '"/>
        <xsl:if test="contains($xslt-keywords, concat(&quot;,&quot;, $name, &quot;,&quot;))">
            <xsl:value-of select="'@'"/>
        </xsl:if>
        <xsl:value-of select="$name"/>
        <xsl:value-of select="'='"/>
        <xsl:call-template name="write-quoted">
            <xsl:with-param name="name" select="."/>
        </xsl:call-template>
    </xsl:template>
    <!-- 
        Write out all the attributes, putting out the 'quoted1'  and'quoted2' attribute first
        formatting 'quoted1' and 'quoted2' with a prefix '='. Any 'except1' and 'except2'
        attributes are omitted..
    -->
    <xsl:template name="write-attributes">
        <xsl:param name="name1" select="''"/>
        <xsl:param name="type1" select="''"/>
        <xsl:param name="quoted1" select="''"/>
        <xsl:param name="quoted2" select="''"/>
        <xsl:param name="xpath1" select="''"/>
        <xsl:param name="xpath2" select="''"/>
        <xsl:param name="text1" select="''"/>
        <xsl:param name="text2" select="''"/>
        <xsl:param name="except1" select="''"/>
        <xsl:param name="except2" select="''"/>
        <xsl:param name="except3" select="''"/>
        <xsl:for-each select="@*[name() = $name1]">
            <xsl:call-template name="write-name">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $type1]">
            <xsl:value-of select="' :'"/>
            <xsl:call-template name="write-name">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $quoted1]">
            <xsl:value-of select="' '"/>
            <xsl:call-template name="write-quoted">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $xpath1]">
            <xsl:call-template name="write-xpath">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $text1]">
            <xsl:value-of select="' '"/>
            <xsl:call-template name="write-text">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $quoted2]">
            <xsl:value-of select="'='"/>
            <xsl:call-template name="write-quoted">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $xpath2]">
            <xsl:value-of select="' = '"/>
            <xsl:call-template name="write-xpath">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() = $text2]">
            <xsl:value-of select="' = '"/>
            <xsl:call-template name="write-text">
                <xsl:with-param name="name" select="."/>
            </xsl:call-template>
        </xsl:for-each>
        <xsl:for-each select="@*[name() != $name1 and name() != $type1 and name() != $quoted1 and name() != $quoted2 and name() != $xpath1 and name() != $xpath2 and name() != $text1 and name() != $text2 and name() != $except1 and name() != $except2 and name() != $except3]">
            <xsl:sort select="."/>
            <xsl:call-template name="write-attribute"/>
        </xsl:for-each>
    </xsl:template>
    <!-- 
        Write out indentation to reflect the prevailing hierarchy.
    -->
    <xsl:template name="write-indentation">
        <xsl:value-of select="'&#10;'"/>
        <xsl:for-each select="ancestor::*">
            <xsl:choose>
                <xsl:when test="self::xsl:choose and count(node()) = 2 and xsl:otherwise"/>
                <xsl:otherwise>
                    <xsl:choose>
                        <xsl:when test="self::xsl:otherwise/xsl:choose and count(../node()) = 2"/>
                        <xsl:otherwise>
                            <xsl:value-of select="'    '"/>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>
    <!-- 
        Write the keyword 'name' at the start of an xsl construct on a new-line with indentation
    -->
    <xsl:template name="write-keyword">
        <xsl:param name="name" select="local-name()"/>
        <xsl:call-template name="write-indentation"/>
        <xsl:value-of select="$name"/>
    </xsl:template>
    <xsl:template name="write-name">
        <xsl:param name="name"/>
        <xsl:param name="prefix" select="' '"/>
        <xsl:value-of select="$prefix"/>
        <xsl:choose>
            <xsl:when test="contains($name, '{')">
                <xsl:value-of select="'&quot;'"/>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="$name"/>
                    <xsl:with-param name="quote" select="'&quot;'"/>
                </xsl:call-template>
                <xsl:value-of select="'&quot;'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$name"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!-- 
        Write out the current namespace attribute with indentation.
    -->
    <xsl:template name="write-namespace">
        <xsl:call-template name="write-indentation"/>
        <xsl:value-of select="'xmlns'"/>
        <xsl:if test="name()">
            <xsl:value-of select="':'"/>
            <xsl:value-of select="name()"/>
        </xsl:if>
        <xsl:value-of select="'='"/>
        <xsl:call-template name="write-quoted">
            <xsl:with-param name="name" select="."/>
        </xsl:call-template>
    </xsl:template>
    <!-- 
        Write out all the nodes, omitting 'except'.
    -->
    <xsl:template name="write-nodes">
        <xsl:param name="except" select="''"/>
        <xsl:param name="no-punct" select="false()"/>
        <xsl:choose>
            <xsl:when test="node()[name() != $except]">
                <xsl:if test="not($no-punct)">
                    <xsl:value-of select="' {'"/>
                </xsl:if>
                <xsl:apply-templates select="text() | node()[name() != $except]"/>
                <xsl:if test="not($no-punct)">
                    <xsl:call-template name="write-keyword">
                        <xsl:with-param name="name" select="'}'"/>
                    </xsl:call-template>
                </xsl:if>
            </xsl:when>
            <xsl:otherwise>
                <xsl:apply-templates select="text() | node()[name() != $except]"/>
                <xsl:if test="not($no-punct)">
                    <xsl:value-of select="';'"/>
                </xsl:if>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!-- 
        Write out the 'parameters' in parentheses.
    -->
    <xsl:template name="write-parameters">
        <xsl:param name="parameters"/>
        <xsl:value-of select="'('"/>
        <xsl:for-each select="$parameters">
            <xsl:call-template name="write-name">
                <xsl:with-param name="name" select="@name"/>
                <xsl:with-param name="prefix" select="''"/>
            </xsl:call-template>
            <xsl:if test="@as">
                <xsl:value-of select="' :'"/>
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@as"/>
                </xsl:call-template>
            </xsl:if>
            <xsl:if test="@select or node()">
                <xsl:value-of select="' := '"/>
            </xsl:if>
            <xsl:if test="@select">
                <xsl:call-template name="write-xpath">
                    <xsl:with-param name="name" select="@select"/>
                    <xsl:with-param name="no-punct" select="true()"/>
                </xsl:call-template>
            </xsl:if>
            <xsl:if test="node() or @*[name() != 'name' and name() != 'as' and name() != 'select']">
                <xsl:value-of select="' {'"/>
                <xsl:call-template name="write-attributes">
                    <xsl:with-param name="except1" select="'name'"/>
                    <xsl:with-param name="except2" select="'as'"/>
                    <xsl:with-param name="except3" select="'select'"/>
                </xsl:call-template>
                <xsl:if test="node()">
                    <xsl:call-template name="write-nodes">
                        <xsl:with-param name="no-punct" select="true()"/>
                    </xsl:call-template>
                </xsl:if>
                <xsl:value-of select="'}'"/>
            </xsl:if>
            <xsl:if test="position() != last()">
                <xsl:value-of select="', '"/>
            </xsl:if>
        </xsl:for-each>
        <xsl:value-of select="')'"/>
    </xsl:template>
    <!--
        Write out the '.' attribute as name="value".
    -->
    <xsl:template name="write-quoted">
        <xsl:param name="name"/>
        <xsl:value-of select="'&quot;'"/>
        <xsl:call-template name="write-text">
            <xsl:with-param name="name" select="$name"/>
            <xsl:with-param name="quote" select="'&quot;'"/>
        </xsl:call-template>
        <xsl:value-of select="'&quot;'"/>
    </xsl:template>
    <!--
        Write out 'name' as text avoiding nasty characters.
    -->
    <xsl:template name="write-text">
        <xsl:param name="name"/>
        <xsl:param name="normalize-space" select="true()"/>
        <xsl:param name="quote" select="''"/>
        <xsl:choose>
            <xsl:when test="not($name)"/>
            <xsl:when test="contains($name, '&amp;')">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, '&amp;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="'&amp;amp;'"/>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-after($name, '&amp;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="($quote != '') and contains($name, $quote)">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, $quote)"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:choose>
                    <xsl:when test="$quote = '&quot;'">
                        <xsl:value-of select="'&amp;quot;'"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="'&amp;apos;'"/>
                    </xsl:otherwise>
                </xsl:choose>
                <xsl:variable name="suffix" select="substring-after($name, $quote)"/>
                <xsl:choose>
                    <xsl:when test="contains($suffix, $quote)">
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="substring-before($suffix, $quote)"/>
                            <xsl:with-param name="normalize-space" select="false()"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                        <xsl:choose>
                            <xsl:when test="$quote = '&quot;'">
                                <xsl:value-of select="'&amp;quot;'"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:value-of select="'&amp;apos;'"/>
                            </xsl:otherwise>
                        </xsl:choose>
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="substring-after($suffix, $quote)"/>
                            <xsl:with-param name="normalize-space" select="$normalize-space"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="$suffix"/>
                            <xsl:with-param name="normalize-space" select="$normalize-space"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:when test="($quote = '') and contains($name, '&quot;') and not(contains(substring-before($name, '&quot;'), &quot;'&quot;))">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, '&quot;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="'&quot;'"/>
                <xsl:variable name="suffix" select="substring-after($name, '&quot;')"/>
                <xsl:choose>
                    <xsl:when test="contains($suffix, '&quot;')">
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="substring-before($suffix, '&quot;')"/>
                            <xsl:with-param name="normalize-space" select="false()"/>
                            <xsl:with-param name="quote" select="'&quot;'"/>
                        </xsl:call-template>
                        <xsl:value-of select="'&quot;'"/>
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="substring-after($suffix, '&quot;')"/>
                            <xsl:with-param name="normalize-space" select="$normalize-space"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="$suffix"/>
                            <xsl:with-param name="normalize-space" select="$normalize-space"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:when test="($quote = '') and contains($name, &quot;'&quot;)">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, &quot;'&quot;)"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="&quot;'&quot;"/>
                <xsl:variable name="suffix" select="substring-after($name, &quot;'&quot;)"/>
                <xsl:choose>
                    <xsl:when test="contains($suffix, &quot;'&quot;)">
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="substring-before($suffix, &quot;'&quot;)"/>
                            <xsl:with-param name="normalize-space" select="false()"/>
                            <xsl:with-param name="quote" select="&quot;'&quot;"/>
                        </xsl:call-template>
                        <xsl:value-of select="&quot;'&quot;"/>
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="substring-after($suffix, &quot;'&quot;)"/>
                            <xsl:with-param name="normalize-space" select="$normalize-space"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:call-template name="write-text">
                            <xsl:with-param name="name" select="$suffix"/>
                            <xsl:with-param name="normalize-space" select="$normalize-space"/>
                            <xsl:with-param name="quote" select="$quote"/>
                        </xsl:call-template>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:when test="contains($name, '&quot;')">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, '&quot;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="'&quot;'"/>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-after($name, '&quot;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="contains($name, &quot;'&quot;)">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, &quot;'&quot;)"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="&quot;'&quot;"/>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-after($name, &quot;'&quot;)"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="contains($name, '&#10;')">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, '&#10;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="'&amp;#xA;'"/>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-after($name, '&#10;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="contains($name, '&#13;')">
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-before($name, '&#13;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
                <xsl:value-of select="'&amp;#xD;'"/>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="substring-after($name, '&#13;')"/>
                    <xsl:with-param name="normalize-space" select="$normalize-space"/>
                    <xsl:with-param name="quote" select="$quote"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="$normalize-space">
                <xsl:call-template name="write-text-chars">
                    <xsl:with-param name="text" select="normalize-space($name)"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-text-chars">
                    <xsl:with-param name="text" select="$name"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!--
        Write out 'text' resolving nasty characters.
    -->
    <xsl:template name="write-text-chars">
        <xsl:param name="text"/>
        <xsl:variable name="printable-chars" select="&quot; !#$%()*+,-./0123456789:;&lt;=&gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&quot;"/>
        <xsl:variable name="non-printable" select="translate($text, $printable-chars, &quot;&quot;)"/>
        <xsl:choose>
            <xsl:when test="$non-printable = &quot;&quot;">
                <xsl:value-of select="$text"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:variable name="length" select="string-length($text)"/>
                <xsl:choose>
                    <xsl:when test="$length &gt; 1">
                        <xsl:variable name="first-half" select="floor($length div 2)"/>
                        <xsl:call-template name="write-text-chars">
                            <xsl:with-param name="text" select="substring($text, 1, $first-half)"/>
                        </xsl:call-template>
                        <xsl:call-template name="write-text-chars">
                            <xsl:with-param name="text" select="substring($text, $first-half + 1, $length - $first-half)"/>
                        </xsl:call-template>
                        <!--
			}   		
			else if (function-available('string-to-codepoints')) {
	    		value-of ('&amp;#');
	This code crashes on Xalan even when the stylesheet version is 2.0 which
	should activate 'forward compatibility' mode and therefore not invoke
	the non-available function. 
	    	 	value-of(string-to-codepoints($text));
	    		value-of (';');
-->
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:call-template name="write-text-char">
                            <xsl:with-param name="char" select="$text"/>
                        </xsl:call-template>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!--
        Write out 'text' resolving UTF-8 characters. A value search of all
        UTF-16 characters is too horrible to contemplate.
    -->
    <xsl:template name="write-text-char">
        <xsl:param name="char"/>
        <xsl:variable name="utf-8-chars" select="concat(&quot; ! #$%&amp;'()*+,-./&quot;, &quot;0123456789:;&lt;=&gt;?&quot;, &quot;@ABCDEFGHIJKLMNO&quot;, &quot;PQRSTUVWXYZ[\]^_&quot;, &quot;`abcdefghijklmno&quot;, &quot;pqrstuvwxyz{|}~&#127;&quot;, &quot;&#128;&#129;&#130;&#131;&#132;&#133;&#134;&#135;&#136;&#137;&#138;&#139;&#140;&#141;&#142;&#143;&quot;, &quot;&#144;&#145;&#146;&#147;&#148;&#149;&#150;&#151;&#152;&#153;&#154;&#155;&#156;&#157;&#158;&#159;&quot;, &quot; ¡¢£¤¥¦§¨©ª«¬­®¯&quot;, &quot;°±²³´µ¶·¸¹º»¼½¾¿&quot;, &quot;ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ&quot;, &quot;ÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß&quot;, &quot;àáâãäåæçèéêëìíîï&quot;, &quot;ðñòóôõö÷øùúûüýþÿ&quot;)"/>
        <xsl:choose>
            <xsl:when test="contains($utf-8-chars, $char)">
                <xsl:variable name="code-point" select="32 + string-length(substring-before($utf-8-chars, $char))"/>
                <xsl:value-of select="'&amp;#'"/>
                <xsl:value-of select="$code-point"/>
                <xsl:value-of select="';'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:message>XSL2NiceXSL: string-to-codepoints() from XSLT 2 needed for non 8-bit character.</xsl:message>
                <xsl:value-of select="'&amp;#9999;'"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template name="write-xpath">
        <xsl:param name="name"/>
        <xsl:param name="no-punct" select="false()"/>
        <xsl:param name="no-space" select="false()"/>
        <xsl:if test="not($no-punct) and not($no-space)">
            <xsl:value-of select="' '"/>
        </xsl:if>
        <xsl:if test="not($no-punct)">
            <xsl:value-of select="'('"/>
        </xsl:if>
        <xsl:variable name="length" select="string-length($name)"/>
        <xsl:choose>
            <xsl:when test="$length &gt;= 2">
                <xsl:variable name="first-char" select="substring($name, 1, 1)"/>
                <xsl:variable name="middle-chars" select="substring($name, 2, $length - 2)"/>
                <xsl:variable name="last-char" select="substring($name, $length, 1)"/>
                <xsl:choose>
                    <xsl:when test="$first-char = &quot;'&quot;">
                        <xsl:if test="$last-char = &quot;'&quot;">
                            <xsl:value-of select="&quot;'&quot;"/>
                            <xsl:call-template name="write-text">
                                <xsl:with-param name="name" select="$middle-chars"/>
                                <xsl:with-param name="normalize-space" select="false()"/>
                                <xsl:with-param name="quote" select="&quot;'&quot;"/>
                            </xsl:call-template>
                            <xsl:value-of select="&quot;'&quot;"/>
                        </xsl:if>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:choose>
                            <xsl:when test="$first-char = '&quot;'">
                                <xsl:if test="$last-char = '&quot;'">
                                    <xsl:value-of select="'&quot;'"/>
                                    <xsl:call-template name="write-text">
                                        <xsl:with-param name="name" select="$middle-chars"/>
                                        <xsl:with-param name="normalize-space" select="false()"/>
                                        <xsl:with-param name="quote" select="'&quot;'"/>
                                    </xsl:call-template>
                                    <xsl:value-of select="'&quot;'"/>
                                </xsl:if>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="write-text">
                                    <xsl:with-param name="name" select="$name"/>
                                    <xsl:with-param name="normalize-space" select="false()"/>
                                </xsl:call-template>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-text">
                    <xsl:with-param name="name" select="$name"/>
                    <xsl:with-param name="normalize-space" select="false()"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:if test="not($no-punct)">
            <xsl:value-of select="')'"/>
        </xsl:if>
    </xsl:template>
    <!--
        Constructs with no or only optional attributes.
    -->
    <xsl:template match="xsl:copy | xsl:decimal-format | xsl:document | xsl:fallback | xsl:import-schema | xsl:matching-substring | xsl:message | xsl:non-matching-substring | xsl:number | xsl:text">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes"/>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:apply-templates">
        <xsl:call-template name="write-keyword"/>
        <xsl:if test="@mode">
            <xsl:call-template name="write-name">
                <xsl:with-param name="name" select="@mode"/>
            </xsl:call-template>
        </xsl:if>
        <xsl:call-template name="write-xpath">
            <xsl:with-param name="name" select="@select"/>
        </xsl:call-template>
        <xsl:if test="xsl:with-param">
            <xsl:call-template name="write-parameters">
                <xsl:with-param name="parameters" select="xsl:with-param"/>
            </xsl:call-template>
        </xsl:if>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'select'"/>
            <xsl:with-param name="except2" select="'mode'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="except" select="'xsl:with-param'"/>
        </xsl:call-template>
    </xsl:template>
    <xsl:template match="xsl:choose">
        <xsl:choose>
            <xsl:when test="not(@*) and count(node()) = 2 and xsl:when and xsl:otherwise">
                <xsl:for-each select="xsl:when">
                    <xsl:call-template name="write-keyword">
                        <xsl:with-param name="name" select="'if'"/>
                    </xsl:call-template>
                    <xsl:call-template name="write-attributes">
                        <xsl:with-param name="xpath1" select="'test'"/>
                    </xsl:call-template>
                    <xsl:call-template name="write-nodes"/>
                </xsl:for-each>
                <xsl:apply-templates select="xsl:otherwise"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-keyword"/>
                <xsl:call-template name="write-attributes"/>
                <xsl:call-template name="write-nodes"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template match="xsl:otherwise">
        <xsl:choose>
            <xsl:when test="count(../node()) = 2 and ../xsl:when">
                <xsl:call-template name="write-keyword">
                    <xsl:with-param name="name" select="'else'"/>
                </xsl:call-template>
                <xsl:choose>
                    <xsl:when test="count(node()) = 1 and count(xsl:choose/node()) = 2 and xsl:choose/xsl:when and xsl:choose/xsl:otherwise">
                        <xsl:for-each select="xsl:choose/xsl:when">
                            <xsl:value-of select="' if'"/>
                            <xsl:call-template name="write-attributes">
                                <xsl:with-param name="xpath1" select="'test'"/>
                            </xsl:call-template>
                            <xsl:call-template name="write-nodes"/>
                        </xsl:for-each>
                        <xsl:apply-templates select="xsl:choose/xsl:otherwise"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:call-template name="write-attributes"/>
                        <xsl:call-template name="write-nodes"/>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-keyword"/>
                <xsl:call-template name="write-attributes"/>
                <xsl:call-template name="write-nodes"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <!--
        Constructs with a name attribute.
    -->
    <xsl:template match="xsl:attribute-set | xsl:character-map">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="name1" select="'name'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:attribute">
        <xsl:choose>
            <xsl:when test="@name and @type and @select and not(@*[4]) and not(node())">
                <xsl:value-of select="' @'"/>
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@name"/>
                    <xsl:with-param name="prefix" select="''"/>
                </xsl:call-template>
                <xsl:value-of select="' :'"/>
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@type"/>
                </xsl:call-template>
                <xsl:value-of select="' := '"/>
                <xsl:call-template name="write-xpath">
                    <xsl:with-param name="name" select="@select"/>
                    <xsl:with-param name="no-punct" select="true()"/>
                </xsl:call-template>
                <xsl:value-of select="';'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:choose>
                    <xsl:when test="@name and @select and not(@*[3]) and not(node())">
                        <xsl:value-of select="' @'"/>
                        <xsl:call-template name="write-name">
                            <xsl:with-param name="name" select="@name"/>
                            <xsl:with-param name="prefix" select="''"/>
                        </xsl:call-template>
                        <xsl:value-of select="':='"/>
                        <xsl:call-template name="write-xpath">
                            <xsl:with-param name="name" select="@select"/>
                            <xsl:with-param name="no-punct" select="true()"/>
                        </xsl:call-template>
                        <xsl:value-of select="';'"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:choose>
                            <xsl:when test="@name and @type and not(@*[3]) and xsl:value-of[@select and not(node())] and not(node()[2])">
                                <xsl:value-of select="' @'"/>
                                <xsl:call-template name="write-name">
                                    <xsl:with-param name="name" select="@name"/>
                                    <xsl:with-param name="prefix" select="''"/>
                                </xsl:call-template>
                                <xsl:value-of select="' :'"/>
                                <xsl:call-template name="write-name">
                                    <xsl:with-param name="name" select="@type"/>
                                </xsl:call-template>
                                <xsl:value-of select="' := '"/>
                                <xsl:call-template name="write-xpath">
                                    <xsl:with-param name="name" select="xsl:value-of/@select"/>
                                    <xsl:with-param name="no-punct" select="true()"/>
                                </xsl:call-template>
                                <xsl:value-of select="';'"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:choose>
                                    <xsl:when test="@name and not(@*[2]) and xsl:value-of[@select and not(node())] and not(node()[2])">
                                        <xsl:value-of select="' @'"/>
                                        <xsl:call-template name="write-name">
                                            <xsl:with-param name="name" select="@name"/>
                                            <xsl:with-param name="prefix" select="''"/>
                                        </xsl:call-template>
                                        <xsl:value-of select="':='"/>
                                        <xsl:call-template name="write-xpath">
                                            <xsl:with-param name="name" select="xsl:value-of/@select"/>
                                            <xsl:with-param name="no-punct" select="true()"/>
                                        </xsl:call-template>
                                        <xsl:value-of select="';'"/>
                                    </xsl:when>
                                    <xsl:otherwise>
                                        <xsl:call-template name="write-keyword"/>
                                        <xsl:call-template name="write-attributes">
                                            <xsl:with-param name="name1" select="'name'"/>
                                        </xsl:call-template>
                                        <xsl:call-template name="write-nodes"/>
                                    </xsl:otherwise>
                                </xsl:choose>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template match="xsl:call-template">
        <xsl:call-template name="write-keyword">
            <xsl:with-param name="name" select="'call'"/>
        </xsl:call-template>
        <xsl:call-template name="write-name">
            <xsl:with-param name="name" select="@name"/>
        </xsl:call-template>
        <xsl:call-template name="write-parameters">
            <xsl:with-param name="parameters" select="xsl:with-param"/>
        </xsl:call-template>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'name'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="except" select="'xsl:with-param'"/>
        </xsl:call-template>
    </xsl:template>
    <!--
        Constructs with a select attribute.
    -->
    <xsl:template match="xsl:copy-of | xsl:for-each | xsl:for-each-group | xsl:perform-sort | xsl:sequence | xsl:sort">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="xpath1" select="'select'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:function">
        <xsl:if test="preceding-sibling::node()[1][node()]">
            <xsl:value-of select="'&#10;'"/>
        </xsl:if>
        <xsl:call-template name="write-keyword">
            <xsl:with-param name="name" select="'function'"/>
        </xsl:call-template>
        <xsl:call-template name="write-name">
            <xsl:with-param name="name" select="@name"/>
        </xsl:call-template>
        <xsl:call-template name="write-parameters">
            <xsl:with-param name="parameters" select="xsl:param"/>
        </xsl:call-template>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'name'"/>
            <xsl:with-param name="type1" select="'as'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="except" select="'xsl:param'"/>
        </xsl:call-template>
    </xsl:template>
    <!--
        Constructs with a test attribute.
    -->
    <xsl:template match="xsl:if | xsl:when">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="xpath1" select="'test'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <!--
        Constructs with a href attribute.
    -->
    <xsl:template match="xsl:import | xsl:include">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="quoted1" select="'href'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:analyze-string">
        <xsl:call-template name="write-keyword"/>
        <xsl:value-of select="' ('"/>
        <xsl:call-template name="write-xpath">
            <xsl:with-param name="name" select="@select"/>
            <xsl:with-param name="no-punct" select="true()"/>
        </xsl:call-template>
        <xsl:value-of select="', &quot;'"/>
        <xsl:call-template name="write-xpath">
            <xsl:with-param name="name" select="@regex"/>
            <xsl:with-param name="no-punct" select="true()"/>
        </xsl:call-template>
        <xsl:value-of select="'&quot;)'"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'select'"/>
            <xsl:with-param name="except2" select="'regex'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:apply-imports">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-parameters">
            <xsl:with-param name="parameters" select="xsl:with-param"/>
        </xsl:call-template>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'name'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="except" select="'xsl:with-param'"/>
        </xsl:call-template>
    </xsl:template>
    <xsl:template match="xsl:comment">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="xpath1" select="'select'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:element">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="name1" select="'name'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:key">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="name1" select="'name'"/>
            <xsl:with-param name="xpath1" select="'match'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:namespace">
        <xsl:call-template name="write-keyword"/>
        <xsl:choose>
            <xsl:when test="@name = &quot;&quot;">
                <xsl:value-of select="' &quot;&quot;'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@name"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:if test="@select">
            <xsl:value-of select="' = '"/>
            <xsl:call-template name="write-quoted">
                <xsl:with-param name="name" select="@select"/>
            </xsl:call-template>
        </xsl:if>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'name'"/>
            <xsl:with-param name="except2" select="'select'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:namespace-alias">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="quoted1" select="'stylesheet-prefix'"/>
            <xsl:with-param name="quoted2" select="'result-prefix'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:next-match">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-parameters">
            <xsl:with-param name="parameters" select="xsl:with-param"/>
        </xsl:call-template>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="except1" select="'name'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="except" select="'xsl:with-param'"/>
        </xsl:call-template>
    </xsl:template>
    <xsl:template match="xsl:output-character">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="text1" select="'character'"/>
            <xsl:with-param name="text2" select="'string'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:output">
        <xsl:call-template name="write-keyword"/>
        <xsl:if test="not(@method)">
            <xsl:value-of select="' &quot;&quot;'"/>
        </xsl:if>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="name1" select="'method'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:preserve-space | xsl:strip-space">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="name1" select="'elements'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:processing-instruction">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="name1" select="'name'"/>
            <xsl:with-param name="xpath1" select="'select'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:result-document">
        <xsl:call-template name="write-keyword"/>
        <xsl:if test="not(@href)">
            <xsl:value-of select="' &quot;&quot;'"/>
        </xsl:if>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="quoted1" select="'href'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:stylesheet | xsl:transform">
        <xsl:call-template name="write-keyword"/>
        <xsl:if test="xsl:param">
            <xsl:call-template name="write-parameters">
                <xsl:with-param name="parameters" select="xsl:param"/>
            </xsl:call-template>
        </xsl:if>
        <xsl:call-template name="write-attributes"/>
        <xsl:for-each select="namespace::*[name() != 'xml' and name() != 'xsl']">
            <xsl:call-template name="write-namespace"/>
        </xsl:for-each>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="except" select="'xsl:param'"/>
        </xsl:call-template>
    </xsl:template>
    <xsl:template match="xsl:template">
        <xsl:if test="preceding-sibling::node()[1][node()]">
            <xsl:value-of select="'&#10;'"/>
        </xsl:if>
        <xsl:choose>
            <xsl:when test="@match">
                <xsl:call-template name="write-keyword">
                    <xsl:with-param name="name" select="'match'"/>
                </xsl:call-template>
                <xsl:if test="@mode">
                    <xsl:call-template name="write-name">
                        <xsl:with-param name="name" select="@mode"/>
                    </xsl:call-template>
                </xsl:if>
                <xsl:call-template name="write-xpath">
                    <xsl:with-param name="name" select="@match"/>
                    <xsl:with-param name="no-space" select="true()"/>
                </xsl:call-template>
                <xsl:if test="xsl:param or @name">
                    <xsl:if test="@name">
                        <xsl:call-template name="write-name">
                            <xsl:with-param name="name" select="@name"/>
                            <xsl:with-param name="prefix" select="' | '"/>
                        </xsl:call-template>
                    </xsl:if>
                    <xsl:call-template name="write-parameters">
                        <xsl:with-param name="parameters" select="xsl:param"/>
                    </xsl:call-template>
                </xsl:if>
                <xsl:call-template name="write-attributes">
                    <xsl:with-param name="except1" select="'match'"/>
                    <xsl:with-param name="except2" select="'mode'"/>
                    <xsl:with-param name="except3" select="'name'"/>
                    <xsl:with-param name="type1" select="'as'"/>
                </xsl:call-template>
                <xsl:call-template name="write-nodes">
                    <xsl:with-param name="except" select="'xsl:param'"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-keyword">
                    <xsl:with-param name="name" select="'template'"/>
                </xsl:call-template>
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@name"/>
                </xsl:call-template>
                <xsl:call-template name="write-parameters">
                    <xsl:with-param name="parameters" select="xsl:param"/>
                </xsl:call-template>
                <xsl:call-template name="write-attributes">
                    <xsl:with-param name="except1" select="'name'"/>
                    <xsl:with-param name="type1" select="'as'"/>
                </xsl:call-template>
                <xsl:call-template name="write-nodes">
                    <xsl:with-param name="except" select="'xsl:param'"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template match="xsl:value-of">
        <xsl:call-template name="write-keyword"/>
        <xsl:call-template name="write-attributes">
            <xsl:with-param name="xpath1" select="'select'"/>
        </xsl:call-template>
        <xsl:call-template name="write-nodes"/>
    </xsl:template>
    <xsl:template match="xsl:variable">
        <xsl:call-template name="write-keyword"/>
        <xsl:choose>
            <xsl:when test="@name and @as and @select and not(@*[4]) and not(node())">
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@name"/>
                </xsl:call-template>
                <xsl:value-of select="' :'"/>
                <xsl:call-template name="write-name">
                    <xsl:with-param name="name" select="@as"/>
                </xsl:call-template>
                <xsl:value-of select="' := '"/>
                <xsl:call-template name="write-xpath">
                    <xsl:with-param name="name" select="@select"/>
                    <xsl:with-param name="no-punct" select="true()"/>
                </xsl:call-template>
                <xsl:call-template name="write-nodes"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:choose>
                    <xsl:when test="@name and @select and not(@*[3]) and not(node())">
                        <xsl:call-template name="write-name">
                            <xsl:with-param name="name" select="@name"/>
                        </xsl:call-template>
                        <xsl:value-of select="' := '"/>
                        <xsl:call-template name="write-xpath">
                            <xsl:with-param name="name" select="@select"/>
                            <xsl:with-param name="no-punct" select="true()"/>
                        </xsl:call-template>
                        <xsl:call-template name="write-nodes"/>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:choose>
                            <xsl:when test="@name and not(@*[2]) and node()">
                                <xsl:call-template name="write-name">
                                    <xsl:with-param name="name" select="@name"/>
                                </xsl:call-template>
                                <xsl:value-of select="' := '"/>
                                <xsl:call-template name="write-nodes"/>
                                <xsl:value-of select="';'"/>
                            </xsl:when>
                            <xsl:otherwise>
                                <xsl:call-template name="write-attributes">
                                    <xsl:with-param name="name1" select="'name'"/>
                                    <xsl:with-param name="type1" select="'as'"/>
                                    <xsl:with-param name="quoted2" select="'select'"/>
                                </xsl:call-template>
                                <xsl:call-template name="write-nodes"/>
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
    <xsl:template match="/">
        <xsl:value-of select="'&lt;!-- Generated by XSL2NiceXSL.xsl '"/>
        <xsl:value-of select="$version"/>
        <xsl:value-of select="' --&gt;&#10;'"/>
        <xsl:apply-templates select="@*"/>
        <xsl:apply-templates select="node()"/>
        <xsl:value-of select="'&#10;'"/>
    </xsl:template>
    <xsl:template match="text()">
        <xsl:choose>
            <xsl:when test="parent::xsl:text">
                <xsl:value-of select="' &quot;'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-keyword">
                    <xsl:with-param name="name" select="'&quot;'"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
        <xsl:call-template name="write-text">
            <xsl:with-param name="name" select="."/>
            <xsl:with-param name="normalize-space" select="false()"/>
            <xsl:with-param name="quote" select="'&quot;'"/>
        </xsl:call-template>
        <xsl:value-of select="'&quot;'"/>
    </xsl:template>
    <xsl:template match="comment()">
        <xsl:if test="following-sibling::node()[1][self::xsl:template or self::xsl:function]">
            <xsl:value-of select="'&#10;'"/>
        </xsl:if>
        <xsl:call-template name="write-keyword"/>
        <xsl:value-of select="'&lt;!--'"/>
        <xsl:value-of select="."/>
        <xsl:value-of select="'--&gt;'"/>
    </xsl:template>
    <xsl:template match="@*">
        <xsl:call-template name="write-attribute"/>
    </xsl:template>
    <xsl:template match="xsl:*">
        <xsl:message>XSL2NiceXSL: No match for construct.<xsl:value-of select="name()"/>
        </xsl:message>
        <xsl:call-template name="write-keyword">
            <xsl:with-param name="name" select="concat('&lt;', name())"/>
        </xsl:call-template>
        <xsl:call-template name="write-attributes"/>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="no-punct" select="true()"/>
        </xsl:call-template>
        <xsl:call-template name="write-keyword">
            <xsl:with-param name="name" select="'&gt;'"/>
        </xsl:call-template>
    </xsl:template>
    <xsl:template match="*">
        <xsl:call-template name="write-keyword">
            <xsl:with-param name="name" select="concat('&lt;', name())"/>
        </xsl:call-template>
        <xsl:call-template name="write-attributes"/>
        <xsl:call-template name="write-nodes">
            <xsl:with-param name="no-punct" select="true()"/>
        </xsl:call-template>
        <xsl:choose>
            <xsl:when test="count(node()) = count(xsl:attribute)">
                <xsl:value-of select="'&gt;'"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:call-template name="write-keyword">
                    <xsl:with-param name="name" select="'&gt;'"/>
                </xsl:call-template>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>
