1<?xml version='1.0'?> 2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 xmlns:doc="http://nwalsh.com/xsl/documentation/1.0" 4 exclude-result-prefixes="doc" 5 version='1.0'> 6 7<!-- ******************************************************************** 8 $Id: ebnf.xsl,v 1.9 2003/04/12 21:08:45 nwalsh Exp $ 9 ******************************************************************** 10 11 This file is part of the XSL DocBook Stylesheet distribution. 12 See /README or http://nwalsh.com/docbook/xsl/ for copyright 13 and other information. 14 15 ******************************************************************** --> 16 17<doc:reference xmlns=""> 18<referenceinfo> 19<releaseinfo role="meta"> 20$Id: ebnf.xsl,v 1.9 2003/04/12 21:08:45 nwalsh Exp $ 21</releaseinfo> 22<author><surname>Walsh</surname> 23<firstname>Norman</firstname></author> 24<copyright><year>1999</year><year>2000</year> 25<holder>Norman Walsh</holder> 26</copyright> 27</referenceinfo> 28<title>HTML EBNF Reference</title> 29 30<partintro> 31<section><title>Introduction</title> 32 33<para>This is technical reference documentation for the DocBook XSL 34Stylesheets; it documents (some of) the parameters, templates, and 35other elements of the stylesheets.</para> 36 37<para>This reference describes the templates and parameters relevant 38to formatting EBNF markup.</para> 39 40<para>This is not intended to be <quote>user</quote> documentation. 41It is provided for developers writing customization layers for the 42stylesheets, and for anyone who's interested in <quote>how it 43works</quote>.</para> 44 45<para>Although I am trying to be thorough, this documentation is known 46to be incomplete. Don't forget to read the source, too :-)</para> 47</section> 48</partintro> 49</doc:reference> 50 51<!-- ==================================================================== --> 52 53<xsl:template match="productionset"> 54 <table width="100%" cellpadding="5"> 55 <xsl:if test="$ebnf.table.bgcolor != ''"> 56 <xsl:attribute name="bgcolor"> 57 <xsl:value-of select="$ebnf.table.bgcolor"/> 58 </xsl:attribute> 59 </xsl:if> 60 <xsl:if test="$ebnf.table.border != 0"> 61 <xsl:attribute name="border">1</xsl:attribute> 62 </xsl:if> 63 <xsl:attribute name="class"> 64 <xsl:value-of select="name(.)"/> 65 </xsl:attribute> 66 <xsl:attribute name="summary"> 67 <xsl:text>EBNF</xsl:text> 68 <xsl:if test="title"> 69 <xsl:text> for </xsl:text> 70 <xsl:value-of select="title"/> 71 </xsl:if> 72 </xsl:attribute> 73 74 <xsl:if test="title"> 75 <tr> 76 <th align="left" valign="top" class="{name(.)}"> 77 <xsl:apply-templates select="title"/> 78 </th> 79 </tr> 80 </xsl:if> 81 <tr> 82 <td> 83 <table border="0" width="99%" cellpadding="0"> 84 <xsl:if test="$ebnf.table.bgcolor != ''"> 85 <xsl:attribute name="bgcolor"> 86 <xsl:value-of select="$ebnf.table.bgcolor"/> 87 </xsl:attribute> 88 </xsl:if> 89 <xsl:attribute name="class"> 90 <xsl:value-of select="name(.)"/> 91 </xsl:attribute> 92 <xsl:attribute name="summary">EBNF productions</xsl:attribute> 93 <xsl:apply-templates select="production|productionrecap"/> 94 </table> 95 </td> 96 </tr> 97 </table> 98</xsl:template> 99 100<xsl:template match="productionset/title"> 101 <xsl:apply-templates/> 102</xsl:template> 103 104<xsl:template match="production"> 105 <xsl:param name="recap" select="false()"/> 106 <tr> 107 <td align="left" valign="top" width="3%"> 108 <xsl:text>[</xsl:text> 109 <xsl:number count="production" level="any"/> 110 <xsl:text>]</xsl:text> 111 </td> 112 <td align="right" valign="top" width="10%"> 113 <xsl:choose> 114 <xsl:when test="$recap"> 115 <a> 116 <xsl:attribute name="href"> 117 <xsl:call-template name="href.target"> 118 <xsl:with-param name="object" select="."/> 119 </xsl:call-template> 120 </xsl:attribute> 121 <xsl:apply-templates select="lhs"/> 122 </a> 123 </xsl:when> 124 <xsl:otherwise> 125 <xsl:call-template name="anchor"/> 126 <xsl:apply-templates select="lhs"/> 127 </xsl:otherwise> 128 </xsl:choose> 129 </td> 130 <td valign="top" width="5%" align="center"> 131 <xsl:copy-of select="$ebnf.assignment"/> 132 </td> 133 <td valign="top" width="52%"> 134 <xsl:apply-templates select="rhs"/> 135 <xsl:copy-of select="$ebnf.statement.terminator"/> 136 </td> 137 <td align="left" valign="top" width="30%"> 138 <xsl:choose> 139 <xsl:when test="rhs/lineannotation|constraint"> 140 <xsl:apply-templates select="rhs/lineannotation" mode="rhslo"/> 141 <xsl:apply-templates select="constraint"/> 142 </xsl:when> 143 <xsl:otherwise> 144 <xsl:text> </xsl:text> 145 </xsl:otherwise> 146 </xsl:choose> 147 </td> 148 </tr> 149</xsl:template> 150 151<xsl:template match="productionrecap"> 152 <xsl:variable name="targets" select="key('id',@linkend)"/> 153 <xsl:variable name="target" select="$targets[1]"/> 154 155 <xsl:if test="count($targets)=0"> 156 <xsl:message> 157 <xsl:text>Error: no ID for productionrecap linkend: </xsl:text> 158 <xsl:value-of select="@linkend"/> 159 <xsl:text>.</xsl:text> 160 </xsl:message> 161 </xsl:if> 162 163 <xsl:if test="count($targets)>1"> 164 <xsl:message> 165 <xsl:text>Warning: multiple "IDs" for productionrecap linkend: </xsl:text> 166 <xsl:value-of select="@linkend"/> 167 <xsl:text>.</xsl:text> 168 </xsl:message> 169 </xsl:if> 170 171 <xsl:apply-templates select="$target"> 172 <xsl:with-param name="recap" select="true()"/> 173 </xsl:apply-templates> 174</xsl:template> 175 176<xsl:template match="lhs"> 177 <xsl:apply-templates/> 178</xsl:template> 179 180<xsl:template match="rhs"> 181 <xsl:apply-templates/> 182 <xsl:if test="following-sibling::rhs"> 183 <xsl:text> |</xsl:text> 184 <br/> 185 </xsl:if> 186</xsl:template> 187 188<xsl:template match="nonterminal"> 189 <xsl:variable name="linkend"> 190 <xsl:call-template name="xpointer.idref"> 191 <xsl:with-param name="xpointer" select="@def"/> 192 </xsl:call-template> 193 </xsl:variable> 194 195 <xsl:call-template name="check.id.unique"> 196 <xsl:with-param name="linkend" select="$linkend"/> 197 </xsl:call-template> 198 199 <xsl:call-template name="check.idref.targets"> 200 <xsl:with-param name="linkend" select="$linkend"/> 201 <xsl:with-param name="element-list">production</xsl:with-param> 202 </xsl:call-template> 203 204 <!-- If you don't provide content, you can't point outside this doc. --> 205 <xsl:choose> 206 <xsl:when test="*|text()"><!--nop--></xsl:when> 207 <xsl:otherwise> 208 <xsl:if test="$linkend = ''"> 209 <xsl:message> 210 <xsl:text>Non-terminals with no content must point to </xsl:text> 211 <xsl:text>production elements in the current document.</xsl:text> 212 </xsl:message> 213 <xsl:message> 214 <xsl:text>Invalid xpointer for empty nt: </xsl:text> 215 <xsl:value-of select="@def"/> 216 </xsl:message> 217 </xsl:if> 218 </xsl:otherwise> 219 </xsl:choose> 220 221 <xsl:variable name="href"> 222 <xsl:choose> 223 <xsl:when test="$linkend != ''"> 224 <xsl:variable name="targets" select="key('id',$linkend)"/> 225 <xsl:variable name="target" select="$targets[1]"/> 226 <xsl:call-template name="href.target"> 227 <xsl:with-param name="object" select="$target"/> 228 </xsl:call-template> 229 </xsl:when> 230 <xsl:otherwise> 231 <xsl:value-of select="@def"/> 232 </xsl:otherwise> 233 </xsl:choose> 234 </xsl:variable> 235 236 <a href="{$href}"> 237 <xsl:choose> 238 <xsl:when test="*|text()"> 239 <xsl:apply-templates/> 240 </xsl:when> 241 <xsl:otherwise> 242 <xsl:choose> 243 <xsl:when test="$linkend != ''"> 244 <xsl:variable name="targets" select="key('id',$linkend)"/> 245 <xsl:variable name="target" select="$targets[1]"/> 246 <xsl:apply-templates select="$target/lhs"/> 247 </xsl:when> 248 <xsl:otherwise> 249 <xsl:text>???</xsl:text> 250 </xsl:otherwise> 251 </xsl:choose> 252 </xsl:otherwise> 253 </xsl:choose> 254 </a> 255</xsl:template> 256 257<xsl:template match="rhs/lineannotation"> 258 <!--nop--> 259</xsl:template> 260 261<xsl:template match="rhs/lineannotation" mode="rhslo"> 262 <xsl:text>/* </xsl:text> 263 <xsl:apply-templates/> 264 <xsl:text> */</xsl:text> 265 <br/> 266</xsl:template> 267 268<xsl:template match="constraint"> 269 <xsl:call-template name="check.id.unique"> 270 <xsl:with-param name="linkend" select="@linkend"/> 271 </xsl:call-template> 272 273 <xsl:call-template name="check.idref.targets"> 274 <xsl:with-param name="linkend" select="@linkend"/> 275 <xsl:with-param name="element-list">constraintdef</xsl:with-param> 276 </xsl:call-template> 277 278 <xsl:variable name="href"> 279 <xsl:variable name="targets" select="key('id',@linkend)"/> 280 <xsl:variable name="target" select="$targets[1]"/> 281 <xsl:call-template name="href.target"> 282 <xsl:with-param name="object" select="$target"/> 283 </xsl:call-template> 284 </xsl:variable> 285 286 <xsl:text>[ </xsl:text> 287 288 <xsl:choose> 289 <xsl:when test="@role"> 290 <xsl:value-of select="@role"/> 291 <xsl:text>: </xsl:text> 292 </xsl:when> 293 <xsl:otherwise> 294 <xsl:variable name="targets" select="key('id',@linkend)"/> 295 <xsl:variable name="target" select="$targets[1]"/> 296 <xsl:if test="$target/@role"> 297 <xsl:value-of select="$target/@role"/> 298 <xsl:text>: </xsl:text> 299 </xsl:if> 300 </xsl:otherwise> 301 </xsl:choose> 302 303 <a href="{$href}"> 304 <xsl:variable name="targets" select="key('id',@linkend)"/> 305 <xsl:variable name="target" select="$targets[1]"/> 306 <xsl:apply-templates select="$target" mode="title.markup"/> 307 </a> 308 <xsl:text> ]</xsl:text> 309 <xsl:if test="following-sibling::constraint"> 310 <br/> 311 </xsl:if> 312</xsl:template> 313 314<xsl:template match="constraintdef"> 315 <div class="{name(.)}"> 316 <xsl:call-template name="anchor"/> 317 <xsl:apply-templates/> 318 </div> 319</xsl:template> 320 321<xsl:template match="constraintdef/title"> 322 <p><b><xsl:apply-templates/></b></p> 323</xsl:template> 324 325<!-- ==================================================================== --> 326 327</xsl:stylesheet> 328