<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xd="http:www.pnp-software.com/XSLTdoc" xmlns:util="http://www.pnp-software.com/util" xmlns:ax="http://control.ee.ethz.ch/XWeaver/AspectX" exclude-result-prefixes="#all" version="2.0">
      
      
<xd:doc type="stylesheet">
        This XSL program processes the AspectXdoc configuration 
        file and generates the documentation for the aspect programs.
        
<xd:author>A. Pasetti, I. Birrer</xd:author>
        
<xd:cvsId>$Id: AspectXdoc.xsl 48 2005-06-17 08:38:35Z ibirrer $</xd:cvsId>
        
<xd:copyright>2004, P&amp;P Software GmbH</xd:copyright>
      
</xd:doc>
      
      
<!-- <xsl:output method="xml"/> -->
      
<xsl:include href="util.xsl" />
      
      
<xsl:include href="aspectXdocRules/GenerateBanner.xsl" />
      
<xsl:include href="aspectXdocRules/GenerateAspectPage.xsl" />
      
<xsl:include href="aspectXdocRules/GenerateGroupPage.xsl" />
      
<xsl:include href="verbatim/xmlverbatimwrapper.xsl" />
    
      
<xsl:variable name="targetDirVar" select="/AspectXdocConfig/TargetDir" />
      
<xsl:variable name="sourceDirVar" select="/AspectXdocConfig/SourceDir" />
      
<xsl:variable name="targetDir" select="util:normalizeFolder(resolve-uri( $targetDirVar, base-uri(/) ))" />
      
<xsl:variable name="sourceDir" select="util:normalizeFolder(resolve-uri( $sourceDirVar, base-uri(/) ))" />
      
<xsl:variable name="whiteSpace" select="' '" />
    
<!--================================================================================== -->    
    
<xd:doc>
        Root template. Generates dabase and calls subtemplates to generate the pages. 
        The subtemplates called are listed below:
        
<ul>
            
<li>GenerateEntryPage</li>
            
<li>GenerateAspectEntryPage</li>
            
<li>GenerateGroupEntryPage</li>
            
<li>GenerateAdviceEntryPage</li>
            
<li>GenerateFileEntryPage</li>
            
<li>GenerateAlphabeticalList</li>
            
<li>GenerateAspectPage (for each aspect)</li>
            
<li>GenerateAspectSorceBrwsingPage (for all aspects)</li>
            
<li>GenerateGroupPage (for each group)</li>
        
</ul>
    
</xd:doc>
    
<xsl:template match="/AspectXdocConfig">
             
<xsl:variable name="Database_Root">
               
<xsl:call-template name="GenerateDatabase" />
             
</xsl:variable>
             
             
<xsl:variable name="Database" select="$Database_Root/AspectXdocDatabase" />            
             
             
<!-- Variable for the AspectX -->
             
<xsl:variable name="configDoc" select="." />

             
<xsl:call-template name="GenerateEntryPage" />
             
<xsl:call-template name="GenerateAspectEntryPage">
               
<xsl:with-param name="Database" select="$Database" />
             
</xsl:call-template>
             
<xsl:call-template name="GenerateGroupEntryPage" />
             
<xsl:call-template name="GeneratePointcutEntryPage">
               
<xsl:with-param name="Database" select="$Database" />
             
</xsl:call-template>
             
<xsl:call-template name="GenerateAdviceEntryPage">
               
<xsl:with-param name="Database" select="$Database" />
             
</xsl:call-template>
             
<xsl:call-template name="GenerateFileEntryPage">
               
<xsl:with-param name="Database" select="$Database" />
             
</xsl:call-template>
             
<xsl:call-template name="GenerateAlphabeticalList">
               
<xsl:with-param name="Database" select="$Database" />
             
</xsl:call-template>
             
             
<xsl:for-each-group group-by="@name" select="$Database/Entry[@type='aspect']">
                 
<xsl:variable name="targetFile" select="concat($targetDir,'Aspect_',@name,'.html')" />
                 ++ Generating page for aspect 
<xsl:value-of select="@name" /> in file <xsl:value-of select="$targetFile" />
                 
<xsl:result-document href="{$targetFile}" omit-xml-declaration="yes" method="html">  
                    
<xsl:call-template name="GenerateAspectPage">
                        
<xsl:with-param name="aspectName" select="@name" />
                        
<xsl:with-param name="Database" select="$Database" />
                        
