DITA-OT_CXX_Plugin/cxxapiref/xsl/cxxapiref2xhtmlImpl.xsl
changeset 1 82f11024044a
equal deleted inserted replaced
0:42188c7ea2d9 1:82f11024044a
       
     1 <?xml version="1.0" encoding="UTF-8" ?>
       
     2 <!--
       
     3  (C) Copyright Nokia Corporation and/or its subsidiary(-ies) 2009 - 2010. All rights reserved.
       
     4 -->
       
     5 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
       
     6                 xmlns:dita2html="http://dita-ot.sourceforge.net/ns/200801/dita2html"
       
     7                 version="1.0"
       
     8                 exclude-result-prefixes="dita2html">
       
     9 
       
    10   <xsl:include href="utilities.xsl"/>
       
    11 
       
    12   <xsl:strip-space elements="cxxFunctionParameterDeclaredType"/>
       
    13   
       
    14   <!-- Styling -->
       
    15   <!-- ===================================================================== -->
       
    16 
       
    17   <xsl:template match="*[contains(@class, ' topic/topic ')]" mode="gen-user-styles">
       
    18     <link rel="stylesheet" type="text/css" href="{$PATH2PROJ}{$CSSPATH}nokiacxxref.css"/>
       
    19   </xsl:template>
       
    20   
       
    21   <xsl:template match="*[contains(@class, ' apiRef/apiRef ')]" mode="gen-user-head">
       
    22     <meta name="keywords" content="api"/>
       
    23   </xsl:template>
       
    24   
       
    25   <xsl:template match="*[contains(@class,' cxxClass/cxxClass ') or
       
    26                           contains(@class, ' cxxStruct/cxxStruct ') or
       
    27                           contains(@class, ' cxxUnion/cxxUnion ')]//
       
    28                           *[contains(@class, ' topic/link ')][@role='parent']" priority="2000"/>
       
    29   <xsl:template match="*[contains(@class,' cxxClass/cxxClass ') or
       
    30                           contains(@class, ' cxxStruct/cxxStruct ') or
       
    31                           contains(@class, ' cxxUnion/cxxUnion ')]//
       
    32                           *[contains(@class, ' topic/link ')]
       
    33                            [@role='child' or @role='descendant']" priority="2000"/>
       
    34 
       
    35   <!-- Common API reference overrides -->
       
    36   <!-- ===================================================================== -->
       
    37 
       
    38   <!-- Remove title from apiDesc -->
       
    39   <xsl:template match="*[contains(@class,' apiRef/apiDesc ')]" mode="section-fmt">
       
    40     <xsl:if test="node()">
       
    41       <div>
       
    42         <xsl:call-template name="start-revflag"/>
       
    43         <!--
       
    44         <xsl:apply-templates select="." mode="sectionTitle">
       
    45           <xsl:with-param name="titleType" select="$titleType"/>
       
    46         </xsl:apply-templates>
       
    47         -->
       
    48         <xsl:apply-templates select="node()[not(contains(@class,' topic/title '))]"/>
       
    49         <xsl:call-template name="end-revflag"/>
       
    50       </div>
       
    51     </xsl:if>
       
    52   </xsl:template>
       
    53 
       
    54   <!-- Override to support "cxxapiref.title-fmt" mode. -->
       
    55   <xsl:template match="*[contains(@class, ' apiRef/apiRef ')]/*[contains(@class, ' topic/title ')]">
       
    56     <xsl:param name="headinglevel">
       
    57       <xsl:choose>
       
    58         <xsl:when test="count(ancestor::*[contains(@class,' topic/topic ')]) > 6">6</xsl:when>
       
    59         <xsl:otherwise><xsl:value-of select="count(ancestor::*[contains(@class,' topic/topic ')])"/></xsl:otherwise>
       
    60       </xsl:choose>
       
    61     </xsl:param>
       
    62     <xsl:element name="h{$headinglevel}">
       
    63       <xsl:attribute name="class">topictitle<xsl:value-of select="$headinglevel"/></xsl:attribute>
       
    64       <xsl:call-template name="commonattributes">
       
    65         <xsl:with-param name="default-output-class">topictitle<xsl:value-of select="$headinglevel"/></xsl:with-param>
       
    66       </xsl:call-template>
       
    67       <xsl:apply-templates select="." mode="cxxapiref.title-fmt"/>
       
    68     </xsl:element>
       
    69   </xsl:template>
       
    70   
       
    71   <!-- API Reference topic title content -->
       
    72   <xsl:template match="*[contains(@class,' topic/title ')]" mode="cxxapiref.title-fmt" priority="0">
       
    73     <xsl:apply-templates/>
       
    74   </xsl:template>
       
    75 
       
    76   <!-- Disable API reference body processing that adds a horizontal rule --> 
       
    77   <xsl:template match="*[contains(@class,' apiRef/apiDetail ')]" priority="0">
       
    78     <xsl:call-template name="topic.body"/>
       
    79   </xsl:template>
       
    80 
       
    81   <!-- File -->
       
    82   <!-- ===================================================================== -->
       
    83   
       
    84   <!-- File title content -->
       
    85   <xsl:template match="*[contains(@class, ' cxxFile/cxxFile ')]/*[contains(@class,' topic/title ')]" mode="cxxapiref.title-fmt">
       
    86     <xsl:apply-templates/>
       
    87     <xsl:text> </xsl:text>
       
    88     <xsl:call-template name="getString">
       
    89       <xsl:with-param name="stringName" select="'File Reference'"/>
       
    90     </xsl:call-template>
       
    91   </xsl:template>
       
    92   
       
    93   <xsl:template match="*[contains(@class, ' cxxFile/cxxFileAPIItemLocation ')]"/>
       
    94 
       
    95   <!-- Struct -->
       
    96   <!-- ===================================================================== -->
       
    97   
       
    98   <!-- Struct title content -->
       
    99   <xsl:template match="*[contains(@class, ' cxxStruct/cxxStruct ')]/*[contains(@class,' topic/title ')]" mode="cxxapiref.title-fmt">
       
   100     <xsl:apply-templates/>
       
   101     <xsl:call-template name="cxxapiref.title-fmt.suffix">
       
   102       <xsl:with-param name="type" select="'Struct'"/>
       
   103     </xsl:call-template>
       
   104   </xsl:template>
       
   105 
       
   106   <!-- Union -->
       
   107   <!-- ===================================================================== -->
       
   108 
       
   109   <!-- Class or union title content -->
       
   110   <xsl:template match="*[contains(@class, ' cxxUnion/cxxUnion ')]/
       
   111                          *[contains(@class,' topic/title ')]" mode="cxxapiref.title-fmt">
       
   112     <xsl:apply-templates/>
       
   113     <xsl:call-template name="cxxapiref.title-fmt.suffix">
       
   114       <xsl:with-param name="type" select="'Union'"/>
       
   115     </xsl:call-template>
       
   116   </xsl:template>
       
   117 
       
   118   <!-- Class -->
       
   119   <!-- ===================================================================== -->
       
   120   
       
   121   <!-- Override API reference with base processing -->
       
   122   <xsl:template match="/*[contains(@class,' cxxClass/cxxClass ') or
       
   123                           contains(@class, ' cxxStruct/cxxStruct ') or
       
   124                           contains(@class, ' cxxFile/cxxFile ') or
       
   125                           contains(@class, ' cxxUnion/cxxUnion ')]">
       
   126     <xsl:call-template name="chapter-setup"/>
       
   127   </xsl:template>
       
   128   
       
   129   <!-- Class or union title content -->
       
   130   <xsl:template match="*[contains(@class, ' cxxClass/cxxClass ')]/
       
   131                          *[contains(@class,' topic/title ')]" mode="cxxapiref.title-fmt">
       
   132     <xsl:apply-templates/>
       
   133     <xsl:call-template name="cxxapiref.title-fmt.suffix">
       
   134       <xsl:with-param name="type" select="'Class'"/>
       
   135     </xsl:call-template>
       
   136   </xsl:template>
       
   137   
       
   138   <xsl:template name="cxxapiref.title-fmt.suffix">
       
   139     <xsl:param name="type"/>
       
   140     
       
   141     <xsl:variable name="templates"
       
   142                   select="../*[contains(@class, ' cxxClass/cxxClassDetail ') or
       
   143                                contains(@class, ' cxxStruct/cxxStructDetail ') or
       
   144                                contains(@class, ' cxxUnion/cxxUnionDetail ')]/
       
   145                                *[contains(@class, ' cxxClass/cxxClassDefinition ') or
       
   146                                  contains(@class, ' cxxStruct/cxxStructDefinition ') or
       
   147                                  contains(@class, ' cxxUnion/cxxUnionDefinition ')]/
       
   148                                  *[contains(@class, ' cxxClass/cxxClassTemplateParamList ') or
       
   149                                    contains(@class, ' cxxStruct/cxxStructTemplateParamList ') or
       
   150                                    contains(@class, ' cxxUnion/cxxUnionTemplateParamList ')]"/>
       
   151     <xsl:for-each select="$templates">
       
   152       <xsl:text>&lt; </xsl:text>
       
   153         <xsl:for-each select="*[contains(@class, ' cxxClass/cxxClassTemplateParameter ') or
       
   154                                 contains(@class, ' cxxStruct/cxxStructTemplateParameter ') or
       
   155                                 contains(@class, ' cxxUnion/cxxUnionTemplateParameter ')]">
       
   156           <xsl:if test="not(position() = 1)">, </xsl:if>
       
   157           <xsl:value-of select="*[contains(@class, ' cxxClass/cxxClassTemplateParamDeclarationName ') or
       
   158                                   contains(@class, ' cxxStruct/cxxStructTemplateParamDeclarationName ') or
       
   159                                   contains(@class, ' cxxUnion/cxxUnionTemplateParamDeclarationName ')]"/>
       
   160         </xsl:for-each>
       
   161         <xsl:text> &gt;</xsl:text>
       
   162     </xsl:for-each>
       
   163     <xsl:text> </xsl:text>
       
   164     <xsl:choose>
       
   165       <xsl:when test="contains(., '&lt;') or $templates">
       
   166         <xsl:call-template name="getString">
       
   167           <xsl:with-param name="stringName" select="concat($type, ' Template Reference')"/>
       
   168         </xsl:call-template>
       
   169       </xsl:when>
       
   170       <xsl:otherwise>
       
   171         <xsl:call-template name="getString">
       
   172           <xsl:with-param name="stringName" select="concat($type, ' Reference')"/>
       
   173         </xsl:call-template>
       
   174       </xsl:otherwise>
       
   175     </xsl:choose>
       
   176   </xsl:template>
       
   177 
       
   178   <!-- Class and struct derivation section -->
       
   179   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   180                          contains(@class, ' cxxStruct/cxxStructDerivations ')]">
       
   181     <xsl:call-template name="topic.section"/>
       
   182   </xsl:template>
       
   183   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   184                          contains(@class, ' cxxStruct/cxxStructDerivations ')]" mode="get-output-class">
       
   185     <xsl:text>section derivation</xsl:text>
       
   186   </xsl:template>
       
   187   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   188                          contains(@class, ' cxxStruct/cxxStructDerivations ')]" mode="section-fmt">
       
   189     <xsl:variable name="flagrules">
       
   190       <xsl:call-template name="getrules"/>
       
   191     </xsl:variable>
       
   192     <xsl:call-template name="start-revflag">
       
   193       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   194     </xsl:call-template>
       
   195     <xsl:call-template name="sect-heading">
       
   196       <xsl:with-param name="defaulttitle">
       
   197         <xsl:call-template name="getString">
       
   198           <xsl:with-param name="stringName" select="'cxxBaseClass'"/>
       
   199         </xsl:call-template>
       
   200       </xsl:with-param>
       
   201     </xsl:call-template>
       
   202     <ul class="derivation derivation-root">
       
   203       <xsl:apply-templates select="ancestor::*[contains(@class, ' cxxClass/cxxClass ') or
       
   204                                                contains(@class, ' cxxStruct/cxxStruct ')][1]" mode="derivation"/>
       
   205     </ul>
       
   206     <!--
       
   207     <xsl:call-template name="sect-heading">
       
   208       <xsl:with-param name="defaulttitle">Reverse inheritance path</xsl:with-param>
       
   209     </xsl:call-template>
       
   210     <xsl:apply-templates select="ancestor::*[contains(@class, ' cxxClass/cxxClass ') or
       
   211                                              contains(@class, ' cxxStruct/cxxStruct ')][1]" mode="derivation.reverse"/>
       
   212     -->
       
   213     <xsl:call-template name="end-revflag">
       
   214       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   215     </xsl:call-template>
       
   216   </xsl:template>
       
   217   
       
   218   <!-- Class and struct derivation walker -->
       
   219   <xsl:template match="*[contains(@class, ' cxxClass/cxxClass ') or
       
   220                          contains(@class, ' cxxStruct/cxxStruct ')]"
       
   221                 mode="derivation">
       
   222     <xsl:param name="link" select="/.."/>
       
   223     <xsl:param name="depth" select="0"/>
       
   224     <xsl:param name="class"/>
       
   225     <li class="derivation-depth-{$depth} {$class}">
       
   226       <xsl:choose>
       
   227         <xsl:when test="$link">
       
   228           <xsl:apply-templates select="$link"/>
       
   229         </xsl:when>
       
   230         <xsl:otherwise>
       
   231           <xsl:value-of select="*[contains(@class, ' topic/title ')]"/>
       
   232         </xsl:otherwise>
       
   233       </xsl:choose>
       
   234       <xsl:variable name="derivation"
       
   235                     select="*[contains(@class, ' topic/body ')]/
       
   236                               *[contains(@class, ' apiRef/apiDef ')]/
       
   237                                 *[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   238                                   contains(@class, ' cxxStruct/cxxStructDerivations ')]/
       
   239                                   *[contains(@class, ' cxxClass/cxxClassDerivation ') or
       
   240                                     contains(@class, ' cxxStruct/cxxStructDerivation ')]"/>
       
   241       <xsl:if test="$derivation">
       
   242         <ul class="derivation">
       
   243          <xsl:for-each select="$derivation">
       
   244           <xsl:variable name="cls">
       
   245             <xsl:if test="not(position() = last())">derivation-has-next</xsl:if>
       
   246           </xsl:variable>
       
   247           <xsl:variable name="base" select="*[contains(@class, ' cxxClass/cxxClassBaseClass ') or
       
   248                                               contains(@class, ' cxxClass/cxxClassBaseStruct ') or
       
   249                                               contains(@class, ' cxxClass/cxxClassBaseUnion ') or
       
   250                                               contains(@class, ' cxxStruct/cxxStructBaseClass ') or
       
   251                                               contains(@class, ' cxxStruct/cxxStructBaseStruct ') or
       
   252                                               contains(@class, ' cxxStruct/cxxStructBaseUnion ')]"/>
       
   253           <xsl:variable name="url"> 
       
   254             <xsl:call-template name="strip-url-fragment">
       
   255               <xsl:with-param name="url" select="$base/@href"/>
       
   256             </xsl:call-template>
       
   257           </xsl:variable>
       
   258           <xsl:if test="normalize-space($url)"><!-- infinite loop guard -->
       
   259             <xsl:variable name="doc" select="document($url, .)"/>
       
   260             <xsl:apply-templates select="$doc/*[contains(@class, ' cxxClass/cxxClass ') or
       
   261                                                 contains(@class, ' cxxStruct/cxxStruct ')]"
       
   262                                  mode="derivation">
       
   263                <xsl:with-param name="link" select="$base"/>
       
   264                <xsl:with-param name="depth" select="$depth + 1"/>
       
   265                <xsl:with-param name="class" select="$cls"/>
       
   266              </xsl:apply-templates>
       
   267            </xsl:if>
       
   268          </xsl:for-each>
       
   269         </ul>
       
   270       </xsl:if>
       
   271     </li>
       
   272   </xsl:template>
       
   273   
       
   274   <!-- Class and struct derivation walker. The walker inverts the tree. -->
       
   275   <!--
       
   276   <xsl:template match="*[contains(@class, ' cxxClass/cxxClass ') or
       
   277                          contains(@class, ' cxxStruct/cxxStruct ')]"
       
   278                 mode="derivation.reverse">
       
   279     <xsl:param name="link" select="/.."/>
       
   280     <xsl:param name="contents"/>
       
   281     
       
   282     <xsl:variable name="title">
       
   283       <xsl:choose>
       
   284         <xsl:when test="$link">
       
   285           <xsl:apply-templates select="$link"/>
       
   286         </xsl:when>
       
   287         <xsl:otherwise>
       
   288           <xsl:value-of select="*[contains(@class, ' topic/title ')]"/>
       
   289         </xsl:otherwise>
       
   290       </xsl:choose>
       
   291     </xsl:variable>
       
   292     <xsl:variable name="derivation"
       
   293                   select="*[contains(@class, ' topic/body ')]/
       
   294                             *[contains(@class, ' apiRef/apiDef ')]/
       
   295                               *[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   296                                 contains(@class, ' cxxStruct/cxxStructDerivations ')]/
       
   297                                 *[contains(@class, ' cxxClass/cxxClassDerivation ') or
       
   298                                   contains(@class, ' cxxStruct/cxxStructDerivation ')]"/>
       
   299     <xsl:choose>
       
   300       <xsl:when test="$derivation">
       
   301        <xsl:for-each select="$derivation">
       
   302          <xsl:variable name="base" select="*[contains(@class, ' cxxClass/cxxClassBaseClass ') or
       
   303                                              contains(@class, ' cxxClass/cxxClassBaseStruct ') or
       
   304                                              contains(@class, ' cxxClass/cxxClassBaseUnion ') or
       
   305                                              contains(@class, ' cxxStruct/cxxStructBaseClass ') or
       
   306                                              contains(@class, ' cxxStruct/cxxStructBaseStruct ') or
       
   307                                              contains(@class, ' cxxStruct/cxxStructBaseUnion ')]"/>
       
   308          <xsl:variable name="url"> 
       
   309            <xsl:call-template name="strip-url-fragment">
       
   310              <xsl:with-param name="url" select="$base/@href"/>
       
   311            </xsl:call-template>
       
   312          </xsl:variable>
       
   313          <xsl:if test="normalize-space($url)">
       
   314            <xsl:variable name="doc" select="document($url, .)"/>
       
   315 
       
   316            <xsl:apply-templates select="$doc/*[contains(@class, ' cxxClass/cxxClass ') or
       
   317                                                contains(@class, ' cxxStruct/cxxStruct ')]"
       
   318                                 mode="derivation.reverse">
       
   319              <xsl:with-param name="contents">
       
   320                <li>
       
   321                  <xsl:copy-of select="$title"/>
       
   322                  <xsl:if test="normalize-space($contents)">
       
   323                    <ul>
       
   324                      <xsl:copy-of select="$contents"/>
       
   325                    </ul>  
       
   326                  </xsl:if>
       
   327                </li>
       
   328              </xsl:with-param>
       
   329              <xsl:with-param name="link" select="$base"/>
       
   330            </xsl:apply-templates>
       
   331          </xsl:if>
       
   332        </xsl:for-each>
       
   333       </xsl:when>
       
   334       <xsl:otherwise>
       
   335         <ul class="derivation-root">
       
   336           <li>
       
   337             <xsl:copy-of select="$title"/>
       
   338             <ul>
       
   339               <xsl:copy-of select="$contents"/>
       
   340             </ul>
       
   341           </li>
       
   342         </ul>
       
   343       </xsl:otherwise>
       
   344     </xsl:choose>
       
   345   </xsl:template>
       
   346   -->
       
   347 
       
   348   <!-- Class, struct, or union body -->
       
   349   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassDetail ') or
       
   350                          contains(@class, ' cxxStruct/cxxStructDetail ') or
       
   351                          contains(@class, ' cxxUnion/cxxUnionDetail ')]">
       
   352     <xsl:apply-templates select="*[contains(@class, ' cxxClass/cxxClassDefinition ') or
       
   353                                    contains(@class, ' cxxStruct/cxxStructDefinition ') or
       
   354                                    contains(@class, ' cxxUnion/cxxUnionDefinition ')]" mode="signature"/>
       
   355     <xsl:apply-templates select="*[(contains(@class, ' topic/section ') or
       
   356                                     contains(@class, ' topic/example ')) and
       
   357                                    not(contains(@class, ' apiRef/apiDef '))]"/>
       
   358     <xsl:apply-templates select="*[contains(@class, ' cxxClass/cxxClassDefinition ') or
       
   359                                    contains(@class, ' cxxStruct/cxxStructDefinition ')]/
       
   360                                    *[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   361                                      contains(@class, ' cxxStruct/cxxStructDerivations ')]"/>
       
   362     <xsl:apply-templates select="../*[contains(@class, ' cxxClass/cxxClassNested ') or
       
   363                                       contains(@class, ' cxxStruct/cxxStructNested ') or
       
   364                                       contains(@class, ' cxxUnion/cxxUnionNested ')]/
       
   365                                       *[contains(@class, ' cxxClass/cxxClassNestedDetail ') or
       
   366                                         contains(@class, ' cxxStruct/cxxStructNestedDetail ') or
       
   367                                         contains(@class, ' cxxUnion/cxxUnionNestedDetail ')]"/>
       
   368     <div class="section member-index">
       
   369       <xsl:for-each select="..">
       
   370         <xsl:variable name="inherited" select="*[contains(@class, ' cxxClass/cxxClassInherits ') or
       
   371                                                  contains(@class, ' cxxStruct/cxxStructInherits ')]/
       
   372                                                  *[contains(@class, ' cxxClass/cxxClassInheritsDetail ') or
       
   373                                                    contains(@class, ' cxxStruct/cxxStructInheritsDetail ')]"/>
       
   374 <!--
       
   375         <xsl:call-template name="member-index-block">
       
   376           <xsl:with-param name="title" select="'Member Nested Classes'"/>
       
   377           <xsl:with-param name="nodes" select="*[contains(@class, ' cxxClass/cxxClassNested ')]"/>
       
   378         </xsl:call-template>
       
   379 -->      
       
   380         <xsl:call-template name="member-index-group">
       
   381           <xsl:with-param name="title" select="'Member Functions'"/>
       
   382           <xsl:with-param name="nodes" select="*[contains(@class, ' cxxFunction/cxxFunction ')]"/>
       
   383         </xsl:call-template>
       
   384         <xsl:call-template name="member-index-block">
       
   385           <xsl:with-param name="title" select="'Inherited Functions'"/>
       
   386           <xsl:with-param name="nodes" select="$inherited/*[contains(@class, ' cxxClass/cxxClassFunctionInherited ') or
       
   387                                                             contains(@class, ' cxxStruct/cxxStructFunctionInherited ')]"/>
       
   388         </xsl:call-template>
       
   389         <xsl:call-template name="member-index-group">
       
   390           <xsl:with-param name="title" select="'Member Enumerations'"/>
       
   391           <xsl:with-param name="nodes" select="*[contains(@class, ' cxxEnumeration/cxxEnumeration ')]"/>
       
   392         </xsl:call-template>
       
   393         <xsl:call-template name="member-index-block">
       
   394           <xsl:with-param name="title" select="'Inherited Enumerations'"/>
       
   395           <xsl:with-param name="nodes" select="$inherited/*[contains(@class, ' cxxClass/cxxClassEnumerationInherited ') or
       
   396                                                             contains(@class, ' cxxStruct/cxxStructEnumerationInherited ')]"/>
       
   397         </xsl:call-template>
       
   398         <xsl:call-template name="member-index-group">
       
   399           <xsl:with-param name="title" select="'Member Type Definitions'"/>
       
   400           <xsl:with-param name="nodes" select="*[contains(@class, ' cxxTypedef/cxxTypedef ')]"/>
       
   401         </xsl:call-template>
       
   402         <xsl:call-template name="member-index-group">
       
   403           <xsl:with-param name="title" select="'Attributes'"/>
       
   404           <xsl:with-param name="nodes" select="*[contains(@class, ' cxxVariable/cxxVariable ')]"/>
       
   405         </xsl:call-template>
       
   406         <xsl:call-template name="member-index-block">
       
   407           <xsl:with-param name="title" select="'Inherited Attributes'"/>
       
   408           <xsl:with-param name="nodes" select="$inherited/*[contains(@class, ' cxxClass/cxxClassVariableInherited ') or
       
   409                                                             contains(@class, ' cxxStruct/cxxStructVariableInherited ')]"/>
       
   410         </xsl:call-template>
       
   411       </xsl:for-each>
       
   412     </div>
       
   413     <xsl:for-each select="..">
       
   414       <xsl:for-each select="*[contains(@class, ' topic/related-links ')]">
       
   415         <xsl:call-template name="topic.related-links"/>
       
   416       </xsl:for-each>
       
   417     </xsl:for-each>
       
   418 
       
   419     <!-- Pull nested topics into groups, normal fall-through is disabled -->
       
   420     <xsl:variable name="all-functions" select="../*[contains(@class, ' cxxFunction/cxxFunction ')]"/>
       
   421     <xsl:variable name="constructor" select="$all-functions[*[contains(@class, ' apiRef/apiDetail ')]/*[contains(@class, ' apiRef/apiDef ')]/*[contains(@class, ' apiRef/apiQualifier ')][@name = 'constructor']]"/>      	
       
   422     <xsl:variable name="destructor" select="$all-functions[*[contains(@class, ' apiRef/apiDetail ')]/*[contains(@class, ' apiRef/apiDef ')]/*[contains(@class, ' apiRef/apiQualifier ')][@name = 'destructor']]"/>
       
   423     <xsl:if test="$constructor | $destructor">
       
   424       <h1 class="pageHeading topictitle1">Constructor &amp; Destructor Documentation</h1>
       
   425       <xsl:apply-templates select="$constructor" mode="child.topic">
       
   426         <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   427       </xsl:apply-templates>
       
   428       <xsl:apply-templates select="$destructor" mode="child.topic">
       
   429         <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   430       </xsl:apply-templates>
       
   431     </xsl:if>
       
   432     <xsl:variable name="functions" select="$all-functions[not(count($constructor | $destructor) = count(. | $constructor | $destructor))]"/>
       
   433     <xsl:if test="$functions">
       
   434       <h1 class="pageHeading topictitle1">Member Functions Documentation</h1>
       
   435       <xsl:apply-templates select="$functions" mode="child.topic">
       
   436         <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   437       </xsl:apply-templates>
       
   438     </xsl:if>
       
   439     <xsl:variable name="structures" select="../*[contains(@class, ' cxxStruct/cxxStruct ')]"/>
       
   440     <xsl:if test="$structures">
       
   441       <h1 class="pageHeading topictitle1">Member Structures Documentation</h1>
       
   442       <xsl:apply-templates select="$structures" mode="child.topic">
       
   443         <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   444       </xsl:apply-templates>
       
   445     </xsl:if>
       
   446     <xsl:variable name="enums" select="../*[contains(@class, ' cxxEnumeration/cxxEnumeration ')]"/>
       
   447     <xsl:if test="$enums">
       
   448       <h1 class="pageHeading topictitle1">Member Enumerations Documentation</h1>
       
   449       <xsl:apply-templates select="$enums" mode="child.topic">
       
   450         <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   451       </xsl:apply-templates>
       
   452     </xsl:if>
       
   453     <xsl:variable name="typedefs" select="../*[contains(@class, ' cxxTypedef/cxxTypedef ')]"/>
       
   454     <xsl:if test="$typedefs">
       
   455      <h1 class="pageHeading topictitle1">Member Type Definitions Documentation</h1>
       
   456      <xsl:apply-templates select="$typedefs" mode="child.topic">
       
   457        <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   458      </xsl:apply-templates>
       
   459     </xsl:if>
       
   460     <xsl:variable name="variables" select="../*[contains(@class, ' cxxVariable/cxxVariable ')]"/>
       
   461     <xsl:if test="$variables">
       
   462       <h1 class="pageHeading topictitle1">Member Data Documentation</h1>
       
   463       <xsl:apply-templates select="$variables" mode="child.topic">
       
   464         <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   465       </xsl:apply-templates>
       
   466     </xsl:if>
       
   467   </xsl:template>
       
   468   
       
   469   <!-- Omit, pulled by class/struct body -->
       
   470   <xsl:template match="*[contains(@class, ' cxxClass/cxxClass ') or
       
   471                          contains(@class, ' cxxStruct/cxxStruct ') or
       
   472                          contains(@class, ' cxxUnion/cxxUnion ')]/
       
   473                          *[contains(@class, ' topic/topic ') or
       
   474                            contains(@class, ' topic/related-links ')]"/>
       
   475 
       
   476   <!-- Class and struct body class -->
       
   477   <xsl:template match="*[contains(@class,' cxxClass/cxxClass ') or
       
   478                          contains(@class, ' cxxStruct/cxxStruct ') or
       
   479                          contains(@class, ' cxxUnion/cxxUnion ')]/
       
   480                          *[contains(@class,' topic/topic ')]/
       
   481                            *[contains(@class,' topic/body ')]"
       
   482                 mode="get-output-class">
       
   483     <xsl:text>topicbody</xsl:text>
       
   484     <xsl:value-of select="count(ancestor-or-self::*[contains(@class,' topic/topic ')])"/> 
       
   485   </xsl:template>  
       
   486 
       
   487   <!-- Member index group -->
       
   488   <xsl:template name="member-index-group">
       
   489     <xsl:param name="title"/>
       
   490     <xsl:param name="nodes"/>
       
   491     <xsl:call-template name="member-index-block">
       
   492       <xsl:with-param name="nodes"
       
   493                       select="$nodes[*[contains(@class, ' apiRef/apiDetail ')]/*[contains(@class, ' apiRef/apiDef ')]/
       
   494                                        *[contains(@class, ' apiRef/apiQualifier ')][@name = 'access' and @value = 'public']]"/>
       
   495       <xsl:with-param name="title" select="concat('Public ', $title)"/>
       
   496     </xsl:call-template>
       
   497     <xsl:call-template name="member-index-block">
       
   498       <xsl:with-param name="nodes"
       
   499                       select="$nodes[*[contains(@class, ' apiRef/apiDetail ')]/*[contains(@class, ' apiRef/apiDef ')]/
       
   500                                        *[contains(@class, ' apiRef/apiQualifier ')][@name = 'access' and @value = 'protected']]"/>
       
   501       <xsl:with-param name="title" select="concat('Protected ', $title)"/>
       
   502     </xsl:call-template>
       
   503     <xsl:call-template name="member-index-block">
       
   504       <xsl:with-param name="nodes"
       
   505                       select="$nodes[*[contains(@class, ' apiRef/apiDetail ')]/*[contains(@class, ' apiRef/apiDef ')]/
       
   506                                        *[contains(@class, ' apiRef/apiQualifier ')][@name = 'access' and @value = 'private']]"/>
       
   507       <xsl:with-param name="title" select="concat('Private ', $title)"/>
       
   508     </xsl:call-template>
       
   509   </xsl:template>
       
   510   
       
   511   <!-- Member index table -->
       
   512   <xsl:template name="member-index-block">
       
   513     <xsl:param name="nodes" select="/.."/>
       
   514     <xsl:param name="title"/>
       
   515     <xsl:if test="$nodes">
       
   516       <table border="1" class="member-index">
       
   517         <thead>
       
   518           <tr>
       
   519             <th colspan="2">
       
   520               <xsl:value-of select="$title"/>
       
   521             </th>
       
   522           </tr>
       
   523         </thead>
       
   524         <tbody>
       
   525           <xsl:apply-templates select="$nodes" mode="class-members">
       
   526             <xsl:sort select="number(boolean(*[contains(@class, ' apiRef/apiDetail ')]/
       
   527                                                *[contains(@class, ' apiRef/apiDef ')]/
       
   528                                                  *[contains(@class, ' apiRef/apiQualifier ')]
       
   529                                                   [@name = 'constructor' or @name = 'destructor']))"
       
   530                       data-type="number" order="descending"/>
       
   531             <xsl:sort select="*[contains(@class, ' topic/title ')]"/>
       
   532           </xsl:apply-templates>
       
   533         </tbody>
       
   534       </table>
       
   535     </xsl:if>
       
   536   </xsl:template>
       
   537 
       
   538   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassFunctionInherited ') or 
       
   539                          contains(@class, ' cxxClass/cxxClassVariableInherited ') or 
       
   540                          contains(@class, ' cxxClass/cxxClassEnumerationInherited ') or 
       
   541                          contains(@class, ' cxxClass/cxxClassEnumeratorInherited ')]"
       
   542                 mode="class-members">
       
   543     <tr>
       
   544       <xsl:if test="position() mod 2 = 0">
       
   545         <xsl:attribute name="class">bg</xsl:attribute>  
       
   546       </xsl:if>
       
   547       <td><xsl:text> </xsl:text></td>
       
   548       <td>
       
   549         <xsl:apply-templates select="."/>
       
   550       </td>
       
   551     </tr>
       
   552   </xsl:template>
       
   553   
       
   554   <!--
       
   555   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassFunctionInherited ') or 
       
   556                          contains(@class, ' cxxClass/cxxClassVariableInherited ') or 
       
   557                          contains(@class, ' cxxClass/cxxClassEnumerationInherited ') or 
       
   558                          contains(@class, ' cxxClass/cxxClassEnumeratorInherited ')]/text()">
       
   559     <xsl:variable name="t" select="substring-after(., '::')"/>
       
   560     <xsl:choose>
       
   561       <xsl:when test="contains($t, '(')">
       
   562         <xsl:value-of select="substring-before($t, '(')"/>
       
   563       </xsl:when>
       
   564       <xsl:otherwise>
       
   565         <xsl:value-of select="$t"/>
       
   566       </xsl:otherwise>
       
   567     </xsl:choose>
       
   568   </xsl:template>
       
   569   -->
       
   570 
       
   571   <!-- Default member index row -->
       
   572   <xsl:template match="*" mode="class-members" priority="0">
       
   573     <tr>
       
   574       <xsl:if test="position() mod 2 = 0">
       
   575         <xsl:attribute name="class">bg</xsl:attribute>  
       
   576       </xsl:if>
       
   577       <td><xsl:text> </xsl:text></td>
       
   578       <td>
       
   579         <a href="#{@id}">
       
   580           <xsl:apply-templates select="*[contains(@class, ' topic/title ')]" mode="cxxapiref.title-fmt"/>
       
   581          </a>
       
   582       </td>
       
   583     </tr>
       
   584   </xsl:template>
       
   585   
       
   586   <!-- Class or struct signature --> 
       
   587   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassDefinition ') or
       
   588                          contains(@class, ' cxxStruct/cxxStructDefinition ') or
       
   589                          contains(@class, ' cxxUnion/cxxUnionDefinition ')]"
       
   590                  mode="signature">
       
   591     <xsl:variable name="templates"
       
   592                   select="*[contains(@class, ' cxxClass/cxxClassTemplateParamList ') or
       
   593                             contains(@class, ' cxxStruct/cxxStructTemplateParamList ') or
       
   594                             contains(@class, ' cxxUnion/cxxUnionTemplateParamList ')]/
       
   595                             *[contains(@class, ' cxxClass/cxxClassTemplateParameter ') or
       
   596                               contains(@class, ' cxxStruct/cxxStructTemplateParameter ') or
       
   597                               contains(@class, ' cxxUnion/cxxUnionTemplateParameter ')]"/>
       
   598     <xsl:variable name="title">
       
   599       <xsl:value-of select="ancestor::*[contains(@class, ' topic/topic ')]/*[contains(@class, ' topic/title ')]"/>
       
   600     </xsl:variable>
       
   601     <table class="signature">
       
   602       <xsl:if test="contains($title, '&lt;') or $templates">
       
   603         <tr>
       
   604           <td>
       
   605             <xsl:text>template &lt;</xsl:text>
       
   606             <xsl:for-each select="$templates">
       
   607               <xsl:if test="not(position() = 1)">, </xsl:if>
       
   608               <xsl:value-of select="*[contains(@class, ' cxxClass/cxxClassTemplateParamType ') or
       
   609                                       contains(@class, ' cxxStruct/cxxStructTemplateParamType ') or
       
   610                                       contains(@class, ' cxxUnion/cxxUnionTemplateParamType ')]"/>
       
   611               
       
   612               <xsl:text> </xsl:text>
       
   613               <xsl:value-of select="*[contains(@class, ' cxxClass/cxxClassTemplateParamDeclarationName ') or
       
   614                                       contains(@class, ' cxxStruct/cxxStructTemplateParamDeclarationName ') or
       
   615                                       contains(@class, ' cxxUnion/cxxUnionTemplateParamDeclarationName ')]"/>
       
   616             </xsl:for-each>
       
   617             <xsl:text>&gt;</xsl:text>
       
   618           </td>
       
   619         </tr>
       
   620       </xsl:if>
       
   621       <tr>
       
   622         <td>
       
   623           <xsl:choose>
       
   624             <xsl:when test="self::*[contains(@class, ' cxxClass/cxxClassDefinition ')]">class</xsl:when>
       
   625             <xsl:when test="self::*[contains(@class, ' cxxStruct/cxxStructDefinition ')]">struct</xsl:when>
       
   626             <xsl:when test="self::*[contains(@class, ' cxxUnion/cxxUnionDefinition ')]">union</xsl:when>
       
   627           </xsl:choose>
       
   628           <xsl:text> </xsl:text>
       
   629           <xsl:value-of select="$title"/>
       
   630           <xsl:variable name="derivation"
       
   631                         select="*[contains(@class, ' cxxClass/cxxClassDerivations ') or
       
   632                                   contains(@class, ' cxxStruct/cxxStructDerivations ')]/
       
   633                                   *[contains(@class, ' cxxClass/cxxClassDerivation ') or
       
   634                                     contains(@class, ' cxxStruct/cxxStructDerivation ')]"/>
       
   635           <xsl:if test="$derivation">
       
   636             <xsl:text> : </xsl:text>
       
   637             <xsl:for-each select="$derivation">
       
   638               <xsl:if test="not(position() = 1)">, </xsl:if>
       
   639               <xsl:value-of select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'access']/@value"/>
       
   640               <xsl:text> </xsl:text>
       
   641               <xsl:value-of select="*[contains(@class, ' cxxClass/cxxClassBaseClass ') or
       
   642                                       contains(@class, ' cxxClass/cxxClassBaseStruct ') or
       
   643                                       contains(@class, ' cxxClass/cxxClassBaseUnion ') or
       
   644                                       contains(@class, ' cxxStruct/cxxStructBaseClass ') or
       
   645                                       contains(@class, ' cxxStruct/cxxStructBaseStruct ') or
       
   646                                       contains(@class, ' cxxStruct/cxxStructBaseUnion ')]"/>
       
   647             </xsl:for-each>
       
   648           </xsl:if>
       
   649         </td>
       
   650       </tr>
       
   651     </table>
       
   652   </xsl:template>  
       
   653   
       
   654   <!-- Nested class -->
       
   655   <!-- ===================================================================== -->
       
   656   
       
   657   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassNestedDetail ') or
       
   658                          contains(@class, ' cxxStruct/cxxStructNestedDetail ') or
       
   659                          contains(@class, ' cxxUnion/cxxUnionNestedDetail ')]" priority="10">
       
   660     <xsl:call-template name="topic.section"/>
       
   661   </xsl:template>
       
   662   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassNestedDetail ') or
       
   663                          contains(@class, ' cxxStruct/cxxStructNestedDetail ') or
       
   664                          contains(@class, ' cxxUnion/cxxUnionNestedDetail ')]" mode="get-output-class" priority="10">
       
   665     <xsl:text>section nested</xsl:text>
       
   666   </xsl:template>
       
   667   <xsl:template match="*[contains(@class, ' cxxClass/cxxClassNestedDetail ') or
       
   668                          contains(@class, ' cxxStruct/cxxStructNestedDetail ') or
       
   669                          contains(@class, ' cxxUnion/cxxUnionNestedDetail ')]" mode="section-fmt">
       
   670     <xsl:variable name="flagrules">
       
   671       <xsl:call-template name="getrules"/>
       
   672     </xsl:variable>
       
   673     <xsl:call-template name="start-revflag">
       
   674       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   675     </xsl:call-template>
       
   676     <!-- default will output h3 instead of h2
       
   677     <xsl:call-template name="sect-heading">
       
   678       <xsl:with-param name="defaulttitle">
       
   679         <xsl:call-template name="getString">
       
   680           <xsl:with-param name="stringName" select="'cxxBaseClass'"/>
       
   681         </xsl:call-template>
       
   682       </xsl:with-param>
       
   683     </xsl:call-template>
       
   684     -->    
       
   685     <h2 class="sectiontitle">
       
   686       <xsl:text>Nested Classes and Structures</xsl:text>
       
   687     </h2>
       
   688     <ul>
       
   689       <xsl:for-each select="*[contains(@class, ' cxxClass/cxxClassNestedClass ') or
       
   690                               contains(@class, ' cxxClass/cxxClassNestedStruct ') or
       
   691                               contains(@class, ' cxxClass/cxxClassNestedUnion ') or
       
   692                               contains(@class, ' cxxStruct/cxxStructNestedClass ') or
       
   693                               contains(@class, ' cxxStruct/cxxStructNestedStruct ') or
       
   694                               contains(@class, ' cxxStruct/cxxStructNestedUnion ') or
       
   695                               contains(@class, ' cxxUnion/cxxUnionNestedClass ') or
       
   696                               contains(@class, ' cxxUnion/cxxUnionNestedStruct ') or
       
   697                               contains(@class, ' cxxUnion/cxxUnionNestedUnion ')]">
       
   698         <xsl:sort select="."/>
       
   699         <li>
       
   700           <xsl:apply-templates select="."/>
       
   701         </li>
       
   702       </xsl:for-each>
       
   703     </ul>
       
   704     <xsl:call-template name="end-revflag">
       
   705       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   706     </xsl:call-template>
       
   707   </xsl:template>
       
   708 
       
   709   <!-- Function -->
       
   710   <!-- ===================================================================== -->
       
   711   
       
   712   <xsl:template name="is-constructor">    
       
   713     <xsl:value-of select="boolean(*[contains(@class, ' apiRef/apiDetail ')]/
       
   714                                     *[contains(@class, ' apiRef/apiDef ')]/
       
   715                                       *[contains(@class, ' apiRef/apiQualifier ')]
       
   716                                        [@name = 'constructor' or @name = 'destructor'])"/>
       
   717   </xsl:template>
       
   718   
       
   719   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunction ')]" mode="class-members">
       
   720     <xsl:variable name="is-constructor">
       
   721       <xsl:call-template name="is-constructor"/>
       
   722     </xsl:variable>
       
   723     <tr>
       
   724       <xsl:if test="position() mod 2 = 0">
       
   725         <xsl:attribute name="class">bg</xsl:attribute>  
       
   726       </xsl:if>
       
   727       <td align="right" class="code">
       
   728         <xsl:if test="not($is-constructor = 'true')">
       
   729           <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionDetail ')]/
       
   730                                          *[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]/
       
   731                                            *[contains(@class, ' cxxFunction/cxxFunctionDeclaredType ')]/node()"/>
       
   732         </xsl:if>
       
   733       </td>
       
   734       <td>
       
   735         <a href="#{@id}">
       
   736           <xsl:apply-templates select="*[contains(@class, ' topic/title ')]/node()"/><!--mode="cxxapiref.title-fmt"-->
       
   737         </a>
       
   738         <xsl:text>(</xsl:text>
       
   739         <xsl:for-each select="*[contains(@class, ' cxxFunction/cxxFunctionDetail ')]/
       
   740                                 *[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]/
       
   741                                   *[contains(@class, ' cxxFunction/cxxFunctionParameters ')]/
       
   742                                     *[contains(@class, ' cxxFunction/cxxFunctionParameter ')]">
       
   743           <xsl:if test="not(position() = 1)">, </xsl:if>
       
   744           <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDeclaredType ')]/node()"/>
       
   745         </xsl:for-each>
       
   746         <xsl:text>)</xsl:text>
       
   747       </td>
       
   748     </tr>
       
   749   </xsl:template>
       
   750   
       
   751   <!--
       
   752   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunction ')]/*[contains(@class, ' topic/title ')]" mode="class-members">
       
   753     <xsl:apply-templates select="../*[contains(@class, ' cxxFunction/cxxFunctionDetail ')]/
       
   754                                       *[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]/
       
   755                                         *[contains(@class, ' cxxFunction/cxxFunctionPrototype ')]/
       
   756                                           node()"/>
       
   757   </xsl:template>
       
   758   -->
       
   759   
       
   760   <!-- Function title -->
       
   761   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunction ')]/*[contains(@class, ' topic/title ')]" mode="cxxapiref.title-fmt">
       
   762     <xsl:apply-templates/>
       
   763     <xsl:text>(</xsl:text>
       
   764     <xsl:for-each select="../*[contains(@class, ' cxxFunction/cxxFunctionDetail ')]/
       
   765                               *[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]/
       
   766                                 *[contains(@class, ' cxxFunction/cxxFunctionParameters ')]/
       
   767                                   *[contains(@class, ' cxxFunction/cxxFunctionParameter ')]">
       
   768       <xsl:if test="not(position() = 1)">,<!--&#x200B;--> </xsl:if>
       
   769       <xsl:value-of select="normalize-space(*[contains(@class, ' cxxFunction/cxxFunctionParameterDeclaredType ')])"/>
       
   770     </xsl:for-each>
       
   771     <xsl:text>)</xsl:text>
       
   772   </xsl:template>
       
   773   
       
   774   <!-- Function body -->
       
   775   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionDetail ')]">
       
   776     <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]" mode="signature"/>
       
   777     <xsl:apply-templates select="*[(contains(@class, ' topic/section ') or
       
   778                                     contains(@class, ' topic/example ')) and
       
   779                                    not(contains(@class, ' apiRef/apiDef '))]"/>
       
   780     <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]/*[contains(@class, ' cxxFunction/cxxFunctionParameters ')]"/>
       
   781   </xsl:template>
       
   782   
       
   783   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionPrototype ')]">
       
   784     <pre>
       
   785       <xsl:for-each select="../*[contains(@class, ' apiRef/apiQualifier ')][@name = 'access']">
       
   786         <!--xsl:if test="@value = 'private' or @value = 'protected'"-->
       
   787           <xsl:value-of select="@value"/>
       
   788           <xsl:text>: </xsl:text>
       
   789         <!--/xsl:if-->  
       
   790       </xsl:for-each>
       
   791       <xsl:apply-templates/>
       
   792     </pre>
       
   793   </xsl:template>
       
   794   
       
   795   <!-- common meta -->
       
   796   <xsl:template name="meta-signature">
       
   797     <xsl:variable name="m">
       
   798       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'access'][not(@value = 'public')]">
       
   799         <xsl:text>, </xsl:text>
       
   800         <xsl:value-of select="@value"/>
       
   801       </xsl:for-each>
       
   802       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'static']">
       
   803         <xsl:text>, </xsl:text>
       
   804         <xsl:value-of select="@value"/>
       
   805       </xsl:for-each>
       
   806       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'inline']">
       
   807         <xsl:text>, </xsl:text>
       
   808         <xsl:value-of select="@value"/>
       
   809       </xsl:for-each>
       
   810       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'pure virtual']">
       
   811         <xsl:text>, </xsl:text>
       
   812         <xsl:value-of select="@value"/>
       
   813       </xsl:for-each>
       
   814       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'virtual']">
       
   815         <xsl:text>, </xsl:text>
       
   816         <xsl:value-of select="@value"/>
       
   817       </xsl:for-each>
       
   818       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'explicit']">
       
   819         <xsl:text>, </xsl:text>
       
   820         <xsl:value-of select="@value"/>
       
   821       </xsl:for-each>
       
   822     </xsl:variable>
       
   823     <xsl:if test="normalize-space($m)">
       
   824       <xsl:text>[</xsl:text>
       
   825       <xsl:value-of select="normalize-space(substring($m, 2))"/>
       
   826       <xsl:text>]</xsl:text>  
       
   827     </xsl:if>
       
   828   </xsl:template>
       
   829   
       
   830   <!-- Method signature -->
       
   831   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionDefinition ')]" mode="signature">
       
   832     <xsl:variable name="parameters" select="*[contains(@class, ' cxxFunction/cxxFunctionParameters ')]/*[contains(@class, ' cxxFunction/cxxFunctionParameter ')]"/>
       
   833     <xsl:variable name="meta">
       
   834       <xsl:for-each select="*[contains(@class, ' apiRef/apiQualifier ')][@name = 'const']">
       
   835         <xsl:value-of select="@value"/>
       
   836         <xsl:text> </xsl:text>
       
   837       </xsl:for-each>
       
   838       <xsl:call-template name="meta-signature"/>
       
   839     </xsl:variable>
       
   840     <xsl:variable name="has-type" select="boolean(*[contains(@class, ' cxxFunction/cxxFunctionDeclaredType ')]/node())"/>
       
   841     <table class="signature">
       
   842       <tr>
       
   843         <xsl:if test="$has-type">
       
   844           <td>
       
   845             <!--
       
   846             <xsl:value-of select="*[contains(@class, ' cxxFunction/cxxFunctionStorageClassSpecifierStatic ')]/@value"/>
       
   847             <xsl:text> </xsl:text>
       
   848             <xsl:value-of select="*[contains(@class, ' cxxFunction/cxxFunctionInline ')]/@value"/>
       
   849             <xsl:text> </xsl:text>
       
   850             -->
       
   851             <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionDeclaredType ')]/node()"/>
       
   852           </td>
       
   853         </xsl:if>
       
   854         <td>
       
   855           <xsl:apply-templates select="../../*[contains(@class, ' apiRef/apiName ')]/node()"/>
       
   856         </td>
       
   857         <td>(</td>
       
   858         <xsl:apply-templates select="$parameters[1]" mode="signature">
       
   859           <xsl:with-param name="hasNext" select="count($parameters) > 1"/>
       
   860         </xsl:apply-templates>
       
   861         <xsl:if test="count($parameters) &lt;= 1">
       
   862           <td>
       
   863              <xsl:text>)</xsl:text>
       
   864           </td>
       
   865           <td>
       
   866              <xsl:copy-of select="$meta"/>
       
   867           </td>
       
   868         </xsl:if>        
       
   869       </tr>
       
   870       <xsl:for-each select="$parameters[not(position() = 1)]">
       
   871         <tr>
       
   872           <!--xsl:if test="$has-type">
       
   873             <td><xsl:text> </xsl:text></td>
       
   874           </xsl:if>
       
   875           <td><xsl:text> </xsl:text></td-->
       
   876           <td colspan="{2 + number($has-type)}"><xsl:text> </xsl:text></td>
       
   877           <xsl:apply-templates select="." mode="signature">
       
   878             <xsl:with-param name="hasNext" select="not(position() = count($parameters) - 1)"/>
       
   879           </xsl:apply-templates>
       
   880         </tr>
       
   881       </xsl:for-each>
       
   882       <xsl:if test="count($parameters) > 1">
       
   883         <tr>
       
   884           <!--xsl:if test="$has-type">
       
   885             <td><xsl:text> </xsl:text></td>
       
   886           </xsl:if-->
       
   887           <td colspan="{1 + number($has-type)}"><xsl:text> </xsl:text></td>
       
   888           <td>)</td>
       
   889           <td colspan="2">
       
   890             <xsl:copy-of select="$meta"/>
       
   891           </td>
       
   892           <!--td><xsl:text> </xsl:text></td-->
       
   893         </tr>
       
   894       </xsl:if>
       
   895     </table>
       
   896   </xsl:template>
       
   897   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionParameter ')]" mode="signature">
       
   898     <xsl:param name="hasNext" select="false"/>
       
   899     <td>
       
   900       <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDeclaredType ')]/node()"/>
       
   901     </td>
       
   902     <td>
       
   903       <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDeclarationName ')]/node()"/>
       
   904       <xsl:if test="*[contains(@class, ' cxxFunction/cxxFunctionParameterDefaultValue ')]">
       
   905         <xsl:text>&#xA0;=&#xA0;</xsl:text>
       
   906         <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDefaultValue ')]/node()"/>
       
   907       </xsl:if>
       
   908       <xsl:if test="$hasNext">,</xsl:if>
       
   909     </td>
       
   910   </xsl:template>
       
   911 
       
   912   <!-- Return type -->
       
   913   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionDeclaredType ')]">
       
   914     <xsl:call-template name="topic.section"/>
       
   915   </xsl:template>
       
   916   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionDeclaredType ')]" mode="get-output-class">
       
   917     <xsl:text>section return</xsl:text>
       
   918   </xsl:template>
       
   919   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionDeclaredType ')]" mode="section-fmt">
       
   920     <xsl:variable name="flagrules">
       
   921       <xsl:call-template name="getrules"/>
       
   922     </xsl:variable>
       
   923     <xsl:call-template name="start-revflag">
       
   924       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   925     </xsl:call-template>
       
   926     <xsl:call-template name="sect-heading">
       
   927       <xsl:with-param name="defaulttitle">Returns</xsl:with-param>
       
   928     </xsl:call-template>
       
   929     <xsl:apply-templates/>
       
   930     <xsl:call-template name="end-revflag">
       
   931       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   932     </xsl:call-template>
       
   933   </xsl:template>
       
   934   
       
   935   <!-- Parameters -->
       
   936   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionParameters ')]">
       
   937     <xsl:if test="*[contains(@class, ' cxxFunction/cxxFunctionParameter ')]">
       
   938       <xsl:call-template name="topic.section"/>
       
   939     </xsl:if>
       
   940   </xsl:template>
       
   941   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionParameters ')]" mode="get-output-class">
       
   942     <xsl:text>section parameters</xsl:text>
       
   943   </xsl:template>
       
   944   <xsl:template match="*[contains(@class, ' cxxFunction/cxxFunctionParameters ')]" mode="section-fmt">
       
   945     <xsl:variable name="flagrules">
       
   946       <xsl:call-template name="getrules"/>
       
   947     </xsl:variable>
       
   948     <xsl:call-template name="start-revflag">
       
   949       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   950     </xsl:call-template>
       
   951     <xsl:call-template name="sect-heading">
       
   952       <xsl:with-param name="defaulttitle">
       
   953         <xsl:call-template name="getString">
       
   954           <xsl:with-param name="stringName" select="'cxxParameters'"/>
       
   955         </xsl:call-template>
       
   956       </xsl:with-param>
       
   957     </xsl:call-template>
       
   958     <table border="1" class="parameters">
       
   959       <xsl:for-each select="*[contains(@class, ' cxxFunction/cxxFunctionParameter ')]">
       
   960         <tr>
       
   961           <xsl:if test="position() mod 2 = 0">
       
   962             <xsl:attribute name="class">bg</xsl:attribute>  
       
   963           </xsl:if>          
       
   964           <td class="parameter">
       
   965             <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDeclaredType ')]/node()"/>
       
   966             <xsl:text> </xsl:text>
       
   967             <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDeclarationName ')]/node()"/>
       
   968             <xsl:if test="*[contains(@class, ' cxxFunction/cxxFunctionParameterDefaultValue ')]">
       
   969               <xsl:text>&#xA0;=&#xA0;</xsl:text>
       
   970               <xsl:apply-templates select="*[contains(@class, ' cxxFunction/cxxFunctionParameterDefaultValue ')]/node()"/>
       
   971             </xsl:if>
       
   972           </td>
       
   973           <td>
       
   974             <xsl:apply-templates select="*[contains(@class, ' apiRef/apiDefNote ')]/node()"/>
       
   975             <xsl:text> </xsl:text>
       
   976           </td>
       
   977         </tr>
       
   978       </xsl:for-each>
       
   979     </table>
       
   980     <xsl:call-template name="end-revflag">
       
   981       <xsl:with-param name="flagrules" select="$flagrules"/>
       
   982     </xsl:call-template>
       
   983   </xsl:template>
       
   984   
       
   985   <!-- Variable -->
       
   986   <!-- ===================================================================== -->
       
   987   
       
   988   <!-- Variable title -->
       
   989   <xsl:template match="*[contains(@class, ' cxxVariable/cxxVariable ')]/*[contains(@class, ' topic/title ')]" mode="cxxapiref.title-fmt">
       
   990     <xsl:value-of select="../*[contains(@class, ' cxxVariable/cxxVariableDetail ')]/*[contains(@class, ' cxxVariable/cxxVariableDefinition ')]/*[contains(@class, ' cxxVariable/cxxVariableDeclaredType ')]"/>
       
   991     <xsl:text> </xsl:text>    
       
   992     <xsl:apply-templates/>
       
   993   </xsl:template>
       
   994   
       
   995   <!-- Variable member index row -->
       
   996   <xsl:template match="*[contains(@class, ' cxxVariable/cxxVariable ')]" mode="class-members">
       
   997     <tr>
       
   998       <xsl:if test="position() mod 2 = 0">
       
   999         <xsl:attribute name="class">bg</xsl:attribute>  
       
  1000       </xsl:if>
       
  1001       <td align="right" valign="top">
       
  1002         <xsl:apply-templates select="*[contains(@class, ' cxxVariable/cxxVariableDetail ')]/*[contains(@class, ' cxxVariable/cxxVariableDefinition ')]/*[contains(@class, ' cxxVariable/cxxVariableDeclaredType ')]/node()"/>
       
  1003       </td>
       
  1004       <td>
       
  1005         <a href="#{@id}">
       
  1006           <xsl:apply-templates select="*[contains(@class, ' topic/title ')]/node()"/>
       
  1007         </a>
       
  1008       </td>
       
  1009     </tr>
       
  1010   </xsl:template>
       
  1011   
       
  1012   <!-- Variable body -->
       
  1013   <xsl:template match="*[contains(@class, ' cxxVariable/cxxVariableDetail ')]">
       
  1014     <xsl:apply-templates select="*[contains(@class, ' cxxVariable/cxxVariableDefinition ')]" mode="signature"/>
       
  1015     <xsl:apply-templates select="*[(contains(@class, ' topic/section ') or
       
  1016                                     contains(@class, ' topic/example ')) and
       
  1017                                    not(contains(@class, ' apiRef/apiDef '))]"/>
       
  1018   </xsl:template>
       
  1019   
       
  1020   <!-- Variable signature -->
       
  1021   <xsl:template match="*[contains(@class, ' cxxVariable/cxxVariableDefinition ')]" mode="signature">
       
  1022     <xsl:variable name="meta">
       
  1023       <xsl:call-template name="meta-signature"/>
       
  1024     </xsl:variable>
       
  1025     <table class="signature">
       
  1026       <tr>
       
  1027         <td>
       
  1028           <xsl:apply-templates select="*[contains(@class, ' cxxVariable/cxxVariableDeclaredType ')]/node()"/>
       
  1029         </td>
       
  1030         <td>
       
  1031           <xsl:apply-templates select="ancestor::*[contains(@class, ' cxxVariable/cxxVariable ')][1]/*[contains(@class, ' topic/title ')]/node()"/>
       
  1032         </td>
       
  1033         <xsl:if test="normalize-space($meta)">
       
  1034           <td>
       
  1035             <xsl:value-of select="normalize-space($meta)"/>
       
  1036           </td>
       
  1037         </xsl:if>
       
  1038       </tr>
       
  1039     </table>
       
  1040   </xsl:template>
       
  1041   
       
  1042   <!-- Enumeration -->
       
  1043   <!-- ===================================================================== -->
       
  1044   
       
  1045   <!-- Enumeration title -->
       
  1046   <xsl:template match="*[contains(@class, ' cxxEnumeration/cxxEnumeration ')]/*[contains(@class, ' topic/title ')]" mode="cxxapiref.title-fmt">
       
  1047     <xsl:call-template name="getString">
       
  1048       <xsl:with-param name="stringName" select="'Enum'"/>
       
  1049     </xsl:call-template>
       
  1050     <xsl:text> </xsl:text>
       
  1051     <xsl:choose>
       
  1052       <xsl:when test="starts-with(., '@')">
       
  1053         <xsl:text>anonymous</xsl:text>
       
  1054       </xsl:when>
       
  1055       <xsl:otherwise>
       
  1056         <xsl:apply-templates/>
       
  1057       </xsl:otherwise>
       
  1058     </xsl:choose>
       
  1059   </xsl:template>
       
  1060   
       
  1061   <!-- Enumeration member index row -->
       
  1062   <xsl:template match="*[contains(@class, ' cxxEnumeration/cxxEnumeration ')]" mode="class-members">
       
  1063     <tr>
       
  1064       <xsl:if test="position() mod 2 = 0">
       
  1065         <xsl:attribute name="class">bg</xsl:attribute>  
       
  1066       </xsl:if>
       
  1067       <td align="right" valign="top">
       
  1068         <xsl:text>enum</xsl:text>
       
  1069       </td>
       
  1070       <td>
       
  1071         <a href="#{@id}">
       
  1072           <xsl:choose>
       
  1073            <xsl:when test="starts-with(*[contains(@class, ' topic/title ')], '@')">
       
  1074              <xsl:text>anonymous</xsl:text>
       
  1075            </xsl:when>
       
  1076            <xsl:otherwise>
       
  1077              <xsl:apply-templates select="*[contains(@class, ' topic/title ')]/node()"/>
       
  1078            </xsl:otherwise>
       
  1079          </xsl:choose>
       
  1080         </a>
       
  1081         <xsl:text> { </xsl:text>
       
  1082         <xsl:variable name="enumerators"
       
  1083                       select="*[contains(@class, ' cxxEnumeration/cxxEnumerationDetail ')]/
       
  1084                                 *[contains(@class, ' cxxEnumeration/cxxEnumerationDefinition ')]/
       
  1085                                   *[contains(@class, ' cxxEnumeration/cxxEnumerators ')]/
       
  1086                                     *[contains(@class, ' cxxEnumeration/cxxEnumerator ')]"/>
       
  1087         <xsl:if test="count($enumerators) > 5">
       
  1088           <br/>
       
  1089         </xsl:if>
       
  1090         <xsl:for-each select="*[contains(@class, ' cxxEnumeration/cxxEnumerationDetail ')]/
       
  1091                                 *[contains(@class, ' cxxEnumeration/cxxEnumerationDefinition ')]/
       
  1092                                   *[contains(@class, ' cxxEnumeration/cxxEnumerators ')]/
       
  1093                                     *[contains(@class, ' cxxEnumeration/cxxEnumerator ')]">
       
  1094           <xsl:if test="not(position() = 1)">, </xsl:if>
       
  1095           <a href="#{@id}">
       
  1096             <xsl:apply-templates select="*[contains(@class, ' apiRef/apiName ')]/node()"/>  
       
  1097           </a>
       
  1098           <xsl:for-each select="*[contains(@class, ' cxxEnumeration/cxxEnumeratorInitialiser ')] ">
       
  1099             <xsl:text>&#xA0;=&#xA0;</xsl:text>
       
  1100             <xsl:apply-templates select="@value"/>
       
  1101           </xsl:for-each>
       
  1102         </xsl:for-each>
       
  1103         <xsl:if test="count($enumerators) > 5">
       
  1104           <br/>
       
  1105         </xsl:if>
       
  1106         <xsl:text> }</xsl:text>
       
  1107       </td>
       
  1108     </tr>
       
  1109   </xsl:template>
       
  1110   
       
  1111   <!-- Enumeration body -->
       
  1112   <xsl:template match="*[contains(@class, ' cxxEnumeration/cxxEnumerationDetail ')]">
       
  1113     <!--xsl:apply-templates select="*[contains(@class, ' cxxEnumeration/cxxEnumerationDefinition ')]" mode="signature"/-->
       
  1114     <xsl:apply-templates select="*[(contains(@class, ' topic/section ') or
       
  1115                                     contains(@class, ' topic/example ')) and
       
  1116                                    not(contains(@class, ' apiRef/apiDef '))]"/>
       
  1117     <xsl:apply-templates select="*[contains(@class, ' cxxEnumeration/cxxEnumerationDefinition ')]/*[contains(@class, ' cxxEnumeration/cxxEnumerators ')]"/>
       
  1118   </xsl:template>  
       
  1119   
       
  1120   <xsl:template match="*[contains(@class, ' cxxEnumeration/cxxEnumerators ')]">
       
  1121     <xsl:call-template name="topic.section"/>
       
  1122   </xsl:template>
       
  1123   <xsl:template match="*[contains(@class, ' cxxEnumeration/cxxEnumerators ')]" mode="get-output-class">
       
  1124     <xsl:text>section enumerators</xsl:text>
       
  1125   </xsl:template>
       
  1126   <xsl:template match="*[contains(@class, ' cxxEnumeration/cxxEnumerators ')]" mode="section-fmt">
       
  1127     <xsl:variable name="flagrules">
       
  1128       <xsl:call-template name="getrules"/>
       
  1129     </xsl:variable>
       
  1130     <xsl:call-template name="start-revflag">
       
  1131       <xsl:with-param name="flagrules" select="$flagrules"/>
       
  1132     </xsl:call-template>
       
  1133     <xsl:call-template name="sect-heading">
       
  1134       <xsl:with-param name="defaulttitle">Enumerators</xsl:with-param>
       
  1135     </xsl:call-template>
       
  1136     <xsl:variable name="enumerators" select="*[contains(@class, ' cxxEnumeration/cxxEnumerator ')]"/>
       
  1137     <xsl:if test="$enumerators">
       
  1138       <table border="1" class="enumerators">
       
  1139         <xsl:for-each select="$enumerators">
       
  1140           <tr>
       
  1141             <xsl:if test="position() mod 2 = 0">
       
  1142               <xsl:attribute name="class">bg</xsl:attribute>  
       
  1143             </xsl:if>
       
  1144             <td valign="top">
       
  1145               <xsl:call-template name="commonattributes"/>
       
  1146               <xsl:apply-templates select="*[contains(@class, ' apiRef/apiName ')]/node()"/>
       
  1147               <xsl:for-each select="*[contains(@class, ' cxxEnumeration/cxxEnumeratorInitialiser ')]">
       
  1148                 <xsl:text>&#xA0;=&#xA0;</xsl:text>
       
  1149                 <xsl:apply-templates select="@value"/>
       
  1150               </xsl:for-each>    
       
  1151             </td>
       
  1152             <td>
       
  1153               <xsl:apply-templates select="*[contains(@class, ' apiRef/apiDesc ')]/node()"/>
       
  1154               <xsl:text> </xsl:text>
       
  1155             </td>
       
  1156           </tr>
       
  1157         </xsl:for-each>
       
  1158       </table>
       
  1159     </xsl:if>
       
  1160     <xsl:call-template name="end-revflag">
       
  1161       <xsl:with-param name="flagrules" select="$flagrules"/>
       
  1162     </xsl:call-template>
       
  1163   </xsl:template>
       
  1164 
       
  1165   <!-- Type definition-->
       
  1166   <!-- ===================================================================== -->
       
  1167   
       
  1168   <!-- Type definition title -->
       
  1169   <xsl:template match="*[contains(@class, ' cxxTypedef/cxxTypedef ')]/*[contains(@class, ' topic/title ')]" mode="cxxapiref.title-fmt">
       
  1170     <xsl:call-template name="getString">
       
  1171       <xsl:with-param name="stringName" select="'Typedef'"/>
       
  1172     </xsl:call-template>
       
  1173     <xsl:text> </xsl:text>
       
  1174     <xsl:apply-templates/>
       
  1175   </xsl:template>
       
  1176 
       
  1177   <xsl:template match="*[contains(@class, ' cxxTypedef/cxxTypedef ')]" mode="class-members">
       
  1178     <tr>
       
  1179       <xsl:if test="position() mod 2 = 0">
       
  1180         <xsl:attribute name="class">bg</xsl:attribute>  
       
  1181       </xsl:if>
       
  1182       <td align="right" valign="top">
       
  1183         <xsl:text>typedef</xsl:text>
       
  1184       </td>
       
  1185       <td>
       
  1186         <xsl:apply-templates select="*[contains(@class, ' cxxTypedef/cxxTypedefDetail ')]/
       
  1187                                        *[contains(@class, ' cxxTypedef/cxxTypedefDefinition ')]/
       
  1188                                          *[contains(@class, ' cxxTypedef/cxxTypedefDeclaredType ')]/node()"/>
       
  1189         <xsl:text> </xsl:text>
       
  1190         <a href="#{@id}">
       
  1191           <xsl:apply-templates select="*[contains(@class, ' topic/title ')]/node()"/>
       
  1192         </a>
       
  1193       </td>
       
  1194     </tr>
       
  1195   </xsl:template>
       
  1196   
       
  1197   <xsl:template match="*[contains(@class, ' cxxTypedef/cxxTypedefDetail ')]">
       
  1198     <xsl:apply-templates select="*[contains(@class, ' cxxTypedef/cxxTypedefDefinition ')]" mode="signature"/>
       
  1199     <xsl:apply-templates select="*[(contains(@class, ' topic/section ') or
       
  1200                                     contains(@class, ' topic/example ')) and
       
  1201                                    not(contains(@class, ' apiRef/apiDef '))]"/>
       
  1202   </xsl:template>
       
  1203   
       
  1204   <xsl:template match="*[contains(@class, ' cxxTypedef/cxxTypedefDefinition ')]" mode="signature">
       
  1205     <xsl:variable name="meta">
       
  1206       <xsl:call-template name="meta-signature"/>
       
  1207     </xsl:variable>
       
  1208     <table class="signature">
       
  1209       <tr>
       
  1210         <td>
       
  1211           <xsl:text>typedef </xsl:text>
       
  1212           <xsl:apply-templates select="*[contains(@class, ' cxxTypedef/cxxTypedefDeclaredType ')]/node()"/>
       
  1213         </td>
       
  1214         <td>
       
  1215           <xsl:apply-templates select="ancestor::*[contains(@class, ' cxxTypedef/cxxTypedef ')][1]/*[contains(@class, ' topic/title ')]/node()"/>
       
  1216         </td>
       
  1217         <xsl:if test="normalize-space($meta)">
       
  1218           <td>
       
  1219             <xsl:value-of select="normalize-space($meta)"/>
       
  1220           </td>
       
  1221         </xsl:if>
       
  1222       </tr>
       
  1223     </table>
       
  1224   </xsl:template>
       
  1225 
       
  1226 </xsl:stylesheet>