<xsl:stylesheet xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:teix="http://www.tei-c.org/ns/Examples" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dbk="http://docbook.org/ns/docbook" xmlns:estr="http://exslt.org/strings" xmlns:xhtml="http://www.w3.org/1999/xhtml" version="1.0" exclude-result-prefixes="xlink xhtml dbk rng sch m tei teix atom">


  
<xsl:strip-space elements="teix:* rng:* xsl:* xhtml:* atom:* m:*" />

  
<xsl:param name="startComment">&lt;span class="comment"&gt;</xsl:param>
  
<xsl:param name="endComment">&lt;/span&gt;</xsl:param>
  
<xsl:param name="startElement">&lt;span class="element"&gt;</xsl:param>
  
<xsl:param name="endElement">&lt;/span&gt;</xsl:param>
  
<xsl:param name="startElementName">&lt;span class="elementname"&gt;</xsl:param>
  
<xsl:param name="endElementName">&lt;/span&gt;</xsl:param>
  
<xsl:param name="startAttribute">&lt;span class="attribute"&gt;</xsl:param>
  
<xsl:param name="endAttribute">&lt;/span&gt;</xsl:param>
  
<xsl:param name="startAttributeValue">&lt;span class="attributevalue"&gt;</xsl:param>
  
<xsl:param name="endAttributeValue">&lt;/span&gt;</xsl:param>
  
<xsl:param name="startNamespace">&lt;span class="namespace"&gt;</xsl:param>
  
<xsl:param name="endNamespace">&lt;/span&gt;</xsl:param>

  
<xsl:param name="spaceCharacter"> </xsl:param>
  
<xsl:param name="showNamespaceDecls">true</xsl:param>

  
<xsl:param name="forceWrap">false</xsl:param>
  
<xsl:param name="wrapLength">65</xsl:param>
  
<xsl:param name="attLength">40</xsl:param>
  
<xsl:param name="attsOnSameLine">3</xsl:param>
  
<xsl:key name="Namespaces" match="*[ancestor::teix:egXML]" use="namespace-uri()" />

  
<xsl:key name="Namespaces" match="*[not(ancestor::*)]" use="namespace-uri()" />


  
<xsl:template name="newLine" />

  
<xsl:template name="lineBreak">
    
<xsl:param name="id" />
    
<xsl:text>
</xsl:text>
  
</xsl:template>

  
<xsl:template match="comment()" mode="verbatim">
    
<xsl:choose>
      
<xsl:when test="ancestor::Wrapper" />
      
<xsl:when test="ancestor::xhtml:Wrapper" />
      
<xsl:otherwise>
    
<xsl:call-template name="lineBreak">
      
<xsl:with-param name="id">21</xsl:with-param>
    
</xsl:call-template>
    
<xsl:value-of disable-output-escaping="yes" select="$startComment" />
    
<xsl:text>&lt;!--</xsl:text>
    
<xsl:choose>
      
<xsl:when test="$forceWrap='true'">
        
<xsl:call-template name="reformatText">
          
<xsl:with-param name="sofar">0</xsl:with-param>
          
<xsl:with-param name="indent">
            
<xsl:text> </xsl:text>
          
</xsl:with-param>
          
<xsl:with-param name="text">
            
<xsl:value-of select="normalize-space(.)" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:value-of select="." />
      
</xsl:otherwise>
    
</xsl:choose>
    
<xsl:text>--&gt;</xsl:text>
    
<xsl:value-of disable-output-escaping="yes" select="$endComment" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template match="text()" mode="verbatim">
    
<xsl:choose>
      
<xsl:when test="$forceWrap='true'">
        
<xsl:variable name="indent">
          
<xsl:for-each select="parent::*">
            
<xsl:call-template name="makeIndent" />
          
</xsl:for-each>
        
</xsl:variable>
        
<xsl:if test="string-length(.)&gt;$wrapLength or parent::sch:assert">
          
<xsl:text>
</xsl:text>
          
