Commit 015c42e1 authored by Peter Hutterer's avatar Peter Hutterer Committed by Kristian H. Kristensen

protocol: add xslt stylesheet to prettify the protocol

Includes rudimentary styling only.
Signed-off-by: Peter Hutterer's avatarPeter Hutterer <peter.hutterer@who-t.net>
parent 50e87a00
SUBDIRS = src
SUBDIRS = src protocol
ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
......
......@@ -48,9 +48,13 @@ if test "x$enable_scanner" = "xyes"; then
AC_SUBST(EXPAT_LIBS)
fi
AC_PATH_PROG(XSLTPROC, xsltproc)
AM_CONDITIONAL([HAVE_XSLTPROC], [test $XSLTPROC != ""])
AC_CONFIG_FILES([Makefile
wayland-scanner.m4
src/Makefile
src/wayland-server.pc
src/wayland-client.pc])
src/wayland-client.pc
protocol/Makefile])
AC_OUTPUT
if HAVE_XSLTPROC
doc_DATA = wayland.html wayland.css
wayland.html: wayland.xml protocol.xsl
$(AM_V_GEN)$(XSLTPROC) protocol.xsl wayland.xml > $@
endif
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="UTF-8"/>
<xsl:preserve-space elements="copyright"/>
<xsl:template match="/">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<link href="wayland.css" rel="stylesheet" type="text/css" />
<title>Wayland</title>
</head>
<body>
<h1><img src="wayland.png" alt="Wayland logo" /></h1>
<h1>Wayland Protocol Specification</h1>
<!-- Copyright blurb -->
<xsl:apply-templates select="protocol/copyright"/>
<!-- TOC -->
<xsl:apply-templates select="protocol" mode="toc" />
<!-- Interface descriptions -->
<xsl:apply-templates select="protocol/interface" mode="interface_description" />
</body>
</html>
</xsl:template>
<!-- Copyright blurb -->
<xsl:template match="copyright">
<div>
<pre class="copyright">
<xsl:value-of select="." disable-output-escaping="yes"/>
</pre>
</div>
</xsl:template>
<!-- TOC -->
<xsl:template match="protocol" mode="toc">
<div class="toc">
<h2>Table of Contents</h2>
<ul>
<xsl:apply-templates select="interface" mode="toc" />
</ul>
</div>
</xsl:template>
<!-- interface in TOC -->
<xsl:template match="interface" mode="toc">
<li>
<xsl:call-template name="link">
<xsl:with-param name="which" select="'href'" />
</xsl:call-template>
<!-- request list -->
<xsl:if test="request">
<div>
Requests:
<ul>
<xsl:apply-templates select="request" mode="toc"/>
</ul>
</div>
</xsl:if>
<!-- event list -->
<xsl:if test="event">
<div>
Events:
<ul>
<xsl:apply-templates select="event" mode="toc"/>
</ul>
</div>
</xsl:if>
<!-- enum list -->
<xsl:if test="enum">
<div>
Enums:
<ul>
<xsl:apply-templates select="enum" mode="toc"/>
</ul>
</div>
</xsl:if>
</li>
</xsl:template>
<!--
Template to create a <a> tag in the form
#<interfacename>-<request|event>-<request/event name>
the '#' prefix is added if $which is 'href'
$which decides which attribute name (href or name) of <a> to set
-->
<xsl:template name="link" >
<xsl:param name="which" />
<a>
<xsl:attribute name="{$which}">
<xsl:if test="$which = 'href'">#</xsl:if>
<xsl:value-of select="../@name"/>
<xsl:text>-</xsl:text> <!-- xsl:text needed to avoid whitespace -->
<xsl:value-of select="name()"/>
<xsl:text>-</xsl:text> <!-- xsl:text needed to avoid whitespace -->
<xsl:value-of select="@name"/></xsl:attribute>
<!-- only display link text for href links -->
<xsl:if test="$which = 'href'">
<span class="mono"><xsl:value-of select="@name"/></span>
<xsl:if test="description/@summary"> - <xsl:value-of select="description/@summary"/></xsl:if>
</xsl:if>
</a>
</xsl:template>
<!-- requests and events in TOC -->
<xsl:template match="request|event|enum" mode="toc">
<li>
<xsl:call-template name="link">
<xsl:with-param name="which" select="'href'" />
</xsl:call-template>
</li>
</xsl:template>
<!-- Interface descriptions -->
<xsl:template match="protocol/interface" mode="interface_description">
<div class="interface">
<xsl:call-template name="link">
<xsl:with-param name="which" select="'name'" />
</xsl:call-template>
<h1>
<span class="mono"><xsl:value-of select="@name" /></span>
<!-- only show summary if it exists -->
<xsl:if test="description/@summary">
- <xsl:value-of select="description/@summary" />
</xsl:if>
</h1>
<p class="version">Version: <xsl:value-of select="@version" /></p>
<p><xsl:value-of select="description"/></p>
<xsl:if test="request">
<div class="requests">
<h2>Requests</h2>
<!-- Request list -->
<xsl:apply-templates select="request" mode="interface_description" />
</div>
</xsl:if>
<xsl:if test="event">
<div class="events">
<h2>Events</h2>
<!-- Event list -->
<xsl:apply-templates select="event" mode="interface_description" />
</div>
</xsl:if>
<xsl:if test="enum">
<div class="enums">
<h2>Enums</h2>
<!-- enum list -->
<xsl:apply-templates select="enum" mode="interface_description"/>
</div>
</xsl:if>
</div>
</xsl:template>
<!-- table contents for request/event arguments or enum values -->
<xsl:template match="arg|entry">
<tr>
<td class="arg_name"><xsl:value-of select="@name"/></td>
<xsl:if test="name() = 'arg'" >
<td class="arg_type"><xsl:value-of select="@type"/></td>
</xsl:if>
<xsl:if test="name() = 'entry'" >
<td class="arg_value"><xsl:value-of select="@value"/></td>
</xsl:if>
<td class="arg_desc"><xsl:value-of select="@summary"/></td>
</tr>
</xsl:template>
<!-- Request/event list -->
<xsl:template match="request|event|enum" mode="interface_description">
<div>
<xsl:call-template name="link">
<xsl:with-param name="which" select="'name'" />
</xsl:call-template>
<h3>
<span class="mono"><xsl:value-of select="../@name"/>::<xsl:value-of select="@name" /></span>
<xsl:if test="description/@summary">
- <xsl:value-of select="description/@summary" />
</xsl:if>
</h3>
<p><xsl:value-of select="description"/></p>
<xsl:if test="arg">
Arguments:
<table>
<xsl:apply-templates select="arg"/>
</table>
</xsl:if>
<xsl:if test="entry">
Values:
<table>
<xsl:apply-templates select="entry"/>
</table>
</xsl:if>
</div>
</xsl:template>
</xsl:stylesheet>
<!-- vim: set expandtab shiftwidth=2: -->
body { padding: 0px 150px; }
h1 { margin: 40px 0px; color: #aaa; }
p { margin: 20px 0px; }
h1 img { vertical-align: middle; border-width: 0px; }
h2 { font-family: sans; color: #888; }
h3 { font-family: sans; color: #888; font-style: italic; }
a { color: #444; }
a:hover { color: #888; }
a:visited { color: #666; }
li { margin: 10px 0px };
table { border: 1px solid gray;}
.version { font-size: small }
div.interface { padding: 2% }
div.requests div:nth-child(even) { background-color: #eeeeee; }
div.requests div { margin-left: 2%; padding-left: 2%; }
div.requests table { border: 0px; margin: 10px; }
div.requests table th { padding: 5px }
div.requests table td { padding: 5px }
div.events div:nth-child(even) { background-color: #eeeeee; }
div.events div { margin-left: 2%; padding-left: 2%; }
div.events table { border: 0px; margin: 10px; }
div.events table th { padding: 5px }
div.events table td { padding: 5px }
div.enums div:nth-child(even) { background-color: #eeeeee; }
div.enums div { margin-left: 2%; padding-left: 2%; }
div.enums table { border: 0px; margin: 10px; }
div.enums table th { padding: 5px }
div.enums table td { padding: 5px }
.arg_name { font-family: monospace; padding:5px}
.arg_type { font-family: monospace; color: #338833; padding:5px }
.arg_value { font-family: monospace; color: #338833; padding:5px }
.arg_desc { font-style: italic;padding:5px; }
.mono { font-family: monospace; font-weight: bold; }
div.toc span { font-size: 11pt; line-height: 150%; }
div.toc li li { line-height: 100%; margin: 0%; }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment