Listing 1:Sample circuit.xml

<circuit access="public">
-
	<fuseaction name="showCatalog">
<xfa name="lnkProductName" value="browse.showProduct"/>
<xfa name="lnkAdmin" value="Admin.showNewProductForm"/>
<include template="qryGetCatalog"/>
<include template="dspCatalog"/>
</fuseaction>
-
	<fuseaction name="showProduct">
<xfa name="lnkBackToCatalog" value="browse.showCatalog"/>
<include template="qryGetProduct"/>
<include template="dspProduct"/>
</fuseaction>
</circuit>


Listing 2: FB4CircuitChecklist.xsl

<xsl:stylesheet version="1.0">
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"/>
-
	<xsl:template match="/">
-
	<html>
-
	<head>
<title>Fusebox Project Management Checklist</title>
-
	<style>

        th { font-family: Arial, Helvetica, sans-serif;
	             font-size: 8pt;
	           font-weight: 700; }
	      td { font-family: Arial, Helvetica, sans-serif;
	             font-size: 8pt;
	           font-weight: 400; }

</style>
</head>
-
	<body>
-
	<div align="center" style="font-family: Arial; font-weight: 700; font-size: 14pt;">

      Fusebox Circuit Checklist - @@@[Circuit Directory]

</div>
<xsl:apply-templates select="circuit"/>
<br style="page-break-after:always;"/>
</body>
</html>
</xsl:template>
-
	<xsl:template match="circuit">
-
	<table border="1" align="center" width="100%">
<xsl:apply-templates select="fuseaction"/>
</table>
</xsl:template>
-
	<xsl:template match="fuseaction">
-
	<tr bgcolor="#e0e0e0">
<th width="10">
    _
    </th>
-
	<th align="left" colspan="5">

      Fuseaction: 
<xsl:value-of select="@name"/>
</th>
</tr>
-
	<tr>
<th align="left" colspan="2">
      Fuse Name
    </th>
<th align="left">
      Date Coded
    </th>
<th align="left">
      Coded By
    </th>
<th align="left">
      Unit Test Date
    </th>
<th align="left">
      Tested By
    </th>
</tr>
<xsl:apply-templates select="include"/>
</xsl:template>
-
	<xsl:template match="include">
-
	<tr>
<th width="10">
    _
    </th>
-
	<td align="left">
<xsl:value-of select="@template"/>
</td>
<td align="left">
      |
    </td>
<td align="left">
      |
    </td>
<td align="left">
      |
    </td>
<td align="left">
      |
    </td>
</tr>
</xsl:template>
</xsl:stylesheet>

Listing 3: Sample Fusedoc

<fusedoc fuse="dspProduct.cfm" version="2.0" language="ColdFusion">
<responsibilities>
		I display details for the specified product.
	</responsibilities>
-
	<properties>
<history type="create" email="jeff@grokfusebox.com"/>
<property name="dateCoded" value="2006-08-12"/>
<property name="dateUnitTested" value="2006-08-13"/>
</properties>
-
	<io>
-
	<in>
<string name="xfa.lnkBackToCatalog"/>
-
	<recordset name="qryProductDetails">
<number name="productID" precision="integer"/>
<string name="productName"/>
<string name="productDescription"/>
<string name="imageFile"/>
<number name="price"/>
</recordset>
</in>
-
	<out>
<number name="productID" oncondition="XFA.lnkProductName"/>
</out>
</io>
</fusedoc>

Listing 4: FB4CodingProgress.cfm

<!---
<fusedoc fuse="FB4CodingProgress.cfm" language="ColdFusion" version="2.0">
  <responsibilites>
    I read an application's fuse files, starting at the current directory,
    and produce a coding progress report in the specified output file.
  </responsibilities>
  <properties>
    <history date="11 Aug 2006" author="Jeff Peters" email="jeff@grokfusebox.com" type="create">
      Version 1.0
    </history>
  </properties>
  <io>
    <in>
      <string name="thisDir" scope="attributes" optional="true" default="current path" />
      <boolean name="recurse" scope="attributes" optional="true" default="yes" />
			<string name="fusePrefixes" optional="true" default="dsp,act,qry" />
			<string name="outputFile" optional="true" default="#attributes.thisDir#FB4CodingProgressOutput.html" />
			<string name="indenter" optional="true" default="" />
    </in>
    <out>
    </out>
  </io>