<xsl:value-of select="$indent" />
        
</xsl:if>
        
<xsl:call-template name="reformatText">
          
<xsl:with-param name="sofar">0</xsl:with-param>
          
<xsl:with-param name="indent">
            
<xsl:value-of select="$indent" />
          
</xsl:with-param>
          
<xsl:with-param name="text">
            
<xsl:value-of select="normalize-space(.)" />
          
</xsl:with-param>
        
</xsl:call-template>
        
<xsl:if test="string-length(.)&gt;$wrapLength or parent::sch:assert">
          
<xsl:text>
</xsl:text>
          
<xsl:value-of select="$indent" />
        
</xsl:if>
      
</xsl:when>
      
<xsl:when test="not(preceding-sibling::node() or contains(.,' '))">
        
<xsl:if test="starts-with(.,' ')">
          
<xsl:text> </xsl:text>
        
</xsl:if>
        
<xsl:call-template name="Text">
          
<xsl:with-param name="words">
            
<xsl:value-of select="normalize-space(.)" />
          
</xsl:with-param>
        
</xsl:call-template>
        
<xsl:if test="substring(.,string-length(.),1)=' '">
          
<xsl:text> </xsl:text>
        
</xsl:if>
      
</xsl:when>
      
<xsl:when test="normalize-space(.)=''">
        
<xsl:for-each select="following-sibling::*[1]">
          
<xsl:call-template name="lineBreak">
            
<xsl:with-param name="id">7</xsl:with-param>
          
</xsl:call-template>
          
<xsl:call-template name="makeIndent" />
        
</xsl:for-each>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:call-template name="wraptext">
          
<xsl:with-param name="count">0</xsl:with-param>
          
<xsl:with-param name="indent">
            
<xsl:for-each select="parent::*">
              
<xsl:call-template name="makeIndent" />
            
</xsl:for-each>
          
</xsl:with-param>
          
<xsl:with-param name="text">
            
<xsl:choose>
              
<xsl:when test="starts-with(.,' ') and not (preceding-sibling::node())">
                
<xsl:value-of select="translate(substring(.,2),' ','⌤')" />
              
</xsl:when>
              
<xsl:otherwise>
                    
<xsl:value-of select="translate(.,' ','⌤')" />
              
</xsl:otherwise>
            
</xsl:choose>
          
</xsl:with-param>
        
</xsl:call-template>
        
<!--
        <xsl:if test="substring(.,string-length(.))=' '">
          <xsl:text> </xsl:text>
        </xsl:if>
        
-->
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template name="reformatText">
    
<xsl:param name="indent" />
    
<xsl:param name="text" />
    
<xsl:param name="sofar" />
    
<xsl:choose>
      
<xsl:when test="$sofar&gt;$wrapLength">
        
<xsl:text>
</xsl:text>
        
<xsl:value-of select="$indent" />
        
<xsl:call-template name="reformatText">
          
<xsl:with-param name="text">
            
<xsl:value-of select="$text" />
          
</xsl:with-param>
          
<xsl:with-param name="sofar">
            
<xsl:text>0</xsl:text>
          
</xsl:with-param>
          
<xsl:with-param name="indent">
            
<xsl:value-of select="$indent" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:when>
      
<xsl:when test="not(contains($text,' '))">
        
<xsl:call-template name="Text">
          
<xsl:with-param name="words">
            
<xsl:value-of select="$text" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:variable name="chunk">
            
<xsl:value-of select="substring-before($text,' ')" />
        
</xsl:variable>
        
<xsl:call-template name="Text">
          
<xsl:with-param name="words">
            
<xsl:value-of select="$chunk" />
            
<xsl:text> </xsl:text>
          
</xsl:with-param>
        
</xsl:call-template>
        
<xsl:call-template name="reformatText">
          
<xsl:with-param name="text">
            
<xsl:value-of select="substring-after($text,' ')" />
          
</xsl:with-param>
          