<xsl:with-param name="configDoc" select="$configDoc" />
                    
</xsl:call-template>     
                  
</xsl:result-document>
             
</xsl:for-each-group>
             
             
<xsl:for-each-group group-by="@name" select="$Database/Entry[@type='aspect']">
                 
<xsl:variable name="targetFile" select="concat($targetDir,'Aspect_',@name,'.src.html')" />
                 ++ Generating source brwosing page for aspect 
<xsl:value-of select="@name" /> in file <xsl:value-of select="$targetFile" />
                  
<xsl:result-document href="{$targetFile}" omit-xml-declaration="yes" method="html">  
                    
<xsl:apply-templates select="document(@uri)" mode="xmlverbwrapper">
                      
<xsl:with-param name="css-stylesheet">
                        
<xsl:value-of select="'xmlverbatim.css'" />
                      
</xsl:with-param>
                    
</xsl:apply-templates>
                  
</xsl:result-document>
             
</xsl:for-each-group>

             
<xsl:for-each select="Group">
                 
<xsl:variable name="targetFile" select="concat($targetDir,'Group_',@name,'.html')" />  
                 ++ Generating page for group 
<xsl:value-of select="@name" /> in file <xsl:value-of select="$targetFile" />
                 
<xsl:result-document href="{$targetFile}" omit-xml-declaration="yes" method="html">  
                    
<xsl:call-template name="GenerateGroupPage">
                        
<xsl:with-param name="groupName" select="@name" />
                        
<xsl:with-param name="Database" select="$Database" />
                        
<xsl:with-param name="configDoc" select="$configDoc" />
                    
</xsl:call-template>     
                  
</xsl:result-document>
             
</xsl:for-each>
       
       
</xsl:template>   

    
<xd:doc>
        This template processes the top-level element of the AspectXdoc configuration document.
        It generates a database that consists of a list of entries with their references. Database entries are names that
        can be referenced through hyperlinks in the AspectX documentation. The database entries are the names of
        files, of aspects, of advices, of pointcuts, or of groups.
    
</xd:doc>
    
<xsl:template name="GenerateDatabase">
              
<AspectXdocDatabase>
                  
<xsl:for-each select="Aspect">
                        
<xsl:variable name="inputFile" select="resolve-uri(@file, $sourceDir)" />
                        
<xsl:variable name="inputAspect" select="document($inputFile)/ax:aspect" />
                        
<xsl:variable name="unqualifiedInputFileName" select="util:getFile($inputFile)" />
                        
<xsl:variable name="relInputFileName" select="concat(util:getRelativeUri($targetDir, $sourceDir), @file)" />           

                        
<xsl:element name="Entry">
                              
<xsl:attribute name="name"><xsl:value-of select="$inputAspect/@name" /></xsl:attribute>
                              
<xsl:attribute name="uri"><xsl:value-of select="$inputFile" /></xsl:attribute>
                              
<xsl:attribute name="file"><xsl:value-of select="$relInputFileName" /></xsl:attribute>
                              
<xsl:attribute name="type"><xsl:value-of select="'aspect'" /></xsl:attribute>
                              
<xsl:attribute name="group"><xsl:value-of select="@group" /></xsl:attribute>
                              
<xsl:attribute name="aspect"><xsl:value-of select="$inputAspect/@name" /></xsl:attribute>
                              
<xsl:attribute name="desc"><xsl:value-of select="substring-before($inputAspect/ax:description,'.')" /></xsl:attribute>
                        
</xsl:element>
                        
<xsl:element name="Entry">
                              
<xsl:attribute name="name"><xsl:value-of select="$unqualifiedInputFileName" /></xsl:attribute>
                              
<xsl:attribute name="uri"><xsl:value-of select="$inputFile" /></xsl:attribute>
                              
<xsl:attribute name="file"><xsl:value-of select="$relInputFileName" /></xsl:attribute>
                              
<xsl:attribute name="type"><xsl:value-of select="'file'" /></xsl:attribute>
                              
<xsl:attribute name="aspect"><xsl:value-of select="$inputAspect/@name" /></xsl:attribute>
                        
</xsl:element>
                        
<xsl:for-each select="$inputAspect/ax:advice">
                              
<xsl:element name="Entry">
                                    
<xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>
                                    
<xsl:attribute name="uri"><xsl:value-of select="$inputFile" /></xsl:attribute>
                                    
<xsl:attribute name="file"><xsl:value-of select="$relInputFileName" /></xsl:attribute>
                                    