</fusedoc>
--->
<cfparam name="attributes.thisDir" default="#GetDirectoryFromPath(GetCurrentTemplatePath())#">
<cfparam name="attributes.xslFile" default="#attributes.thisDir#FB4CodingProgress.xsl">
<cfset slash = "/">
<cfif Find("\",attributes.thisDir)>
  <cfset slash = "\">
</cfif>
<cfparam name="attributes.recurse" default="yes">
<cfparam name="attributes.fusePrefixes" default="dsp,act,qry">
<cfparam name="attributes.outputFile" default="#attributes.thisDir#FB4CodingProgressOutput.html">
<cfparam name="attributes.indenter" default="">
<cfparam name="attributes.topLevel" default="Yes">
<cfset codedCount = 0>
<cfset unitTestedCount = 0>
<cfset totalCount = 0>
<cfparam name="request.grandCodedCount" default="0">
<cfparam name="request.grandUnitTestedCount" default="0">
<cfparam name="request.grandTotalCount" default="0">

<cffile action="append"   file="#attributes.outputFile#" 
output="<hr /><span id=""circuitName"">#attributes.indenter#Circuit: #ListLast(attributes.thisDir,slash)#</span><br />"
		addnewline="true">

<!--- Read directory entries into array --->
<cfdirectory name="qryThisDir"
           action="LIST"
        directory="#attributes.thisDir#">

<!--- For each entry in files array: --->
<cfloop query="qryThisDir">
  <!--- Select based on entry type: --->
  <cfswitch expression="#Trim(qryThisDir.type)#">
    <cfcase value="File">
      <!--- If it's a fuse file, transform it and write it to the output file --->
      <cfif ListFindNoCase(attributes.fusePrefixes,Left(qryThisDir.Name,3))>
	      <cfset totalCount = totalCount + 1>
        <cfset dirName = ListLast(attributes.thisDir,"\")>
        <cffile action="read" file="#attributes.thisDir#\#qryThisDir.Name#" variable="fuseFile">
				<!--- Strip out the Fusedoc --->
				<cfset inFusedoc = false>
				<cfset fusedocText = "">
				<cfloop from="1" to="#ListLen(fuseFile,Chr(10))#" index="i">
					<cfif FindNoCase("<fusedoc",ListGetAt(fuseFile,i,Chr(10)))>
						<cfset inFusedoc = true>
					</cfif>
					<cfif inFusedoc>
						<cfset fusedocText = fusedocText & ListGetAt(fuseFile,i,Chr(10))>
					</cfif>
					<cfif FindNoCase("</fusedoc",ListGetAt(fuseFile,i,Chr(10)))>
						<cfset inFusedoc = false>
					</cfif>
				</cfloop>
		    <cffile action="read" file="#attributes.xslFile#" variable="xslCode">
				<cftry>
          <cfset newHTML = XMLTransform(fusedocText, xslCode)>
          <cfset newHTML = Replace(newHTML,"<hr />","<hr />#attributes.indenter#","ALL")>
          <cfset newHTML = Replace(newHTML,"Fuse:","#attributes.indenter#Fuse:","ALL")>
          <cfset newHTML = Replace(newHTML,"--","#attributes.indenter#--","ALL")>
					<cfif FindNoCase("coded",newHTML)>
					  <cfset codedCount = codedCount + 1>
					</cfif>
					<cfif FindNoCase("unit",newHTML)>
					  <cfset unitTestedCount = unitTestedCount + 1>
					</cfif>

  				<cffile action="append"  file="#attributes.outputFile#" output="#newHTML#" addnewline="true">
          <cfcatch type="Expression">
            <cfoutput><li>
			<b>Error in #qryThisDir.Name#:</b> #cfcatch.detail#<br /></li></cfoutput>
            <cfflush>
          </cfcatch>
        </cftry>
      </cfif>
    </cfcase>

    <cfcase value="Dir">
      </ol>
      <h4>Reading <cfoutput>#qryThisDir.Name#</cfoutput></h4>
      <ol>
      <!--- Prevent recursion of the entire hard drive --->
      <cfif not ListFind(".,..",qryThisDir.Name) AND attributes.recurse>
        <!--- If directory entry, recurse with main   --->
        <cf_FB4CodingProgress thisDir="#attributes.thisDir#\#qryThisDir.Name#"
                              recurse="#attributes.recurse#"
                              xslFile="#attributes.xslFile#"
                         fusePrefixes="#attributes.fusePrefixes#"
                           outputFile="#attributes.outputFile#"
                             indenter="#attributes.indenter#  "
                             topLevel="No">
      </cfif>
    </cfcase>
    <cfdefaultcase>
      No handler for #qryThisDir.type#.
    </cfdefaultcase>
  </cfswitch>
</cfloop>

<cfset outStr = "<div id=""totals"">#attributes.indenter##totalCount# fuses in this circuit.<br />" >
<cfif totalCount GT 0>
	<cffile action="append"   file="#attributes.outputFile#" output="#outStr#" addnewline="true">
	<cfset outStr = "#attributes.indenter##codedCount# (#NumberFormat(codedCount/totalCount*100,"00.00")#%) have
	 been coded.<br />" >
	<cffile action="append"   	file="#attributes.outputFile#" output="#outStr#" addnewline="true">
	<cfset outStr = "#attributes.indenter##unitTestedCount# (#NumberFormat(unitTestedCount/totalCount*100,"00.00")#%) have been unit tested.<br />">
	<cffile action="append"   file="#attributes.outputFile#" output="#outStr#</div>" addnewline="true">
	<cfset request.grandCodedCount = request.grandCodedCount + codedCount>
	<cfset request.grandUnitTestedCount = request.grandUnitTestedCount + unitTestedCount>
	<cfset request.grandTotalCount = request.grandTotalCount + totalCount>
</cfif>
<cffile action="append"   file="#attributes.outputFile#" output="<hr />" addnewline="true">

<cfif attributes.topLevel EQ "Yes">
  <cfset outStr = "<div id=""grandTotals"">#attributes.indenter##request.grandTotalCount# fuses in this
   application.<br />" >
	<cfif request.grandTotalCount GT 0>
		<cffile action="append"   file="#attributes.outputFile#" output="#outStr#" addnewline="true">
		<cfset outStr = "#attributes.indenter##request.grandCodedCount#
		 (#NumberFormat(request.grandCodedCount/request.grandTotalCount*100,"00.00")#%) have been coded.<br />" >
		<cffile action="append"   file="#attributes.outputFile#" output="#outStr#" addnewline="true">
		<cfset outStr = "#attributes.indenter##request.grandUnitTestedCount#
		 (#NumberFormat(request.grandUnitTestedCount/request.grandTotalCount*100,"00.00")#%) have been unit
		  tested.<br />">
		<cffile action="append" file="#attributes.outputFile#" output="#outStr#</div>" addnewline="true">
	</cfif>
</cfif>

Listing 5: FB4CodingProgress.xsl

<xsl:stylesheet version="1.0">
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"/>
-
	<xsl:template match="/">
-
	<html>
-
	<head>
<title>Fusebox Project Management Checklist</title>
-
	<style>

        th { font-family: Arial, Helvetica, sans-serif;
	             font-size: 8pt;
	           font-weight: 700; }
	      td { font-family: Arial, Helvetica, sans-serif;
	             font-size: 8pt;
	           font-weight: 400; }

</style>
</head>
-
	<body>
-
	<div align="center" style="font-family: Arial; font-weight: 700; font-size: 14pt;">

      Fusebox Circuit Checklist - @@@[Circuit Directory]

</div>
<xsl:apply-templates select="circuit"/>
<br style="page-break-after:always;"/>
</body>
</html>
</xsl:template>
-
	<xsl:template match="circuit">
-
	<table border="1" align="center" width="100%">
<xsl:apply-templates select="fuseaction"/>
</table>
</xsl:template>
-
	<xsl:template match="fuseaction">
-
	<tr bgcolor="#e0e0e0">
<th width="10">
    _
    </th>
-
	<th align="left" colspan="5">

      Fuseaction: 
<xsl:value-of select="@name"/>
</th>
</tr>
-
	<tr>
<th align="left" colspan="2">
      Fuse Name
    </th>
<th align="left">
      Date Coded
    </th>
<th align="left">
      Coded By
    </th>
<th align="left">
      Unit Test Date
    </th>
<th align="left">
      Tested By
    </th>
</tr>
<xsl:apply-templates select="include"/>
</xsl:template>
-
	<xsl:template match="include">
-
	<tr>
<th width="10">
    _
    </th>
-
	<td align="left">
<xsl:value-of select="@template"/>
</td>
<td align="left">
      |
    </td>
<td align="left">
      |
    </td>
<td align="left">
      |
    </td>
<td align="left">
      |
    </td>
</tr>
</xsl:template>
</xsl:stylesheet>



Listing 6: FB4CodingProgress.css

#fuseName {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 9pt;
	font-weight: bold;
	text-align: left;
}
#circuitName {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 10pt;
	font-weight: bold;
	text-align: left;
}
#totals {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 10pt;
	font-weight: bold;
	text-align: left;
}
#grandTotals {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12pt;
	font-weight: bold;
	text-align: left;
}
#statusText  {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 9pt;
	text-align: left;
}