<xsl:with-param name="sofar">
            
<xsl:value-of select="$sofar + string-length($chunk) + 1" />
          
</xsl:with-param>
          
<xsl:with-param name="indent">
            
<xsl:value-of select="$indent" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>


  
<xsl:template name="wraptext">
    
<xsl:param name="indent" />
    
<xsl:param name="text" />
    
<xsl:param name="count">0</xsl:param>

    
<xsl:variable name="finalSpace">
      
<xsl:choose>
        
<xsl:when test="substring($text,string-length($text),1)=' '">
          
<xsl:text> </xsl:text>
        
</xsl:when>
        
<xsl:when test="substring($text,string-length($text),1)='⌤'">
          
<xsl:text> </xsl:text>
        
</xsl:when>
        
<xsl:otherwise>
          
<xsl:text />
        
</xsl:otherwise>
      
</xsl:choose>
    
</xsl:variable>
<!--
<xsl:message>my text is [<xsl:value-of select="$text"/>]</xsl:message>
<xsl:message>my space is [<xsl:value-of select="$finalSpace"/>]</xsl:message>
-->
    
<xsl:choose>
      
<xsl:when test="normalize-space($text)=''" />
      
<xsl:when test="contains($text,'⌤')">
        
<xsl:if test="$count &gt; 0">
          
<xsl:value-of select="$indent" />
          
<xsl:text> </xsl:text>
        
</xsl:if>
        
<xsl:if test="starts-with($text,' ')">
          
<xsl:text> </xsl:text>
        
</xsl:if>
        
<xsl:call-template name="Text">
          
<xsl:with-param name="words">
            
<xsl:value-of select="normalize-space(substring-before($text,'⌤'))" />
          
</xsl:with-param>
        
</xsl:call-template>
        
<!--        <xsl:if test="not(substring-after($text,'&#10;')='')">-->
        
<xsl:call-template name="lineBreak">
          
<xsl:with-param name="id">6</xsl:with-param>
        
</xsl:call-template>
        
<xsl:value-of select="$indent" />
        
<xsl:call-template name="wraptext">
          
<xsl:with-param name="indent">
            
<xsl:value-of select="$indent" />
          
</xsl:with-param>
          
<xsl:with-param name="text">
            
<xsl:value-of select="normalize-space(substring-after($text,'⌤'))" />
            
<xsl:value-of select="$finalSpace" />
          
</xsl:with-param>
          
<xsl:with-param name="count">
            
<xsl:value-of select="$count + 1" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:if test="starts-with($text,' ')">
          
<xsl:text> </xsl:text>
        
</xsl:if>
        
<xsl:if test="$count &gt; 0 and parent::*">
          
<xsl:value-of select="$indent" />
          
<xsl:text> </xsl:text>
        
</xsl:if>
        
<xsl:call-template name="Text">
          
<xsl:with-param name="words">
            
<xsl:value-of select="normalize-space($text)" />
            
<xsl:value-of select="$finalSpace" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template name="Text">
    
<xsl:param name="words" />
    
<xsl:choose>
      
<xsl:when test="contains($words,'&amp;')">
        
<xsl:value-of select="substring-before($words,'&amp;')" />
        
<xsl:text>&amp;amp;</xsl:text>
        
<xsl:call-template name="Text">
          
<xsl:with-param name="words">
            
<xsl:value-of select="substring-after($words,'&amp;')" />
          
</xsl:with-param>
        
</xsl:call-template>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:value-of select="$words" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template match="*" mode="verbatim">
    
<xsl:choose>
      
<xsl:when test="parent::xhtml:Wrapper" />
<!--      <xsl:when test="child::node()[last()]/self::text()[not(.='')] and child::node()[1]/self::text()[not(.='')]"/>-->
      
<xsl:when test="not(parent::*) or parent::teix:egXML">
        
<xsl:choose>
          
<xsl:when test="preceding-sibling::node()[1][self::text()] and following-sibling::node()[1][self::text()]" />
          