<xsl:attribute name="type"><xsl:value-of select="'advice'" /></xsl:attribute>
                                    
<xsl:attribute name="aspect"><xsl:value-of select="../@name" /></xsl:attribute>
                                    
<xsl:attribute name="desc"><xsl:value-of select="substring-before(ax:description,'.')" /></xsl:attribute>
                              
</xsl:element>
                        
</xsl:for-each>
                        
<xsl:for-each select="$inputAspect/ax:pointcut">
                              
<xsl:element name="Entry">
                                    
<xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>
                                    
<xsl:attribute name="uri"><xsl:value-of select="$inputFile" /></xsl:attribute>
                                    
<xsl:attribute name="file"><xsl:value-of select="$relInputFileName" /></xsl:attribute>
                                    
<xsl:attribute name="type"><xsl:value-of select="'pointcut'" /></xsl:attribute>
                                    
<xsl:attribute name="aspect"><xsl:value-of select="../@name" /></xsl:attribute>
                                    
<xsl:attribute name="desc"><xsl:value-of select="substring-before(ax:description,'.')" /></xsl:attribute>
                              
</xsl:element>
                        
</xsl:for-each>   
                        
<xsl:for-each select="Group">
                        
<xsl:element name="Entry">
                              
<xsl:attribute name="name"><xsl:value-of select="@name" /></xsl:attribute>
                              
<xsl:attribute name="uri"><xsl:value-of select="$inputFile" /></xsl:attribute>
                              
<xsl:attribute name="type"><xsl:value-of select="'group'" /></xsl:attribute>
                              
<xsl:attribute name="desc"><xsl:value-of select="substring-before(.,'.')" /></xsl:attribute>
                        
</xsl:element>
                        
</xsl:for-each>
                  
</xsl:for-each>
              
</AspectXdocDatabase>
    
</xsl:template>

    
<xd:doc>
        This template processes the top-level element of the AspectXdoc configuration document.
        It generates the entry page for the aspect documentation. The name of the file where the entry page is
        stored is hardcoded and equal to "index.html".
    
</xd:doc>
    
<xsl:template name="GenerateEntryPage">
         
<xsl:variable name="TargetFile" select="concat($targetDir,'index.html')" />     
            ++ Generating entry page in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title><xsl:value-of select="Header" /></title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'1'" /></xsl:call-template>
                
<h1><xsl:value-of select="Title" /></h1>
                
<p><xsl:apply-templates select="Introduction" /></p>
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

    
<xd:doc>
      This template generates the entry page for the aspect part of the documentation. 
      The name of the file where the entry page is stored is hardcoded and equal to "aspects.html".
    
</xd:doc>
    
<xsl:template name="GenerateAspectEntryPage">
        
<xsl:param name="Database" />
         
<xsl:variable name="TargetFile" select="concat($targetDir,'aspects.html')" />     
            ++ Generating aspect entry page in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title>Aspect Entry Page</title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'2'" /></xsl:call-template>
                
<h1>Aspect Programs</h1>
                  This is an alphabetical list of all the aspect programs in this documentation set:
                  
<p />
                  
<table border="0" cellpadding="0" cellspacing="0" width="100%">
                  
<tr><td /></tr>
                  
<xsl:for-each select="$Database/Entry[@type='aspect']">
                        
<xsl:sort select="@name" />
                        
<tr><td class="memItemLeft" nowrap="nowrap" align="right" valign="top"><xsl:value-of select="$whiteSpace" /></td>
                        
<td class="memItemRight" valign="bottom"><a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html</xsl:attribute><xsl:value-of select="@name" /></a>
                        
</td></tr>
                        
<tr><td class="mdescLeft"><xsl:value-of select="$whiteSpace" /></td><td class="mdescRight"><em><xsl:value-of select="@desc" /></em><br /></td></tr>
                  
</xsl:for-each>
                  
</table>
                  
<br />
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

    
<xd:doc>
        This template generates the entry page for the group part of the documentation. 
        The name of the file where the group page is stored is hardcoded and equal to "groups.html".
    
</xd:doc>
    
<xsl:template name="GenerateGroupEntryPage">
         
<xsl:variable name="TargetFile" select="concat($targetDir,'groups.html')" />     
            ++ Generating group entry page in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title>Group Entry Page</title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'3'" /></xsl:call-template>
                
<h1>Aspect Groups</h1>
                  This is an alphabetical list of all the aspect groups in this documentation set:
                  