Listing 7: FusedocMiner.cfm

<!---
<fusedoc fuse="FusedocMiner.cfm" language="ColdFusion" version="2.0">
  <responsibilites>
    I read a Fusebox 4 application's fuse files, starting at the current directory,
    and produce an XSLT transformation from the specified stylesheet.
  </responsibilities>
  <properties>
    <history date="21 Feb 2006" author="Jeff Peters" email="jeff@grokfusebox.com" type="create">
      Version 1.0
    </history>
  </properties>
  <io>
    <in>
      <string name="thisDir" scope="attributes" optional="true" default="current path" />
      <boolean name="recurse" scope="attributes" optional="true" default="yes" />
      <string name="xslFile" optional="true" default="FusedocMiner.xsl" />
    </in>
    <out>
    </out>
  </io>
</fusedoc>
--->
<cfparam name="attributes.thisDir" default="#GetDirectoryFromPath(GetCurrentTemplatePath())#">
<cfparam name="attributes.recurse" default="yes">
<cfparam name="attributes.xslFile" default="#attributes.thisDir#\FusedocMiner.xsl">
<cfparam name="attributes.fusePrefixes" default="dsp,act,qry">
<cfparam name="attributes.outputFile" default="#attributes.thisDir#FusedocMinerOutput.html">