<xsl:when test="preceding-sibling::*">
            
<xsl:call-template name="lineBreak">
              
<xsl:with-param name="id">-1</xsl:with-param>
            
</xsl:call-template>
          
</xsl:when>
          
<xsl:otherwise>
            
<xsl:call-template name="newLine" />
        
<!-- <xsl:call-template name="makeIndent"/>-->
          
</xsl:otherwise>
        
</xsl:choose>
      
</xsl:when>
      
<xsl:when test="not(preceding-sibling::node())">
        
<xsl:call-template name="lineBreak">
          
<xsl:with-param name="id">-2</xsl:with-param>
        
</xsl:call-template>
        
<xsl:call-template name="makeIndent" />
      
</xsl:when>
      
<xsl:when test="preceding-sibling::node()[1]/self::*">
        
<xsl:call-template name="lineBreak">
          
<xsl:with-param name="id">1</xsl:with-param>
        
</xsl:call-template>
        
<xsl:call-template name="makeIndent" />
      
</xsl:when>
      
<xsl:when test="preceding-sibling::node()[1]/self::text()">
        
</xsl:when>
      
<xsl:otherwise>
        
<xsl:call-template name="lineBreak">
          
<xsl:with-param name="id">9</xsl:with-param>
        
</xsl:call-template>
        
<xsl:call-template name="makeIndent" />
      
</xsl:otherwise>
    
</xsl:choose>

    
<xsl:value-of disable-output-escaping="yes" select="$startElement" />
    
<xsl:text>&lt;</xsl:text>
    
<xsl:call-template name="makeElementName">
      
<xsl:with-param name="start">true</xsl:with-param>
    
</xsl:call-template>
    
<xsl:apply-templates select="@*" mode="verbatim" />
    
<xsl:if test="$showNamespaceDecls='true' or parent::teix:egXML[@rend='full']">
      
<xsl:choose>
      
<xsl:when test="not(parent::*)">
        
<xsl:apply-templates select="." mode="ns" />
      
</xsl:when>
      
<xsl:when test="parent::teix:egXML and not(preceding-sibling::*)">
        
<xsl:apply-templates select="." mode="ns" />
      
</xsl:when>
      
</xsl:choose>
    
</xsl:if>

    
<xsl:choose>
      
<xsl:when test="child::node()">
        
<xsl:text>&gt;</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endElement" />
        
<xsl:apply-templates mode="verbatim" />
        
<xsl:choose>
          
<xsl:when test="child::node()[last()]/self::text() and child::node()[1]/self::text()" />

          
<xsl:when test="not(parent::*) or parent::teix:egXML">
            
<xsl:call-template name="lineBreak">
              
<xsl:with-param name="id">23</xsl:with-param>
            
</xsl:call-template>
          
</xsl:when>
          
<xsl:when test="child::node()[last()]/self::text()[normalize-space(.)='']">
            
<xsl:call-template name="lineBreak">
              
<xsl:with-param name="id">3</xsl:with-param>
            
</xsl:call-template>
            
<xsl:call-template name="makeIndent" />
          
</xsl:when>
          
<xsl:when test="child::node()[last()]/self::comment()">
            
<xsl:call-template name="lineBreak">
              
<xsl:with-param name="id">4</xsl:with-param>
            
</xsl:call-template>
            
<xsl:call-template name="makeIndent" />
          
</xsl:when>
          
<xsl:when test="child::node()[last()]/self::*">
            
<xsl:call-template name="lineBreak">
              
<xsl:with-param name="id">5</xsl:with-param>
            
</xsl:call-template>
            
<xsl:call-template name="makeIndent" />
          
</xsl:when>
        
</xsl:choose>
        
<xsl:value-of disable-output-escaping="yes" select="$startElement" />
        
<xsl:text>&lt;/</xsl:text>
        
<xsl:call-template name="makeElementName">
          