<p />
                  
<table border="0" cellpadding="0" cellspacing="0" width="100%">
                  
<tr><td /></tr>
                  
<xsl:for-each select="Group">
                        
<xsl:sort select="@name" />
                        
<tr><td class="memItemLeft" nowrap="nowrap" align="right" valign="top"><xsl:value-of select="$whiteSpace" /></td>
                        
<td class="memItemRight" valign="bottom"><a class="el"><xsl:attribute name="href">Group_<xsl:value-of select="@name" />.html</xsl:attribute><xsl:value-of select="@name" /></a>
                        
</td></tr>
                        
<tr><td class="mdescLeft"><xsl:value-of select="$whiteSpace" /></td><td class="mdescRight"><em><xsl:value-of select="substring-before(.,'.')" /></em><br /></td></tr>
                  
</xsl:for-each>
                  
</table>
                  
<br />
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

    
<xd:doc>
      This template generates the entry page for the pointcut part of the documentation. The name of the file 
      where the pointcut page is stored is hardcoded and equal to "pointcuts.html".
    
</xd:doc>
    
<xsl:template name="GeneratePointcutEntryPage">
      
<xsl:param name="Database" />
         
<xsl:variable name="TargetFile" select="concat($targetDir,'pointcuts.html')" />     
            ++ Generating pointcut entry page in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title>Pointcut Entry Page</title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'4'" /></xsl:call-template>
                
<h1>Pointcuts</h1>
                  This is an alphabetical list of all the pointcuts in this documentation set:
                  
<p />
                  
<table border="0" cellpadding="0" cellspacing="0" width="100%">
                  
<tr><td /></tr>
                  
<xsl:for-each select="$Database/Entry[@type='pointcut']">
                        
<xsl:sort select="@name" />
                        
<tr><td class="memItemLeft" nowrap="nowrap" align="right" valign="top"><a class="e2"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html</xsl:attribute><xsl:value-of select="@aspect" /></a></td>
                        
<td class="memItemRight" valign="bottom"><a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html#<xsl:value-of select="@name" /></xsl:attribute><xsl:value-of select="@name" /></a>
                        
</td></tr>
                        
<tr><td class="mdescLeft"><xsl:value-of select="$whiteSpace" /></td><td class="mdescRight"><em><xsl:value-of select="@desc" /></em><br /></td></tr>
                  
</xsl:for-each>
                  
</table>
                  
<br />
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

    
<xd:doc>
        This template generates the entry page for the advice part of the documentation. The name of the file 
        where the advice page is stored is hardcoded and equal to "advices.html".
    
</xd:doc>
    
<xsl:template name="GenerateAdviceEntryPage">
      
<xsl:param name="Database" />
         
<xsl:variable name="TargetFile" select="concat($targetDir,'advices.html')" />     
            ++ Generating advice entry page in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title>Advice Entry Page</title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'5'" /></xsl:call-template>
                
<h1>Advices</h1>
                  This is an alphabetical list of all the advices in this documentation set:
                  
<p />
                  
<table border="0" cellpadding="0" cellspacing="0" width="100%">
                  
<tr><td /></tr>
                  
<xsl:for-each select="$Database/Entry[@type='advice']">
                        
<xsl:sort select="@name" />
                        
<tr><td class="memItemLeft" nowrap="nowrap" align="right" valign="top"><a class="e2"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html</xsl:attribute><xsl:value-of select="@aspect" /></a></td>
                        
<td class="memItemRight" valign="bottom"><a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html#<xsl:value-of select="@name" /></xsl:attribute><xsl:value-of select="@name" /></a>
                        
</td></tr>
                        
<tr><td class="mdescLeft"><xsl:value-of select="$whiteSpace" /></td><td class="mdescRight"><em><xsl:value-of select="@desc" /></em><br /></td></tr>
                  
</xsl:for-each>
                  
</table>
                  
<br />
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

    
<xd:doc>
      This template generates the entry page for the files part of the documentation. The name of the file 
      where the files page is stored is hardcoded and equal to "files.html".
    
</xd:doc>
    
<xsl:template name="GenerateFileEntryPage">
      
<xsl:param name="Database" />
         
<xsl:variable name="TargetFile" select="concat($targetDir,'files.html')" />     
            ++ Generating file entry page in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title>Files Entry Page</title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'3'" /></xsl:call-template>
                
<h1>Files</h1>
                  This is an alphabetical list of all the files in this documentation set:
                  
