<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

	<xsl:param name="source-name" select="(fillme)" />
	<xsl:output method="html" indent="no"/>
	<!--	<xsl:output method="xml"/>-->
	<xsl:strip-space elements="*"/>

	<xsl:template match="/">
		<xsl:variable name="assembly-name" select="substring-before ($source-name, '.src')" />
		<html>
			<head>
				<title>
					Mono Class Library Status for <xsl:value-of select="$assembly-name" />
				</title>
				<script src="cm/cormissing.js"></script>
				<link rel="stylesheet" type="text/css" href="cm/cormissing.css"></link>
				<style type="text/css"><![CDATA[
				div.links {
					background-color: #CCFFCC;
				}
				div.links ul li {
					display: inline;
					padding: 5px;
					}
				]]></style>
			</head>
			<body>
<div class="links">
	<ul>
	<li><a href="System.Runtime.Serialization.html">Runtime.Serialization</a></li>
	<li><a href="System.IdentityModel.html">IdentityModel</a></li>
	<li><a href="System.IdentityModel.Selectors.html">IdentityModel.Selectors</a></li>
	<li><a href="System.ServiceModel.html">ServiceModel</a></li>
	</ul>
</div>
			<div class="main">
				<p>
					<h1>Mono Class Library Status for <xsl:value-of select="$assembly-name" /></h1>
				</p>
				<p>
					<table>
						<tr>
							<td> <input type="checkbox" ID="todo" onClick="selectTodo();" checked="1"/> </td>
							<td> <img src="cm/st.gif"/> </td>
							<td> TODO </td>
							<td width="20"/>
							<td> <input type="checkbox" ID="missing" onClick="selectMissing();" checked="1"/> </td>
							<td> <img src="cm/sm.gif"/> </td>
							<td> Missing </td>
						</tr>
						<tr>
							<td> <input type="checkbox" ID="extra" onClick="selectExtra();" checked="1"/> </td>
							<td> <img src="cm/sx.gif"/> </td>
							<td> Extra </td>
							<td width="20"/>
							<td> <input type="checkbox" ID="errors" onClick="selectErrors();" checked="1"/> </td>
							<td> <img src="cm/se.gif"/> </td>
							<td> Errors </td>
						</tr>
						<tr>
							<td> </td>
							<td> <img src="cm/sc.gif"/> </td>
							<td> Completed </td>
						</tr>
					</table>
				</p>

				<p>
					<select id="FilteredAttributes">
						<option>System.Runtime.InteropServices.ComVisibleAttribute</option>
						<option>System.Diagnostics.DebuggerDisplayAttribute</option>
						<option>System.Diagnostics.DebuggerTypeProxyAttribute</option>
					</select>
					<input type="button" onclick="removeAndFilter()" value="Unfilter attribute" />
				</p>
				<p>
					<input type="text" id="NewFilterTarget" length="60" />
					<input type="button" onclick="addAndFilter()" value="Add to attribute filter" />
				</p>
				<p>Target Reference:
					<input type="radio" id="TargetMonodoc" name="TargetDoc" value="0" />monodoc
					<input type="radio" id="TargetMsdn1" name="TargetDoc" value="1" />msdn
					<input type="radio" id="TargetMsdn2" name="TargetDoc" value="2" checked="checked" />msdn2
					<input type="radio" id="TargetWinsdk" name="TargetDoc" value="3" checked="checked" />Windows SDK
				</p>

				<DIV ID="ROOT">
					<xsl:apply-templates/>
				</DIV>
				<p>
					Legend :<BR/>
					<table>
						<tr>
							<td> <img src="cm/y.gif"/> </td>
							<td> Assembly </td>
							<td width="20"/>
							<td> <img src="cm/n.gif"/> </td>
							<td> Namespace </td>
							<td width="20"/>
							<td> <img src="cm/c.gif"/> </td>
							<td> Class </td>
							<td width="20"/>
							<td> <img src="cm/s.gif"/> </td>
							<td> Struct </td>
						<tr>
						</tr>
							<td> <img src="cm/i.gif"/> </td>
							<td> Interface </td>
							<td width="20"/>
							<td> <img src="cm/d.gif"/> </td>
							<td> Delegate </td>
							<td width="20"/>
							<td> <img src="cm/en.gif"/> </td>
							<td> Enum </td>
							<td width="20"/>
							<td> <img src="cm/m.gif"/> </td>
							<td> Method </td>
						</tr>
						<tr>
							<td> <img src="cm/f.gif"/> </td>
							<td> Field </td>
							<td width="20"/>
							<td> <img src="cm/p.gif"/> </td>
							<td> Property </td>
							<td width="20"/>
							<td> <img src="cm/e.gif"/> </td>
							<td> Event </td>
							<td width="20"/>
							<td> <img src="cm/r.gif"/> </td>
							<td> Attribute </td>
						</tr>
						<tr>
							<td> <img src="cm/w.gif" /> </td>
							<td colspan="10"> Generic Constraints</td>
						</tr>
					</table>

				</p>
			</div>
			</body>
		</html>
	</xsl:template>



	<!-- assembly -->
	<xsl:template match="/assemblies">
		<xsl:apply-templates select="assembly">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="assembly">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">y</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- namespace -->
	<xsl:template match="namespaces">
		<xsl:apply-templates select="namespace">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="namespace">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">n</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<xsl:template match="namespace/classes">
		<xsl:apply-templates select="class[@type='interface']">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
		<xsl:apply-templates select="class[@type='class']">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
		<xsl:apply-templates select="class[@type='struct']">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
		<xsl:apply-templates select="class[@type='delegate']">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
		<xsl:apply-templates select="class[@type='enum']">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>


	<!-- class -->
	<xsl:template match="class[@type='class']">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">c</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="(@missing_total or @todo_total or @extra_total or @warning_total or @error) and not(@presence)">
				<xsl:apply-templates select="attributes"/>
				<xsl:apply-templates select="interfaces"/>
				<xsl:apply-templates select="constructors"/>
				<xsl:apply-templates select="./*[local-name() != 'attributes' and local-name() != 'constructors' and local-name() != 'interfaces']"/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- struct -->
	<xsl:template match="class[@type='struct'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">s</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>



	<!-- interface types -->
	<xsl:template match="class[@type='interface']">
		<xsl:apply-templates select="class[@type='interface']">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="class[@type='interface'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">i</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>

	<!-- interfaces implemented by Types -->
	<xsl:template match="interface">
		<xsl:apply-templates select="interface">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="interface[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">i</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- generic constraints -->
	<xsl:template match="generic-type-constraints">
		<xsl:apply-templates select="generic-type-constraint">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="generic-type-constraint[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">w</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>



	<!-- delegate -->
	<xsl:template match="class[@type='delegate'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">d</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- enumeration -->
	<xsl:template match="class[@type='enum'][@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">en</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- method -->
	<xsl:template match="methods">
		<xsl:apply-templates select="method">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="method[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">m</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- property -->
	<xsl:template match="properties">
		<xsl:apply-templates select="property">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="property[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">p</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- event -->
	<xsl:template match="events">
		<xsl:apply-templates select="event">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="event[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">e</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- constructor -->
	<xsl:template match="constructors">
		<xsl:apply-templates select="constructor">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="constructor[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">x</xsl:with-param>
				<xsl:with-param name="image">m</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- field -->
	<xsl:template match="fields">
		<xsl:apply-templates select="field">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="field[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">f</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>

	<!-- accessor -->
	<xsl:template match="property/methods">
		<xsl:apply-templates select="method">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="property[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]/methods/method[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">o</xsl:with-param>
				<xsl:with-param name="image">m</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>


	<!-- attribute -->
	<xsl:template match="attributes">
		<xsl:apply-templates select="attribute">
			<xsl:sort select="@name"/>
		</xsl:apply-templates>
	</xsl:template>

	<xsl:template match="attribute[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
		<DIV>
			<xsl:call-template name="ELEMENT">
				<xsl:with-param name="class">r</xsl:with-param>
			</xsl:call-template>
			<xsl:if test="not(@presence)">
				<xsl:apply-templates/>
			</xsl:if>
		</DIV>
	</xsl:template>



	<!-- support templates -->

	<xsl:template name="ELEMENT">
		<xsl:param name="class"/>
		<xsl:param name="image"/>
			<xsl:attribute name="class">
				<xsl:value-of select="$class"/>
				<xsl:if test="./node() and local-name() != 'assembly'">_</xsl:if>
			</xsl:attribute>
			<xsl:call-template name="toggle"/>
			<xsl:choose>
				<xsl:when test="@error and @error != 'todo'">
					<xsl:element name="img">
						<xsl:attribute name="src">cm/se.gif</xsl:attribute>
						<xsl:attribute name="class">t</xsl:attribute>
						<xsl:attribute name="title"><xsl:call-template name="warning-hover" /></xsl:attribute>
					</xsl:element>
				</xsl:when>
				<xsl:when test="@error = 'todo'">
					<xsl:element name="img">
						<xsl:attribute name="src">cm/st.gif</xsl:attribute>
						<xsl:attribute name="class">t</xsl:attribute>
						<xsl:if test="@comment">
							<xsl:attribute name="title"><xsl:value-of select="@comment"/></xsl:attribute>
						</xsl:if>
						<xsl:if test="not(@comment)">
							<xsl:attribute name="title">No TODO description</xsl:attribute>
						</xsl:if>
					</xsl:element>
				</xsl:when>
				<xsl:when test="@presence = 'missing'">
					<img src="cm/sm.gif" class="t"/>
				</xsl:when>
				<xsl:when test="@presence = 'extra'">
					<img src="cm/sx.gif" class="t"/>
				</xsl:when>
				<xsl:otherwise>
					<img src="cm/sc.gif" class="t"/>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:choose>
				<xsl:when test="$image">
					<img src="cm/{$image}.gif" class="t"/>
				</xsl:when>
				<xsl:otherwise>
					<img src="cm/{$class}.gif" class="t"/>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:call-template name="name"/>
			<xsl:if test="not(@presence)">
				<xsl:call-template name="status"/>
			</xsl:if>
	</xsl:template>

	<xsl:template name="status">
		<xsl:if test="@complete_total and @complete_total != 0">
			<SPAN class="st">
				<img src="cm/sc.gif"/>
				<xsl:text>: </xsl:text>
				<xsl:value-of select="@complete_total"/>
				<xsl:text>%</xsl:text>
			</SPAN>
		</xsl:if>
		<xsl:if test="@todo_total">
			<SPAN class="st">
				<img src="cm/st.gif"/>: <xsl:value-of select="@todo_total"/>
			</SPAN>
		</xsl:if>
		<xsl:if test="@missing_total">
			<SPAN class="st">
				<img src="cm/sm.gif"/>: <xsl:value-of select="@missing_total"/>
			</SPAN>
		</xsl:if>
		<xsl:if test="@extra_total">
			<SPAN class="st">
				<img src="cm/sx.gif"/>: <xsl:value-of select="@extra_total"/>
			</SPAN>
		</xsl:if>
		<xsl:if test="@warning_total">
			<SPAN class="st">
				<img src="cm/se.gif"/>: <xsl:value-of select="@warning_total"/>
			</SPAN>
		</xsl:if>
	</xsl:template>

	<xsl:template name="toggle">
		<xsl:choose>
			<xsl:when test="not(@presence) and .//*[@missing_total or @todo_total or @extra_total or @warning_total or @error or @presence]">
				<xsl:choose>
					<xsl:when test="local-name() != 'assembly'">
						<img src="cm/tp.gif" class="t"/>
					</xsl:when>
					<xsl:otherwise>
						<img src="cm/tm.gif" class="t"/>
					</xsl:otherwise>
				</xsl:choose>
			</xsl:when>
			<xsl:otherwise>
				<img src="cm/tb.gif"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

	<xsl:template name="name">
		<xsl:if test="@name">
			<SPAN class="l"><xsl:value-of select="@name"/></SPAN>
		</xsl:if>
	</xsl:template>

	<xsl:template name="warning-hover">
		<xsl:for-each select="warnings/warning">
			<xsl:text>WARNING: </xsl:text>
			<xsl:value-of select="@text"/>
		</xsl:for-each>
	</xsl:template>

</xsl:stylesheet>