<xsl:with-param name="start">false</xsl:with-param>
        
</xsl:call-template>
        
<xsl:text>&gt;</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endElement" />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:text>/&gt;</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endElement" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>


  
<xsl:template name="makeElementName">
    
<xsl:param name="start" />
    
<xsl:choose>

      
<xsl:when test="namespace-uri()='http://docbook.org/ns/docbook'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>dbk:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.w3.org/2001/XMLSchema'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>xsd:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.ascc.net/xml/schematron'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>sch:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.w3.org/1998/Math/MathML'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>m:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://purl.oclc.org/dsdl/nvdl/ns/structure/1.0'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>nvdl:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://relaxng.org/ns/compatibility/annotations/1.0'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>a:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>
      
<xsl:when test="namespace-uri()='http://www.w3.org/1999/xhtml'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>xhtml:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.w3.org/1999/xlink'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>xlink:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://relaxng.org/ns/structure/1.0'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>rng:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://earth.google.com/kml/2.1'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>kml:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.w3.org/2005/11/its'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>its:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.w3.org/1999/XSL/Transform'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>xsl:</xsl:text>
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.tei-c.org/ns/Examples'">
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://www.w3.org/2005/Atom'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>atom:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
            
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
      
</xsl:when>

      
<xsl:when test="namespace-uri()='http://purl.org/rss/1.0/modules/event/'">
        
<xsl:value-of disable-output-escaping="yes" select="$startNamespace" />
        
<xsl:text>ev:</xsl:text>
        
<xsl:value-of disable-output-escaping="yes" select="$endNamespace" />
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
      
</xsl:when>

      
<xsl:when test="not(namespace-uri()='')">
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
        
<xsl:if test="$start='true'">
          
<xsl:text> xmlns="</xsl:text>
          
<xsl:value-of select="namespace-uri()" />
          
<xsl:text>"</xsl:text>
          
<xsl:call-template name="lineBreak">
            
<xsl:with-param name="id">5</xsl:with-param>
          
</xsl:call-template>
          
<xsl:call-template name="makeIndent" />
        
</xsl:if>
      
</xsl:when>

      
<xsl:otherwise>
        
<xsl:value-of disable-output-escaping="yes" select="$startElementName" />
        
<xsl:value-of select="local-name(.)" />
        
<xsl:value-of disable-output-escaping="yes" select="$endElementName" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>


    
<xsl:template name="makeIndent">
      
<xsl:variable name="depth" select="count(ancestor::*[not(namespace-uri()='http://www.tei-c.org/ns/1.0')])" />
      
<xsl:call-template name="makeSpace">
        
<xsl:with-param name="d">
          
<xsl:value-of select="$depth" />
        
</xsl:with-param>
      
</xsl:call-template>
  
</xsl:template>

  
<xsl:template name="makeSpace">
    
<xsl:param name="d" />
    
<xsl:if test="number($d)&gt;1">
      
<xsl:value-of select="$spaceCharacter" />
      
<xsl:call-template name="makeSpace">
        
<xsl:with-param name="d">
          
<xsl:value-of select="$d -1" />
        
</xsl:with-param>
      
</xsl:call-template>
    
</xsl:if>
  
</xsl:template>

<xsl:template match="@*" mode="verbatim">
  
<xsl:variable name="L">
    
<xsl:for-each select="../@*">
      
<xsl:value-of select="." />
    
</xsl:for-each>
  
</xsl:variable>
    
<xsl:if test="count(../@*)&gt;$attsOnSameLine or string-length($L)&gt;$attLength or ancestor::tei:cell[not(@rend='wovenodd-col2')] or namespace-uri()='http://www.w3.org/2005/11/its' or string-length(.)+string-length(name(.)) &gt; $attLength">
    
<xsl:call-template name="lineBreak">
      
<xsl:with-param name="id">5</xsl:with-param>
    
</xsl:call-template>
    
<xsl:call-template name="makeIndent" />
  
</xsl:if>
  