<p />
                  
<table border="0" cellpadding="0" cellspacing="0" width="100%">
                  
<tr><td /></tr>
                  
<xsl:for-each select="$Database/Entry[@type='file']">
                        
<xsl:sort select="@name" />
                        
<tr><td class="memItemLeft" nowrap="nowrap" align="left" valign="top" width="5%"><a class="el"><xsl:attribute name="href"><xsl:value-of select="@file" /></xsl:attribute><xsl:value-of select="@name" /></a> 
                        
</td>
                        
<td class="memItemRight" valign="bottom"> 
                              
<em>(<a class="e2"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html</xsl:attribute><xsl:value-of select="@aspect" /></a>  aspect)</em>
                        
</td></tr>
                  
</xsl:for-each>
                  
</table>
                  
<br />
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

    
<xd:doc>
      This template generates the alphabetical list of the items in the database. The name of the file 
      where the alphabetical list is stored is hardcoded and equal to "alphabeticalList.html".
    
</xd:doc>
    
<xsl:template name="GenerateAlphabeticalList">
      
<xsl:param name="Database" />
         
<xsl:variable name="TargetFile" select="concat($targetDir,'alphabeticalList.html')" />     
            ++ Generating alphabetical list in file 
<xsl:value-of select="$TargetFile" />
          
<xsl:result-document href="{$TargetFile}" omit-xml-declaration="yes" method="html">  
             
<html>
                
<head>
                  
<title>Alphabetical List</title>
                  
<link href="AspectXdoc.css" rel="stylesheet" type="text/css" />
                
</head>
                
<body>
                
<xsl:call-template name="GenerateBanner"><xsl:with-param name="index" select="'6'" /></xsl:call-template>
                
<h1>Alphabetical List</h1>
                  This is an alphabetical list of all the items in the AspectXdoc database:
                  
<p />
                  
<table border="0" cellpadding="0" cellspacing="0" width="100%">
                  
<tr><td /></tr>
                  
<xsl:for-each select="$Database/Entry">
                        
<xsl:sort select="@name" />
                        
<tr><td class="memItemLeft" nowrap="nowrap" align="left" valign="top" width="5%">
                              
<xsl:choose>
                                    
<xsl:when test="@type='aspect'">
                                          
<a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html</xsl:attribute><xsl:value-of select="@aspect" /></a> 
                                    
</xsl:when>
                                    
<xsl:when test="@type='advice'">
                                          
<a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html#<xsl:value-of select="@name" /></xsl:attribute><xsl:value-of select="@name" /></a> 
                                    
</xsl:when>
                                    
<xsl:when test="@type='pointcut'">
                                          
<a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html#<xsl:value-of select="@name" /></xsl:attribute><xsl:value-of select="@name" /></a> 
                                    
</xsl:when>
                                    
<xsl:when test="@type='file'">
                                          
<a class="el"><xsl:attribute name="href"><xsl:value-of select="@file" /></xsl:attribute><xsl:value-of select="@name" /></a> 
                                    
</xsl:when>
                              
</xsl:choose>
                        
</td>
                        
<td class="memItemRight" valign="bottom"> 
                              
<xsl:choose>
                                    
<xsl:when test="(@type='pointcut') or (@type='advice')">
                                          
<em>(<xsl:value-of select="@type" /> in <a class="el"><xsl:attribute name="href">Aspect_<xsl:value-of select="@aspect" />.html</xsl:attribute><xsl:value-of select="@aspect" /></a> aspect)</em>
                                    
</xsl:when>
                                    
<xsl:when test="@type='file'">
                                          
<em>(file)</em>
                                    
</xsl:when>
                                    
<xsl:when test="@type='aspect'">
                                          
<em>(aspect)</em>
                                    
</xsl:when>
                              
</xsl:choose>
                        
</td></tr>
                  
</xsl:for-each>
                  
</table>
                  
<br />
                  
<br />
                
<center><b><xsl:apply-templates select="Footer" /></b></center>
                
</body>
             
</html>
         
</xsl:result-document>
    
</xsl:template>

   
<xd:doc>
     Residual template rule that catches nodes that are not covered by other rules.
   
</xd:doc>
    
<xsl:template match="*|@*|text()">
       
<xsl:copy>
           
<xsl:apply-templates select="*|@*|text()" />
       
</xsl:copy>
    
</xsl:template>

</xsl:stylesheet>






































v