| <?xml version="1.0" encoding="UTF-8"?> |
| <xsl:stylesheet version="1.0" |
| xmlns:xsl="http://www.w3.org/1999/XSL/Transform" |
| > |
| <xsl:output method="xml" encoding="utf-8" indent="yes" |
| doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" |
| doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" |
| /> |
| <xsl:template match="/binspec"> |
| <xsl:element name="html"> |
| <xsl:element name="head"> |
| <xsl:element name="meta"> |
| <xsl:attribute name="http-equiv">Content-Type</xsl:attribute> |
| <xsl:attribute name="content">text/xhtml; charset=utf-8</xsl:attribute> |
| </xsl:element> |
| <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> |
| <xsl:element name="script"> |
| <xsl:attribute name="type">text/javascript</xsl:attribute> |
| <xsl:text> |
| $(document).ready(function(){ |
| $('a.toggle-definition').parent().parent().siblings().css('display', 'none'); |
| $('a.toggle-definition').click(function(){ |
| $(this).parent().parent().siblings().toggle(); |
| }); |
| }); |
| </xsl:text> |
| </xsl:element> |
| <xsl:element name="style"> |
| <xsl:attribute name="type">text/css</xsl:attribute> |
| <xsl:text> |
| table.StructType { |
| width: 100%; |
| } |
| table.simple { |
| border: 1px solid black; |
| border-collapse: collapse; |
| } |
| table.simple th , |
| table.simple td { |
| border: 1px solid black; |
| padding: 1em; |
| } |
| thead tr.StructType-name th { |
| background-color: #ccc; |
| } |
| tr.extension-header th { |
| background-color: #ddd; |
| } |
| tr.extension-header th .condition { |
| font-weight: normal; |
| } |
| tr.extends-header th { |
| background-color: #eee; |
| color: #777; |
| font-weight: normal; |
| } |
| table.SelectiveType, |
| table.SelectiveType th, |
| table.SelectiveType td { |
| border: 0; |
| padding: 0; |
| } |
| table.EnumType { |
| border: 0; |
| width: 100%; |
| } |
| table.EnumType tr.name th { |
| border: 0; |
| } |
| table.FlagsType { |
| border: 0; |
| width: 100%; |
| } |
| table.FlagsType tr.name th { |
| border: 0; |
| } |
| a.toggle-definition { |
| text-decoration: underline; |
| cursor: pointer; |
| color: blue; |
| } |
| </xsl:text> |
| </xsl:element> |
| </xsl:element> |
| <xsl:element name="body"> |
| <xsl:element name="h1"> |
| hwp5spec |
| </xsl:element> |
| <xsl:element name="table"> |
| <xsl:element name="tr"> |
| <xsl:element name="th"> |
| Version: |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:value-of select="@version"/> |
| </xsl:element> |
| </xsl:element> |
| </xsl:element> |
| <xsl:element name="h2">Records</xsl:element> |
| <xsl:call-template name="toc-Records" /> |
| <xsl:apply-templates select="TagModel" mode="define" /> |
| <xsl:element name="h2">Structs</xsl:element> |
| <xsl:apply-templates select="StructType" mode="define" /> |
| <xsl:element name="h2">Primitives</xsl:element> |
| <xsl:element name="table"> |
| <xsl:attribute name="class">simple</xsl:attribute> |
| <xsl:element name="tr"> |
| <xsl:element name="th"> |
| name |
| </xsl:element> |
| <xsl:element name="th"> |
| size |
| </xsl:element> |
| <xsl:element name="th"> |
| binfmt |
| </xsl:element> |
| </xsl:element> |
| <xsl:apply-templates select="PrimitiveType" mode="define" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
| <xsl:template name="toc-Records" > |
| <xsl:element name="table"> |
| <xsl:attribute name="class">toc simple</xsl:attribute> |
| <xsl:for-each select="TagModel"> |
| <xsl:element name="tr"> |
| <xsl:element name="td"> |
| <xsl:value-of select="@tag_id" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:element name="a"> |
| <xsl:attribute name="href"> |
| <xsl:text>#</xsl:text> |
| <xsl:value-of select="@name" /> |
| </xsl:attribute> |
| <xsl:value-of select="@name" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:element> |
| </xsl:for-each> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="TagModel" mode="define"> |
| <xsl:element name="div"> |
| <xsl:element name="h3"> |
| <xsl:call-template name="anchor-with-name" /> |
| </xsl:element> |
| <xsl:element name="table"> |
| <xsl:attribute name="class">StructType simple</xsl:attribute> |
| <xsl:for-each select="base"> |
| <xsl:variable name="name" select="@name" /> |
| <xsl:variable name="struct" select="//StructType[@name=$name]" /> |
| <xsl:for-each select="$struct[1]"> |
| <xsl:apply-templates select="." mode="thead" /> |
| <xsl:apply-templates select="extends" mode="tbody" /> |
| <xsl:apply-templates select="." mode="tbody" /> |
| </xsl:for-each> |
| </xsl:for-each> |
| <xsl:for-each select="extension"> |
| <xsl:element name="tbody"> |
| <xsl:apply-templates select="." mode="tr" /> |
| <xsl:apply-templates select="extends" mode="tr" /> |
| <xsl:apply-templates select="member" mode="tr" /> |
| </xsl:element> |
| </xsl:for-each> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="StructType" mode="define"> |
| <xsl:element name="div"> |
| <xsl:element name="h3"> |
| <xsl:call-template name="anchor-with-name" /> |
| </xsl:element> |
| <xsl:element name="table"> |
| <xsl:attribute name="class">StructType simple</xsl:attribute> |
| <xsl:apply-templates select="." mode="thead" /> |
| <xsl:apply-templates select="extends" mode="tbody" /> |
| <xsl:apply-templates select="." mode="tbody" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="StructType" mode="thead"> |
| <xsl:element name="thead"> |
| <xsl:element name="tr"> |
| <xsl:attribute name="class">StructType-name</xsl:attribute> |
| <xsl:element name="th"> |
| <xsl:attribute name="colspan">4</xsl:attribute> |
| <xsl:value-of select="@name" /> |
| </xsl:element> |
| </xsl:element> |
| <xsl:element name="tr"> |
| <xsl:element name="th">name</xsl:element> |
| <xsl:element name="th">type</xsl:element> |
| <xsl:element name="th">condition</xsl:element> |
| <xsl:element name="th">version</xsl:element> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="StructType" mode="tbody"> |
| <xsl:element name="tbody"> |
| <xsl:apply-templates select="member" mode="tr"/> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="extends" mode="tbody"> |
| <xsl:element name="tbody"> |
| <xsl:apply-templates select="." mode="tr" /> |
| <xsl:variable name="extends-name" select="@name" /> |
| <xsl:variable name="struct" select="//StructType[@name=$extends-name]" /> |
| <xsl:apply-templates select="$struct/members" mode="tr" /> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="extends" mode="tr"> |
| <xsl:element name="tr"> |
| <xsl:attribute name="class">extends-header</xsl:attribute> |
| <xsl:element name="th"> |
| <xsl:attribute name="colspan">4</xsl:attribute> |
| <xsl:text>(see </xsl:text> |
| <xsl:call-template name="reference-type-with-name"> |
| <xsl:with-param name="type-name"><xsl:value-of select="@name" /></xsl:with-param> |
| </xsl:call-template> |
| <xsl:text> members)</xsl:text> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="extension" mode="tr" > |
| <xsl:element name="tr"> |
| <xsl:attribute name="class">extension-header</xsl:attribute> |
| <xsl:element name="th"> |
| <xsl:attribute name="colspan">4</xsl:attribute> |
| <xsl:text>Extension: </xsl:text> |
| <xsl:call-template name="toggle-definition"> |
| <xsl:with-param name="text" select="@name" /> |
| </xsl:call-template> |
| <xsl:element name="div"> |
| <xsl:attribute name="class">condition</xsl:attribute> |
| (if <xsl:value-of select="condition" />) |
| </xsl:element> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="member" mode="tr"> |
| <xsl:element name="tr"> |
| <xsl:attribute name="class">member</xsl:attribute> |
| <xsl:element name="th"> |
| <xsl:value-of select="@name" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:apply-templates select="type-ref" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:value-of select="condition" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:value-of select="@version" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template name="anchor-with-name"> |
| <xsl:element name="a"> |
| <xsl:attribute name="name"> |
| <xsl:value-of select="@name" /> |
| </xsl:attribute> |
| <xsl:attribute name="href"> |
| <xsl:text>#</xsl:text> |
| <xsl:value-of select="@name" /> |
| </xsl:attribute> |
| <xsl:value-of select="@name" /> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref[@meta='EnumType']"> |
| <xsl:variable name="name" select="@name" /> |
| <xsl:variable name="scope" select="@scope" /> |
| <xsl:variable name="EnumType" select="//EnumType[@name=$name and @scope=$scope]" /> |
| <xsl:apply-templates select="$EnumType" mode="define" /> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref[@meta='FlagsType']"> |
| <xsl:apply-templates select="FlagsType" mode="define" /> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref[@meta='FixedArrayType']"> |
| <xsl:apply-templates select="FixedArrayType" mode="define" /> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref[@meta='VariableLengthArrayType']"> |
| <xsl:apply-templates select="VariableLengthArrayType" mode="define" /> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref[@meta='X_ARRAY']"> |
| <xsl:apply-templates select="XArrayType" mode="define" /> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref[@meta='SelectiveType']"> |
| <xsl:apply-templates select="SelectiveType" mode="define" /> |
| </xsl:template> |
|
|
| <xsl:template match="type-ref"> |
| <xsl:call-template name="reference-type-with-name"> |
| <xsl:with-param name="type-name"> |
| <xsl:value-of select="@name"/> |
| </xsl:with-param> |
| </xsl:call-template> |
| </xsl:template> |
|
|
| <xsl:template name="reference-type-with-name"> |
| <xsl:param name="type-name" /> |
| <xsl:if test="$type-name != 'int'"> |
| <xsl:element name="a"> |
| <xsl:attribute name="href">#<xsl:value-of select="$type-name" /></xsl:attribute> |
| <xsl:value-of select="$type-name" /> |
| </xsl:element> |
| </xsl:if> |
| </xsl:template> |
|
|
| <xsl:template name="reference-struct-type"> |
| <xsl:element name="a"> |
| <xsl:attribute name="href">#<xsl:value-of select="." /></xsl:attribute> |
| <xsl:value-of select="." /> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="FlagsType" mode="define"> |
| <xsl:element name="table"> |
| <xsl:attribute name="class">FlagsType simple</xsl:attribute> |
| <xsl:element name="tr"> |
| <xsl:attribute name="class">name</xsl:attribute> |
| <xsl:element name="th"> |
| <xsl:attribute name="colspan">3</xsl:attribute> |
| <xsl:variable name="title" select="concat('Flags(', base/type-ref/@name, ')')" /> |
| <xsl:call-template name="toggle-definition"> |
| <xsl:with-param name="text" select="$title" /> |
| </xsl:call-template> |
| </xsl:element> |
| </xsl:element> |
| <xsl:element name="tr"> |
| <xsl:element name="th">bits</xsl:element> |
| <xsl:element name="th">name</xsl:element> |
| <xsl:element name="th">type</xsl:element> |
| </xsl:element> |
| <xsl:for-each select="BitField"> |
| <xsl:element name="tr"> |
| <xsl:element name="td"> |
| <xsl:choose> |
| <xsl:when test="@lsb = @msb"> |
| <xsl:value-of select="@lsb" /> |
| </xsl:when> |
| <xsl:otherwise> |
| <xsl:value-of select="@lsb" /> ~ <xsl:value-of select="@msb" /> |
| </xsl:otherwise> |
| </xsl:choose> |
| </xsl:element> |
| <xsl:element name="th"> |
| <xsl:value-of select="@name" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:apply-templates select="type-ref[@meta='EnumType']" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:for-each> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="FixedArrayType" mode="define"> |
| ARRAY(<xsl:apply-templates select="item-type/type-ref" />, <xsl:value-of select="@size" />) |
| </xsl:template> |
|
|
| <xsl:template match="XArrayType" mode="define"> |
| ARRAY(<xsl:apply-templates select="item-type/type-ref" />, <xsl:value-of select="@size" />) |
| </xsl:template> |
|
|
| <xsl:template match="VariableLengthArrayType" mode="define"> |
| N_ARRAY(<xsl:apply-templates select="count-type/type-ref" />, |
| <xsl:apply-templates select="item-type/type-ref" />) |
| </xsl:template> |
|
|
| <xsl:template match="SelectiveType" mode="define"> |
| if |
| <xsl:value-of select="@selector" /> |
| is: |
| <xsl:element name="ul"> |
| <xsl:attribute name="class">SelectiveType</xsl:attribute> |
| <xsl:for-each select="selection"> |
| <xsl:element name="li"> |
| <xsl:value-of select="@when" />; then |
| <xsl:apply-templates select="type-ref" /> |
| </xsl:element> |
| </xsl:for-each> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="EnumType" mode="define"> |
| <xsl:element name="table"> |
| <xsl:attribute name="class">EnumType simple</xsl:attribute> |
| <xsl:element name="tr"> |
| <xsl:attribute name="class">name</xsl:attribute> |
| <xsl:element name="th"> |
| <xsl:attribute name="colspan">2</xsl:attribute> |
| <xsl:text>Enum </xsl:text> |
| <xsl:for-each select="@scope" > |
| <xsl:call-template name="reference-struct-type" /> |
| </xsl:for-each> |
| <xsl:text>.</xsl:text> |
| <xsl:call-template name="toggle-definition"> |
| <xsl:with-param name="text" select="@name" /> |
| </xsl:call-template> |
| </xsl:element> |
| </xsl:element> |
| <xsl:for-each select="item"> |
| <xsl:element name="tr"> |
| <xsl:element name="td"> |
| <xsl:value-of select="@value" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:value-of select="@name" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:for-each> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template match="PrimitiveType" mode="define"> |
| <xsl:element name="tr"> |
| <xsl:element name="th"> |
| <xsl:call-template name="anchor-with-name" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:value-of select="@size" /> |
| </xsl:element> |
| <xsl:element name="td"> |
| <xsl:value-of select="binfmt" /> |
| </xsl:element> |
| </xsl:element> |
| </xsl:template> |
|
|
| <xsl:template name="toggle-definition"> |
| <xsl:param name="text" /> |
| <xsl:element name="a"> |
| <xsl:attribute name="class">toggle-definition</xsl:attribute> |
| <xsl:value-of select="$text" /> |
| </xsl:element> |
| </xsl:template> |
| </xsl:stylesheet> |
|
|