<xsl:value-of select="$spaceCharacter" />
  
<xsl:value-of disable-output-escaping="yes" select="$startAttribute" />
  
<xsl:choose>
    
<xsl:when test="namespace-uri()='http://www.w3.org/2005/11/its'">
      
<xsl:text>its:</xsl:text>
    
</xsl:when>
    
<xsl:when test="namespace-uri()='http://www.w3.org/XML/1998/namespace'">
      
<xsl:text>xml:</xsl:text>
    
</xsl:when>
    
<xsl:when test="namespace-uri()='http://www.w3.org/1999/xlink'">
      
<xsl:text>xlink:</xsl:text>
    
</xsl:when>
    
<xsl:when test="namespace-uri()='http://www.example.org/ns/nonTEI'">
      
<xsl:text>my:</xsl:text>
    
</xsl:when>
    
<xsl:when test="namespace-uri()='http://relaxng.org/ns/compatibility/annotations/1.0'">
      
<xsl:text>a:</xsl:text>
    
</xsl:when>
<!--    <xsl:otherwise>
    <xsl:for-each select="namespace::*">
      <xsl:if test="not(name(.)='')">
          <xsl:value-of select="name(.)"/>
          <xsl:text>:</xsl:text>
      </xsl:if>
    </xsl:for-each>
    </xsl:otherwise>
-->
  
</xsl:choose>
  
<xsl:value-of select="local-name(.)" />
  
<xsl:value-of disable-output-escaping="yes" select="$endAttribute" />
  
<xsl:text>="</xsl:text>
  
<xsl:value-of disable-output-escaping="yes" select="$startAttributeValue" />
  
<xsl:apply-templates select="." mode="attributetext" />
  
<xsl:value-of disable-output-escaping="yes" select="$endAttributeValue" />
  
<xsl:text>"</xsl:text>
</xsl:template>

<xsl:template match="@*" mode="attributetext">
  
<xsl:choose>
    
<xsl:when test="string-length(.)&gt;$attLength and contains(.,' ')">
      
<xsl:call-template name="reformatText">
        
<xsl:with-param name="sofar">0</xsl:with-param>
        
<xsl:with-param name="indent">
          
<xsl:text> </xsl:text>
        
</xsl:with-param>
        
<xsl:with-param name="text">
          
<xsl:value-of select="normalize-space(.)" />
        
</xsl:with-param>
      
</xsl:call-template>
    
</xsl:when>
    
<xsl:otherwise>
      
<xsl:value-of select="." />
    
</xsl:otherwise>
  
</xsl:choose>
</xsl:template>


<xsl:template match="text()|comment()|processing-instruction()" mode="ns" />

<xsl:template match="*" mode="ns">
  
<xsl:param name="list" />
  
<xsl:variable name="used">
    
<xsl:for-each select="namespace::*">
      
<xsl:variable name="ns" select="." />
      
<xsl:choose>
        
<xsl:when test="contains($list,$ns)" />
        
<xsl:when test=".='http://relaxng.org/ns/structure/1.0'" />
        
<xsl:when test=".='http://www.w3.org/2001/XInclude'" />
        
<xsl:when test=".='http://www.tei-c.org/ns/Examples'" />
        
<xsl:when test=".='http://www.ascc.net/xml/schematron'" />
        
<xsl:when test=".='http://relaxng.org/ns/compatibility/annotations/1.0'" />
        
<xsl:when test="name(.)=''" />
        
<xsl:when test=".='http://www.w3.org/XML/1998/namespace'" />
        
<xsl:otherwise>
          
<xsl:call-template name="lineBreak">
            
<xsl:with-param name="id">22</xsl:with-param>
          
</xsl:call-template>
          
<xsl:text>   </xsl:text>
          
<xsl:text>xmlns:</xsl:text>
          
<xsl:value-of select="name(.)" />
          
<xsl:text>="</xsl:text>
          
<xsl:value-of select="." />
          
