Files
itgmania212121/stepmania/Docs/Lua.xsl
T
2007-08-07 12:26:57 +00:00

430 lines
11 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sm="http://www.stepmania.com"
exclude-result-prefixes="sm">
<!-- This could be xhtml 1.0 strict, but firefox is failing at displaying the
resultant document even though it seems to parse it just fine. -->
<xsl:output method="html"
version="4.01"
encoding="UTF-8"
doctype-system="http://www.w3.org/TR/html4/strict.dtd"
doctype-public="-//W3C//DTD HTML 4.01//EN"
indent="no"
media-type="text/html" />
<!--
<xsl:output method="xml"
version="1.0"
encoding="UTF-8"
doctype-system="http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
media-type="application/xhtml+xml" />
-->
<xsl:template match="/">
<xsl:comment>This file is automatically generated. Do not edit it.</xsl:comment>
<html>
<head>
<title>StepMania LUA Information</title>
<style type="text/css">
th {
background-color: #CCCCFF;
border-style: solid;
border-width: thin;
padding: 2px;
font-size: 150%
}
table {
border-style: ridge;
border-collapse: collapse
}
td {
padding: 2px;
border-style: solid;
border-width: thin
}
hr {
width: 90%
}
code {
font-family: monospace
}
.code {
font-family: monospace
}
.returnTypeCell {
font-family: monospace;
text-align: right;
vertical-align: text-top;
width: 10em
}
.descriptionCell {
text-align: justify;
vertical-align: text-top
}
.descriptionName {
font-family: monospace;
font-weight: bold
}
.descriptionArguments {
font-family: monospace
}
.descriptionText {
text-indent: 2em;
margin-top: 0;
margin-bottom: 0
}
.primitiveType {
font-family: monospace;
color: #0000ff
}
a.classType:link {
font-family: monospace;
color: #cc0000
}
a.classType:visited {
font-family: monospace;
color: #440000
}
a.enumType:link {
font-family: monospace;
color: #cc0000
}
a.enumType:visited {
font-family: monospace;
color: #440000
}
.trigger {
cursor: pointer
}
.footer {
text-align: center
}
</style>
<script type="text/javascript">
function Open( id )
{
var imgid = 'img_' + id;
var listid = 'list_' + id;
var img = document.getElementById( imgid );
var list = document.getElementById( listid );
img.setAttribute( 'src', 'open.gif' );
list.style.display = 'block';
}
function OpenAndMove( classid, functionid )
{
Open( classid );
location.hash = classid + '_' + functionid;
}
function Toggle( id )
{
var imgid = 'img_' + id;
var listid = 'list_' + id;
var img = document.getElementById( imgid );
var list = document.getElementById( listid );
if( img.getAttribute('src') == 'closed.gif' )
{
img.setAttribute( 'src', 'open.gif' );
list.style.display = 'block';
}
else
{
img.setAttribute( 'src', 'closed.gif' );
list.style.display = 'none';
}
}
</script>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="sm:Lua">
<div>
<h2>StepMania LUA Information</h2>
<table>
<tr>
<th><a href="#Singletons">Singletons</a></th>
<th><a href="#Classes">Classes</a></th>
<th><a href="#GlobalFunctions">Global Functions</a></th>
<th><a href="#Enums">Enums</a></th>
<th><a href="#Constants">Constants</a></th>
</tr>
</table>
</div>
<xsl:apply-templates select="sm:Singletons" />
<xsl:apply-templates select="sm:Classes" />
<xsl:apply-templates select="sm:GlobalFunctions" />
<xsl:apply-templates select="sm:Enums" />
<xsl:apply-templates select="sm:Constants" />
<hr />
<p class="footer">
Generated for <xsl:value-of select="sm:Version" /> on
<xsl:value-of select="sm:Date" />.
</p>
</xsl:template>
<xsl:template match="sm:Singletons">
<div>
<h3 id="Singletons">Singletons</h3>
<ul>
<xsl:for-each select="sm:Singleton">
<xsl:sort select="@name" />
<li>
<a class="classType" href="#{@class}" onclick="Open('{@class}')">
<xsl:value-of select="@name" />
</a>
</li>
</xsl:for-each>
</ul>
</div>
</xsl:template>
<xsl:template match="sm:Classes">
<div>
<h3 id="Classes">Classes</h3>
<xsl:apply-templates select="sm:Class">
<xsl:sort select="@name" />
</xsl:apply-templates>
</div>
</xsl:template>
<xsl:variable name="docs" select="document('LuaDocumentation.xml')/sm:Documentation" />
<xsl:template match="sm:Class">
<xsl:variable name="name" select="@name" />
<div>
<a id="{@name}" class="trigger" onclick="Toggle('{@name}')">
<img src="closed.gif" id="img_{@name}" alt="" />
Class <span class="descriptionName"><xsl:value-of select="@name" /></span>
</a>
<xsl:if test="@base != ''">
<span class="code"><xsl:text> : </xsl:text></span>
<a class="classType" href="#{@base}" onclick="Open('{@base}')">
<xsl:value-of select="@base" />
</a>
</xsl:if>
<div style="display: none" id="list_{@name}">
<table>
<tr><th colspan="2"><xsl:value-of select="$name" /> Member Functions</th></tr>
<xsl:apply-templates select="sm:Function">
<xsl:sort select="@name" />
<xsl:with-param name="path" select="$docs/sm:Classes/sm:Class[@name=$name]" />
<xsl:with-param name="class" select="$name" />
</xsl:apply-templates>
</table>
<br />
</div>
</div>
</xsl:template>
<xsl:template match="sm:GlobalFunctions">
<div>
<h3 id="GlobalFunctions">Global Functions</h3>
<table>
<tr><th colspan="2">Functions</th></tr>
<xsl:apply-templates select="sm:Function">
<xsl:sort select="@name" />
<xsl:with-param name="path" select="$docs/sm:GlobalFunctions" />
<xsl:with-param name="class" select="'GLOBAL'" />
</xsl:apply-templates>
</table>
</div>
</xsl:template>
<xsl:template name="processType">
<xsl:param name="type" />
<xsl:choose>
<xsl:when test="$type='void' or
$type='int' or
$type='float' or
$type='string'">
<span class="primitiveType">
<xsl:value-of select="$type" />
</span>
</xsl:when>
<!-- XXX: /Lua/Classes/sm:Class[@name=$type]
does not work and I have no idea why. -->
<xsl:when test="boolean(//sm:Class[@name=$type])">
<a class="classType" href="#{$type}" onclick="Open('{$type}')">
<xsl:value-of select="$type" />
</a>
</xsl:when>
<xsl:when test="boolean(//sm:Enum[@name=$type])">
<a class="enumType" href="#ENUM_{$type}" onclick="Open('{$type}')">
<xsl:value-of select="$type" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$type" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="processArguments">
<xsl:param name="argumentList" />
<xsl:choose>
<!-- Base case. -->
<xsl:when test="not(contains($argumentList, ','))">
<xsl:call-template name="processType">
<xsl:with-param name="type"
select="substring-before($argumentList, ' ')" />
</xsl:call-template>
<xsl:text> </xsl:text>
<xsl:value-of select="substring-after($argumentList, ' ')" />
</xsl:when>
<xsl:otherwise>
<xsl:variable name="before"
select="substring-before($argumentList, ',')" />
<xsl:variable name="after"
select="substring-after($argumentList, ',')" />
<xsl:call-template name="processType">
<xsl:with-param name="type"
select="substring-before($before, ' ')" />
</xsl:call-template>
<xsl:value-of select="substring-after($before, ',')" /><xsl:text>, </xsl:text>
<!-- Recursive call. -->
<xsl:call-template name="processArguments">
<xsl:with-param name="argumentList" select="$after" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="sm:Function">
<xsl:param name="path" />
<xsl:param name="class" />
<xsl:variable name="name" select="@name" />
<xsl:variable name="elmt" select="$path/sm:Function[@name=$name]" />
<tr id="{$class}_{$name}">
<xsl:choose>
<!-- Check for documentation. -->
<xsl:when test="string($elmt/@name)=$name">
<td class="returnTypeCell">
<xsl:call-template name="processType">
<xsl:with-param name="type" select="$elmt/@return" />
</xsl:call-template>
</td>
<td class="descriptionCell">
<span class="descriptionName">
<xsl:value-of select="@name" />
</span>
<span class="descriptionArguments">(
<xsl:call-template name="processArguments">
<xsl:with-param name="argumentList"
select="$elmt/@arguments" />
</xsl:call-template>
)</span>
<p class="descriptionText">
<xsl:apply-templates select="$elmt" mode="print">
<xsl:with-param name="class" select="$class" />
</xsl:apply-templates>
</p>
</td>
</xsl:when>
<xsl:otherwise>
<td class="returnTypeCell" />
<td class="descriptionCell">
<span class="descriptionName"><xsl:value-of select="@name" /></span>
</td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:template>
<xsl:template match="sm:Function" mode="print">
<xsl:param name="class" />
<xsl:apply-templates>
<xsl:with-param name="curclass" select="$class" />
</xsl:apply-templates>
</xsl:template>
<xsl:template match="sm:Link">
<xsl:param name="curclass" />
<xsl:choose>
<xsl:when test="string(@class)='' and string(@function)!=''">
<a class="classType" href="#{$curclass}_{@function}"><xsl:apply-templates /></a>
</xsl:when>
<xsl:when test="string(@class)!='' and string(@function)=''">
<a class="classType" href="#{@class}" onclick="Open('{@class}')"><xsl:apply-templates /></a>
</xsl:when>
<xsl:when test="(string(@class)='GLOBAL' or string(@class)='ENUM') and string(@function)!=''">
<a class="classType" href="#{@class}_{@function}" onclick="Open('{@function}')"><xsl:apply-templates /></a>
</xsl:when>
<xsl:when test="string(@class)!='' and string(@function)!=''">
<a class="classType" href="#{@class}_{@function}" onclick="OpenAndMove('{@class}','{@function}')"><xsl:apply-templates /></a>
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates /> <!-- Ignore this Link. -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="sm:Enums">
<div>
<h3 id="Enums">Enums</h3>
<xsl:apply-templates select="sm:Enum">
<xsl:sort select="@name" />
</xsl:apply-templates>
</div>
</xsl:template>
<xsl:template match="sm:Enum">
<div id="ENUM_{@name}">
<a class="trigger" onclick="Toggle('{@name}')">
<img src="closed.gif" id="img_{@name}" alt="" />
Enum <span class="descriptionName"><xsl:value-of select="@name" /></span></a>
<div style="display: none" id="list_{@name}">
<table>
<tr>
<th>Enum</th>
<th>Value</th>
</tr>
<xsl:for-each select="sm:EnumValue">
<xsl:sort data-type="number" select="@value" />
<tr class="code">
<td><xsl:value-of select="@name" /></td>
<td><xsl:value-of select="@value" /></td>
</tr>
</xsl:for-each>
</table>
<br />
</div>
</div>
</xsl:template>
<xsl:template match="sm:Constants">
<div>
<h3 id="Constants">Constants</h3>
<table>
<tr>
<th>Constant</th>
<th>Value</th>
</tr>
<xsl:for-each select="sm:Constant">
<xsl:sort select="@name" />
<tr class="code">
<td><xsl:value-of select="@name" /></td>
<td><xsl:value-of select="@value" /></td>
</tr>
</xsl:for-each>
</table>
<br />
</div>
</xsl:template>
<!-- XXX: This is annoying, how can we tell xsl to just pass the html through? -->
<xsl:template match="sm:code">
<code><xsl:apply-templates /></code>
</xsl:template>
</xsl:stylesheet>