<?xml version="1.0" encoding="iso-8859-1"?>

<xsl:stylesheet version="1.0"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
	xmlns:xrv="http://cking.be/wx/xrv/ns"
	>

	<xsl:output method="xml" version="1.0" encoding="iso-8859-1" indent="yes"
		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
		/>

	<xsl:strip-space elements="*"/>

	<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
	<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>

<!-- root level === generate html -->

	<xsl:template match="/xrv:grammar">
		<html>
			<head>
				<title>xrv XRCvalidator grammar</title>
				<meta name="generator" content="xrv XRCvalidator {@version} [{system-property('xsl:vendor')}]"/>
				<link rel="stylesheet" type="text/css" href="../css/global.css"/>
				<link rel="stylesheet" type="text/css" href="../css/grammar.css"/>
			</head>
			<body>
				<div class="title"><a href="..">xrv XRCvalidator</a> grammar</div>
				<div class="content">
					<div>
						<xsl:apply-templates select="@version"/>
						<xsl:apply-templates select="xrv:meta/xrv:xrc"/>
						<hr/>
						<ul>
							<xsl:apply-templates select="xrv:*" mode="li"/>
						</ul>
						<hr/>
						<xsl:apply-templates/>
					</div>
					<div class="toc">
						<hr/>
						<div class="title">
							<a name="toc" href="#" title="to top">&#0160;</a> <!-- TODO add button img -->
							<xsl:text>all classes</xsl:text>
						</div>
						<div class="indent">
							<xsl:apply-templates select="//xrv:class[substring(@name,1,2)='wx']" mode="toc">
								<xsl:sort select="@name" data-type="text"/>
							</xsl:apply-templates>
						</div>
					</div>
				</div>
			</body>
		</html>
	</xsl:template>

	<xsl:template match="xrv:grammar/xrv:*" mode="li">
		<xsl:if test="local-name()!='meta'">
			<xsl:variable name="count" select="count(xrv:type|xrv:prop|.//xrv:class[substring(@name,1,2)='wx'])"/>
			<!-- only count classes starting with 'wx' (ignore classes like 'separator' and 'sizeritem') -->
			<xsl:if test="$count &gt; 0">
				<li>
					<a href="#{local-name()}">
						<xsl:value-of select="$count"/>
						<xsl:text> </xsl:text>
						<xsl:value-of select="xrv:title"/>
					</a>
				</li>
			</xsl:if>
		</xsl:if>
	</xsl:template>

	<xsl:template match="xrv:grammar/@version">
		<div class="ver">
			<xsl:text>xrv </xsl:text>
			<xsl:value-of select="."/>
		</div>
	</xsl:template>

	<xsl:template match="xrv:grammar/xrv:meta/xrv:xrc">
		<div class="ver">
			<xsl:text>xrc </xsl:text>
			<xsl:value-of select="@min"/>
			<xsl:text>-</xsl:text>
			<xsl:value-of select="@max"/>
		</div>
	</xsl:template>

<!-- level 2 === meta/types/common/controls/sizers/windows/bars -->

	<xsl:template match="xrv:grammar/xrv:*">
		<xsl:if test="local-name()!='meta'">
			<xsl:variable name="count" select="count(xrv:type|xrv:prop|xrv:class)"/>
			<xsl:if test="$count &gt; 0">
				<div class="chapter title">
					<a name="{local-name()}" href="#" title="to top">&#0160;</a> <!-- TODO add button img -->
					<xsl:value-of select="xrv:title"/>
				</div>
				<div class="indent">
					<xsl:apply-templates/>
				</div>
			</xsl:if>
		</xsl:if>
	</xsl:template>