<!--- Read directory entries into array --->
<cfdirectory name="qryThisDir"
           action="LIST"
        directory="#attributes.thisDir#">

<!--- For each entry in files array: --->
<cfloop query="qryThisDir">
  <!--- Select based on entry type: --->
  <cfswitch expression="#Trim(qryThisDir.type)#">
    <cfcase value="File">
      <!--- If it's a fuse file, transform it and write it to the output file --->

      <cfif ListFindNoCase(attributes.fusePrefixes,Left(qryThisDir.Name,3))>
        <cfset dirName = ListLast(attributes.thisDir,"\")>
        <cffile action="read" file="#attributes.thisDir#\#qryThisDir.Name#" variable="fuseFile">
				<!--- Strip out the Fusedoc --->
				<cfset inFusedoc = false>
				<cfset fusedocText = "">
				<cfloop from="1" to="#ListLen(fuseFile,Chr(10))#" index="i">
					<cfif FindNoCase("<fusedoc",ListGetAt(fuseFile,i,Chr(10)))>
						<cfset inFusedoc = true>
					</cfif>
					<cfif inFusedoc>
						<cfset fusedocText = fusedocText & ListGetAt(fuseFile,i,Chr(10))>
					</cfif>
					<cfif FindNoCase("</fusedoc",ListGetAt(fuseFile,i,Chr(10)))>
						<cfset inFusedoc = false>
					</cfif>
				</cfloop>
		    <cffile action="read" file="#attributes.xslFile#" variable="xslCode">

				<!---
          <cfset newHTML = XMLTransform(fusedocText, xslCode)>
        --->

				<cftry>
          <cfset newHTML = XMLTransform(fusedocText, xslCode)>
  				<cffile action="append" file="#attributes.outputFile#" output="#newHTML#" addnewline="true">
          <cfcatch type="Expression">
            <cfoutput><li><b>Error in #qryThisDir.Name#:</b> #cfcatch.detail#<br
			 /></li></cfoutput>
            <cfflush>
          </cfcatch>
        </cftry>
      </cfif>
    </cfcase>
    
    <cfcase value="Dir">
      </ol>
      <h4>Reading <cfoutput>#qryThisDir.Name#</cfoutput></h4>
      <ol>
      <!--- Prevent recursion of the entire hard drive --->
      <cfif not ListFind(".,..",qryThisDir.Name) AND attributes.recurse>
        <!--- If directory entry, recurse with main   --->
        <cf_FusedocMiner thisDir="#attributes.thisDir#\#qryThisDir.Name#"
                         recurse="#attributes.recurse#"
                         xslFile="#attributes.xslFile#"
                    fusePrefixes="#attributes.fusePrefixes#"
                      outputFile="#attributes.outputFile#">
      </cfif>
    </cfcase>
    <cfdefaultcase>
      No handler for #qryThisDir.type#.
    </cfdefaultcase>
  </cfswitch>
</cfloop>

Listing 8: FusedocMiner.xsl

<xsl:stylesheet version="1.0">
<xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.0 Transitional//EN"/>
-
	<xsl:template match="/">
-
	<html>
-
	<head>
<title>Fusebox Application Fuse Documentation</title>
<link href="fusedocMiner.css" rel="stylesheet" type="text/css"/>
</head>
-
	<body>
<div align="left" style="font-family: Arial; font-weight: 700; font-size: 14pt;">
      Fusebox Application Fuse Documentation
    </div>
<xsl:apply-templates select="fusedoc"/>
<br style="page-break-after:always;"/>
</body>
</html>
</xsl:template>
-
	<xsl:template match="fusedoc">
-
	<span id="fuseName">
<xsl:value-of select="@fuse"/>
</span>
<xsl:apply-templates select="responsibilities"/>
<xsl:apply-templates select="properties"/>
<xsl:apply-templates select="io"/>
</xsl:template>
-
	<xsl:template match="responsibilities">
-
	<table class="responsibilitiesTable">
-
	<tr>
<th>Responsibilities</th>
</tr>
-
	<tr>
-
	<td>
<xsl:apply-templates select="text()"/>
</td>
</tr>
</table>
</xsl:template>
-
	<xsl:template match="properties">
-
	<table class="propertiesTable">
-
	<tr>
<th colspan="7">Properties</th>
</tr>
<xsl:apply-templates select="property"/>
<xsl:apply-templates select="history"/>
<xsl:apply-templates select="note"/>
</table>
</xsl:template>
-
	<xsl:template match="property">
-
	<tr>
-
	<td>
Property: 
<xsl:value-of select="@name"/>
</td>
-
	<td>
Value: 
<xsl:value-of select="@value"/>
</td>
-
	<td colspan="2">
Comments: 
<xsl:value-of select="@comments"/>
</td>
-
	<td colspan="3">
<xsl:apply-templates select="text()"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="history">
-
	<tr>
-
	<td>
History Date: 
<xsl:value-of select="@date"/>
</td>
-
	<td>
Author: 
<xsl:value-of select="@author"/>
</td>
-
	<td>
Email: 
<xsl:value-of select="@email"/>
</td>
-
	<td>
Role: 
<xsl:value-of select="@role"/>
</td>
-
	<td>
Type: 
<xsl:value-of select="@type"/>
</td>
-
	<td>
Comments: 
<xsl:value-of select="@comments"/>
</td>
-
	<td>
<xsl:apply-templates select="text()"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="note">
-
	<tr>
-
	<td>
Note Date: 
<xsl:value-of select="@date"/>
</td>
-
	<td>
Author: 
<xsl:value-of select="@author"/>
</td>
-
	<td colspan="5">
<xsl:apply-templates select="text()"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
-
	<xsl:template match="io">
-
	<table class="ioTable">
-
	<tr>
<th colspan="9">I/O</th>
</tr>
<xsl:apply-templates select="in"/>
<xsl:apply-templates select="out"/>
</table>
</xsl:template>
-
	<xsl:template match="in">
-
	<tr>
<th colspan="9">Input</th>
</tr>
<xsl:apply-templates select="string | number | boolean | datetime"/>
<xsl:apply-templates select="list"/>
<xsl:apply-templates select="array"/>
<xsl:apply-templates select="structure"/>
<xsl:apply-templates select="recordset"/>
<xsl:apply-templates select="cookie"/>
<xsl:apply-templates select="file"/>
</xsl:template>
-
	<xsl:template match="out">
-
	<tr>
<th colspan="9">Output</th>
</tr>
<xsl:apply-templates select="string | number | boolean | datetime"/>
<xsl:apply-templates select="list"/>
<xsl:apply-templates select="array"/>
<xsl:apply-templates select="structure"/>
<xsl:apply-templates select="recordset"/>
<xsl:apply-templates select="cookie"/>
<xsl:apply-templates select="file"/>
</xsl:template>
-
	<xsl:template match="string">
-
	<tr>
<td>Type: string</td>
-
	<td>
Name: 
<xsl:value-of select="@name"/>
</td>
-
	<td>
Scope: 
<xsl:value-of select="@scope"/>
</td>
-
	<td>
Optional 
<xsl:value-of select="@optional"/>
</td>
-
	<td>
Default: 
<xsl:value-of select="@default"/>
</td>
-
	<td>
Mask:
<xsl:value-of select="@mask"/>
</td>
-
	<td>
Format:
<xsl:value-of select="@format"/>
</td>
-
	<td>
On Condition:
<xsl:value-of select="@oncondition"/>
</td>
-
	<td>
Comments: 
<xsl:value-of select="@comments"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="number">
-
	<tr>
<td>Type: number</td>
-
	<td>
Name: 
<xsl:value-of select="@name"/>
</td>
-
	<td>
Scope: 
<xsl:value-of select="@scope"/>
</td>
-
	<td>
Optional 
<xsl:value-of select="@optional"/>
</td>
-
	<td>
Default: 
<xsl:value-of select="@default"/>
</td>
-
	<td>
Precision:
<xsl:value-of select="@precision"/>
</td>
-
	<td>
On Condition:
<xsl:value-of select="@oncondition"/>
</td>
-
	<td colspan="2">
Comments: 
<xsl:value-of select="@comments"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="boolean">
-
	<tr>
<td>Type: boolean</td>
-
	<td>
Name: 
<xsl:value-of select="@name"/>
</td>
-
	<td>
Scope: 
<xsl:value-of select="@scope"/>
</td>
-
	<td>
Optional 
<xsl:value-of select="@optional"/>
</td>
-
	<td>
Default: 
<xsl:value-of select="@default"/>
</td>
-
	<td>
On Condition:
<xsl:value-of select="@oncondition"/>
</td>
-
	<td colspan="3">
Comments: 
<xsl:value-of select="@comments"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="datetime">
-
	<tr>
<td>Type: datetime</td>
-
	<td>
Name: 
<xsl:value-of select="@name"/>
</td>
-
	<td>
Scope: 
<xsl:value-of select="@scope"/>
</td>
-
	<td>
Optional 
<xsl:value-of select="@optional"/>
</td>
-
	<td>
Default: 
<xsl:value-of select="@default"/>
</td>
-
	<td>
Mask:
<xsl:value-of select="@mask"/>
</td>
-
	<td>
On Condition:
<xsl:value-of select="@oncondition"/>
</td>
-
	<td colspan="2">
Comments: 
<xsl:value-of select="@comments"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="list">
-
	<tr>
-
	<td colspan="9">
-
	<table class="listTable">
-
	<tr>
<th>Type: List</th>
-
	<th>
Name: 
<xsl:value-of select="@name"/>
</th>
-
	<th>
Scope: 
<xsl:value-of select="@scope"/>
</th>
-
	<th>
Delimiters: 
<xsl:value-of select="@delims"/>
</th>
-
	<th>
Optional: 
<xsl:value-of select="@optional"/>
</th>
-
	<th>
Default: 
<xsl:value-of select="@default"/>
</th>
-
	<th>
On Condition: 
<xsl:value-of select="@oncondition"/>
</th>
-
	<th>
Format: 
<xsl:value-of select="@format"/>
</th>
-
	<th colspan="2">
Comments: 
<xsl:value-of select="@comments"/>
</th>
</tr>
</table>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="cookie">
-
	<tr>
<td>Type: cookie</td>
-
	<td>
Name: 
<xsl:value-of select="@name"/>
</td>
-
	<td>
Expires: 
<xsl:value-of select="@expires"/>
</td>
-
	<td>
Secure: 
<xsl:value-of select="@secure"/>
</td>
-
	<td>
Format: 
<xsl:value-of select="@format"/>
</td>
-
	<td>
Optional 
<xsl:value-of select="@optional"/>
</td>
-
	<td>
Default: 
<xsl:value-of select="@default"/>
</td>
-
	<td>
On Condition:
<xsl:value-of select="@oncondition"/>
</td>
-
	<td>
Comments: 
<xsl:value-of select="@comments"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="file">
-
	<tr>
<td>Type: file</td>
-
	<td colspan="2">
Path: 
<xsl:value-of select="@path"/>
</td>
-
	<td>
Action: 
<xsl:value-of select="@action"/>
</td>
-
	<td>
Optional 
<xsl:value-of select="@optional"/>
</td>
-
	<td>
Default: 
<xsl:value-of select="@default"/>
</td>
-
	<td>
On Condition:
<xsl:value-of select="@oncondition"/>
</td>
-
	<td colspan="2">
Comments: 
<xsl:value-of select="@comments"/>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="array">
-
	<tr>
-
	<td colspan="9">
-
	<table class="arrayTable">
-
	<tr>
<th>Type: Array</th>
-
	<th>
Name: 
<xsl:value-of select="@name"/>
</th>
-
	<th>
Scope: 
<xsl:value-of select="@scope"/>
</th>
-
	<th>
Optional: 
<xsl:value-of select="@optional"/>
</th>
-
	<th>
On Condition: 
<xsl:value-of select="@oncondition"/>
</th>
-
	<th>
Format: 
<xsl:value-of select="@format"/>
</th>
-
	<th colspan="4">
Comments: 
<xsl:value-of select="@comments"/>
</th>
</tr>
<xsl:apply-templates select="string | number | boolean | datetime"/>
<xsl:apply-templates select="array"/>
<xsl:apply-templates select="structure"/>
</table>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="structure">
-
	<tr>
-
	<td colspan="9">
-
	<table class="structTable">
-
	<tr>
<th>Type: Structure</th>
-
	<th>
Name: 
<xsl:value-of select="@name"/>
</th>
-
	<th>
Scope: 
<xsl:value-of select="@scope"/>
</th>
-
	<th>
Optional: 
<xsl:value-of select="@optional"/>
</th>
-
	<th>
On Condition: 
<xsl:value-of select="@oncondition"/>
</th>
-
	<th>
Format: 
<xsl:value-of select="@format"/>
</th>
-
	<th colspan="4">
Comments: 
<xsl:value-of select="@comments"/>
</th>
</tr>
<xsl:apply-templates select="string | number | boolean | datetime"/>
<xsl:apply-templates select="array"/>
<xsl:apply-templates select="structure"/>
</table>
</td>
</tr>
</xsl:template>
-
	<xsl:template match="recordset">
-
	<tr>
-
	<td colspan="9">
-
	<table class="recordsetTable">
-
	<tr>
<th>Type: Recordset</th>
-
	<th>
Name: 
<xsl:value-of select="@name"/>
</th>
-
	<th>
Primary Keys: 
<xsl:value-of select="@primarykeys"/>
</th>
-
	<th>
Scope: 
<xsl:value-of select="@scope"/>
</th>
-
	<th>
Optional: 
<xsl:value-of select="@optional"/>
</th>
-
	<th>
On Condition: 
<xsl:value-of select="@oncondition"/>
</th>
-
	<th>
Format: 
<xsl:value-of select="@format"/>
</th>
-
	<th colspan="2">
Comments: 
<xsl:value-of select="@comments"/>
</th>
</tr>
<xsl:apply-templates select="string | number | boolean | datetime"/>
</table>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>


Listing 9: FusedocMiner.css

th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 8pt;
	font-weight: 700;
	text-align: left;
	background-color: #FFFACD;
}
td { 
   font-family: Arial, Helvetica, sans-serif;
   font-size: 8pt;
	font-weight: 400; 
}
#fuseName {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12pt;
	font-weight: 700;
	text-align: left;
}
.responsibilitiesTable{
	border: thin solid Blue;
	width: 700px;
}
.propertiesTable{
	border: thin solid Blue;
	width: 700px;
}
.ioTable{
	border: thin solid Blue;
	width: 700px;
}
.recordsetTable{
	border: thin solid Green;
}
.arrayTable{
	border: thin solid Red;
}
.structTable{
	border: thin solid Purple;
}