<xsl:text>"</xsl:text>
        
</xsl:otherwise>
      
</xsl:choose>
    
</xsl:for-each>
    
</xsl:variable>
  
<xsl:copy-of select="$used" />
  
<xsl:apply-templates mode="ns">
    
<xsl:with-param name="list">
      
<xsl:value-of select="$list" />
      
<xsl:value-of select="$used" />
    
</xsl:with-param>
  
</xsl:apply-templates>
</xsl:template>


<!-- alternative tools for line-breaking -->

  
<xsl:template name="breakline">
    
<xsl:choose>
      
<xsl:when test="string-length(.)&lt;$wrapLength">
        
<xsl:value-of select="." />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:variable name="words" select="estr:tokenize(.)" />
        
<xsl:apply-templates mode="word" select="$words[1]">
          
<xsl:with-param name="len" select="0" />
        
</xsl:apply-templates>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template match="token" mode="word">
    
<xsl:param name="len" />
    
<xsl:choose>
      
<xsl:when test="$len +string-length(.) &gt; $wrapLength">
        
<xsl:text>
        
</xsl:text>
        
<xsl:value-of select="." />
        
<xsl:text> </xsl:text>
        
<xsl:if test="following-sibling::token">
          
<xsl:apply-templates mode="word" select="following-sibling::token[1]">
            
<xsl:with-param name="len" select="8" />
          
</xsl:apply-templates>
        
</xsl:if>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:value-of select="." />
        
<xsl:text> </xsl:text>
        
<xsl:if test="following-sibling::token">
          
<xsl:apply-templates mode="word" select="following-sibling::token[1]">
            
<xsl:with-param name="len" select="$len + string-length(.)" />
          
</xsl:apply-templates>
        
</xsl:if>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template name="italicize" />

  
<xsl:template match="token" mode="commentline">
    
<xsl:call-template name="italicize">
      
<xsl:with-param name="text">
        
<xsl:value-of select="translate(.,' ','')" />
      
</xsl:with-param>
    
</xsl:call-template>
    
<xsl:if test="following-sibling::token">
      
<xsl:text>
</xsl:text>
      
<xsl:choose>
        
<xsl:when test="contains(.,'--&gt;')">
          
<xsl:apply-templates mode="normalline" select="following-sibling::token[1]" />
        
</xsl:when>
        
<xsl:otherwise>
          
<xsl:apply-templates mode="commentline" select="following-sibling::token[1]" />
        
</xsl:otherwise>
      
</xsl:choose>
    
</xsl:if>
  
</xsl:template>

  
<xsl:template match="token" mode="normalline">
    
<xsl:choose>
      
<xsl:when test="contains(.,'&lt;!--')">
        
<xsl:call-template name="italicize">
          
<xsl:with-param name="text">
            
<xsl:value-of select="translate(.,' ','')" />
          
</xsl:with-param>
        
</xsl:call-template>
        
<xsl:if test="following-sibling::token">
          
<xsl:text>
          
</xsl:text>
          
<xsl:choose>
            
<xsl:when test="contains(.,'--&gt;')">
              
<xsl:apply-templates mode="normalline" select="following-sibling::token[1]" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:apply-templates mode="commentline" select="following-sibling::token[1]" />
            
</xsl:otherwise>
          
</xsl:choose>
        
</xsl:if>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:call-template name="breakline" />
        
<xsl:if test="following-sibling::token">
          
<xsl:text>
          
</xsl:text>
          
<xsl:apply-templates mode="normalline" select="following-sibling::token[1]" />
        
</xsl:if>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>

  
<xsl:template match="token" mode="verbatimline">
    
<xsl:call-template name="breakline" />
    
<xsl:if test="following-sibling::token">
      
<xsl:text>
</xsl:text>
      
<xsl:apply-templates mode="verbatimline" select="following-sibling::token[1]" />
    
</xsl:if>
  
</xsl:template>


</xsl:stylesheet>






































v