<!-- deeper levels -->

	<xsl:template match="xrv:dscr">
		<div class="col3"><div class="dscr"><xsl:value-of select="."/></div></div>
	</xsl:template>

	<xsl:template match="xrv:choice"/> <!-- skip -->

	<xsl:template match="xrv:deprecated">
		<div class="col3 alert">
			<xsl:text>deprecated</xsl:text>
			<xsl:if test="string(@use)">
				<xsl:text> - use </xsl:text>
				<a href="#{@use}">
					<xsl:value-of select="@use"/>
				</a>
				<xsl:text> instead</xsl:text>
			</xsl:if>
		</div>
	</xsl:template>

	<xsl:template match="xrv:grammar/xrv:*/xrv:title"/> <!-- already processed -->

	<xsl:template match="xrv:grammar/xrv:types/xrv:type">
		<div class="title type"><xsl:value-of select="@id"/></div>
		<xsl:if test="xrv:*">
			<div class="indent">
				<xsl:apply-templates/>
			</div>
		</xsl:if>
	</xsl:template>

	<xsl:template match="xrv:class">
		<xsl:variable name="iswx" select="substring(@name,1,2)='wx'"/>
		<xsl:variable name="hasdoc" select="$iswx and not(xrv:deprecated)"/>
		<div class="title clas">
			<xsl:if test="$iswx">
				<a name="{@name}" href="#" title="to top">&#0160;</a> <!-- TODO add button img -->
			</xsl:if>
			<xsl:value-of select="@name"/>
		</div>
		<xsl:if test="$hasdoc or string(@src) or xrv:*">
			<div class="indent">
				<xsl:if test="$hasdoc or string(@src)">
					<div class="src">
						<xsl:if test="string(@src)">
							<div>
								<img src="../img/link_src.png" width="16" height="16" alt=""/>
								<xsl:text> </xsl:text>
								<a href="{concat(/xrv:grammar/xrv:meta/xrv:src/@dir,@src)}">
									<xsl:value-of select="@src"/>
								</a>
							</div>
						</xsl:if>
						<xsl:if test="$hasdoc">
							<xsl:variable name="docfile" select="concat('wxwin_',translate(@name,$upper,$lower),'.html')"/>
							<div>
								<img src="../img/link_doc.png" width="16" height="16" alt=""/>
								<xsl:text> </xsl:text>
								<a href="{concat(/xrv:grammar/xrv:meta/xrv:doc/@dir,$docfile)}">
									<xsl:value-of select="$docfile"/>
								</a>
							</div>
						</xsl:if>
					</div>
				</xsl:if>
				<xsl:apply-templates select="xrv:*"/>
			</div>
		</xsl:if>
	</xsl:template>

	<xsl:template match="xrv:items">
		<div class="col1 item"><xsl:value-of select="@name"/></div>
		<div class="col2 type"><xsl:value-of select="@type"/>&#0160;</div>
		<div class="col3 deft"><xsl:value-of select="@default"/>&#0160;</div>
		<xsl:apply-templates select="xrv:*"/>
	</xsl:template>

	<xsl:template match="xrv:attribute">
		<div class="col1 attr">@<xsl:value-of select="@name"/></div>
		<div class="col2 type"><xsl:value-of select="@type"/>&#0160;</div>
		<div class="col3 deft"><xsl:value-of select="@default"/>&#0160;</div>
	</xsl:template>

	<xsl:template match="xrv:prop">
		<div class="col1 prop"><xsl:value-of select="@name"/></div>
		<div class="col2 type">
			<xsl:choose>
				<xsl:when test="@type='tChoice' and xrv:choice">
					<xsl:variable name="title">
						<xsl:apply-templates select="xrv:choice" mode="tooltip"/>
					</xsl:variable>
					<span class="tooltip" title="{$title}">
						<xsl:value-of select="@type"/>
					</span>
				</xsl:when>
				<xsl:otherwise>
					<xsl:value-of select="@type"/>
				</xsl:otherwise>
			</xsl:choose>
			<xsl:text>&#0160;</xsl:text>
		</div>
		<div class="col3 deft"><xsl:value-of select="@default"/>&#0160;</div>
	</xsl:template>

	<xsl:template match="xrv:commonprops">
		<div class="col1 link"><a href="#common">common props</a></div>
		<div class="col2 type">&#0160;</div>
		<div class="col3 deft">
			<xsl:if test="@defaultstyle">
				<span class="tooltip" title="default style for {parent::xrv:class/@name}"><xsl:value-of select="@defaultstyle"/></span>
			</xsl:if>
			<xsl:text>&#0160;</xsl:text>
		</div>
	</xsl:template>

	<xsl:template match="xrv:choice" mode="tooltip">
		<xsl:value-of select="."/>
		<xsl:if test="following-sibling::xrv:choice">/</xsl:if>
	</xsl:template>

	<xsl:template match="xrv:child-bars | xrv:child-controls | xrv:child-sizers | xrv:child-windows">
		<xsl:variable name="name" select="substring-after(local-name(),'-')"/>
		<div class="col1 link"><a href="#{$name}"><xsl:value-of select="$name"/></a></div>
		<div class="col2 type">&#0160;</div>
		<div class="col3 deft">&#0160;</div>
	</xsl:template>

	<xsl:template match="xrv:string">
		<div class="col1">string</div>
		<div class="col2 type"><xsl:value-of select="@type"/>&#0160;</div>
		<div class="col3 deft">&#0160;</div>
	</xsl:template>

	<xsl:template match="xrv:class" mode="toc">
		<div class="tocitem">
			<a href="#{@name}">
				<xsl:value-of select="@name"/>
			</a>
		</div>
	</xsl:template>

</xsl:stylesheet>



