| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310 | 
							- <?xml version='1.0'?>
 
- <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 
-                 xmlns:t="http://nwalsh.com/docbook/xsl/template/1.0"
 
-                 xmlns:param="http://nwalsh.com/docbook/xsl/template/1.0/param"
 
-                 xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
 
-                 xmlns:fo="http://www.w3.org/1999/XSL/Format"
 
-                 xmlns:exsl="http://exslt.org/common"
 
-                 exclude-result-prefixes="doc t param exsl"
 
-                 version='1.0'>
 
- <!-- ********************************************************************
 
-      $Id: titlepage.xsl 9600 2012-09-11 12:12:09Z kosek $
 
-      ********************************************************************
 
-      This file is part of the XSL DocBook Stylesheet distribution.
 
-      See ../README or http://docbook.sf.net/release/xsl/current/ for
 
-      copyright and other information.
 
-      ******************************************************************** -->
 
- <!-- ==================================================================== -->
 
- <!-- Namespace for wrapper elements. Please set it for XHTML. -->
 
- <xsl:param name="ns">
 
-   <!-- Guess correct setting for cases where parameter is not supplied -->
 
-   <xsl:choose>
 
-     <xsl:when test="//*[namespace-uri() = 'http://www.w3.org/1999/XSL/Format']">http://www.w3.org/1999/XSL/Format</xsl:when>
 
-     <xsl:when test="//*[namespace-uri() = 'http://www.w3.org/1999/xhtml']">http://www.w3.org/1999/xhtml</xsl:when>
 
-   </xsl:choose>
 
- </xsl:param>
 
- <xsl:template match="/">
 
-   <xsl:text>
</xsl:text>
 
-   <xsl:apply-templates/>
 
-   <xsl:text>
</xsl:text>
 
- </xsl:template>
 
- <doc:reference xmlns="" xml:id="template">
 
-   <?dbhtml dir="template"?>
 
-   <?dbhtml filename="index.html"?>
 
-   <info>
 
-     <title>Titlepage Template Stylesheet Reference</title>
 
-     <releaseinfo role="meta">
 
-       $Id: titlepage.xsl 9600 2012-09-11 12:12:09Z kosek $
 
-     </releaseinfo>
 
-   </info>
 
-   <partintro xml:id="intro_partintro">
 
-     <title>Introduction</title>
 
-     <para>This is technical reference documentation for the
 
-       “titlepage” templates in the DocBook XSL Stylesheets.</para>
 
-     <para>This is not intended to be user documentation.  It is
 
-       provided for developers writing customization layers for the
 
-       stylesheets.</para>
 
-   </partintro>
 
- </doc:reference>
 
- <!-- ==================================================================== -->
 
- <xsl:preserve-space elements="*"/>
 
- <xsl:strip-space elements="xsl:* t:*"/>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:templates" xmlns="" id="templates">
 
- <refpurpose>Construct a stylesheet for the templates provided</refpurpose>
 
- <refdescription>
 
- <para>The <literal>t:templates</literal> element is the root of a
 
- set of templates. This template creates an appropriate
 
- <literal>xsl:stylesheet</literal> for the templates.</para>
 
- <para>If the <literal>t:templates</literal> element has a
 
- <literal>base-stylesheet</literal> attribute, an
 
- <literal>xsl:import</literal> statement is constructed for it.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:templates">
 
-   <xsl:element name="xsl:stylesheet">
 
-     <xsl:for-each select="document('')/xsl:stylesheet/namespace::exsl">
 
-       <xsl:copy/>
 
-     </xsl:for-each>
 
-     <xsl:attribute name="version">1.0</xsl:attribute>
 
-     <xsl:attribute name="exclude-result-prefixes">exsl</xsl:attribute>
 
-     <xsl:text>

</xsl:text>
 
-     <xsl:comment>
 
-       <xsl:text> This stylesheet was created by </xsl:text>
 
-       <xsl:text>template/titlepage.xsl</xsl:text>
 
-     </xsl:comment>
 
-     <xsl:if test="@t:base-stylesheet">
 
-       <xsl:text>

</xsl:text>
 
-       <xsl:element name="xsl:import">
 
-         <xsl:attribute name="href">
 
-           <xsl:value-of select="@t:base-stylesheet"/>
 
-         </xsl:attribute>
 
-       </xsl:element>
 
-     </xsl:if>
 
-     <xsl:apply-templates/>
 
-     <xsl:text>

</xsl:text>
 
-   </xsl:element>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="xsl:*" xmlns="" id="star">
 
- <refpurpose>Copy xsl: elements straight through</refpurpose>
 
- <refdescription>
 
- <para>This template simply copies the xsl: elements
 
- straight through into the result tree.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="xsl:*">
 
-   <xsl:apply-templates select="." mode="copy"/>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:titlepage" xmlns="" id="titlepage">
 
- <refpurpose>Create the templates necessary to construct a title page</refpurpose>
 
- <refdescription>
 
- <para>The <literal>t:titlepage</literal> element creates a set of
 
- templates for processing the titlepage for an element. The
 
- <quote>root</quote> of this template set is the template named
 
- <quote><literal>wrapper.titlepage</literal></quote>. That is the
 
- template that should be called to generate the title page.
 
- </para>
 
- <para>The <literal>t:titlepage</literal> element has three attributes:
 
- <variablelist>
 
- <varlistentry><term>element</term>
 
- <listitem><para>The name of the source document element for which
 
- these templates apply. In other words, to make a title page for the
 
- <tag>article</tag> element, set the
 
- <tag class="attribute">element</tag> attribute to
 
- <quote><literal>article</literal></quote>. This attribute is required.
 
- </para></listitem>
 
- </varlistentry>
 
- <varlistentry><term>wrapper</term>
 
- <listitem><para>The entire title page can be wrapped with an element.
 
- This attribute identifies that element.
 
- </para></listitem>
 
- </varlistentry>
 
- <varlistentry><term>class</term>
 
- <listitem><para>If the <tag class="attribute">class</tag> attribute
 
- is set, a <tag class="attribute">class</tag> attribute with this
 
- value will be added to the wrapper element that surrounds the entire
 
- title page.
 
- </para></listitem>
 
- </varlistentry>
 
- </variablelist>
 
- </para>
 
- <para>Any other attributes are copied through literally to the
 
- wrapper element.</para>
 
- <para>The content of a <literal>t:titlepage</literal> is one or
 
- more <literal>t:titlepage-content</literal>,
 
- <literal>t:titlepage-separator</literal>, and
 
- <literal>t:titlepage-before</literal> elements.</para>
 
- <para>Each of these elements may be provided for the <quote>recto</quote>
 
- and <quote>verso</quote> sides of the title page.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:titlepage">
 
-   <!-- process the children to make the templates for the content,
 
-        separator, and before elements -->
 
-   <xsl:apply-templates/>
 
-   <!-- output the title page template -->
 
-   <xsl:text>

</xsl:text>
 
-   <xsl:element name="xsl:template">
 
-     <xsl:attribute name="name">
 
-       <xsl:value-of select="@t:element"/>
 
-       <xsl:text>.titlepage</xsl:text>
 
-     </xsl:attribute>
 
-     <xsl:text>
  </xsl:text>
 
-     <xsl:element name="{@t:wrapper}" namespace="{$ns}">
 
-       <xsl:apply-templates select="@*" mode="copy.literal.atts"/>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:variable">
 
-         <xsl:attribute name="name">recto.content</xsl:attribute>
 
-         <xsl:text>
      </xsl:text>
 
-         <xsl:element name="xsl:call-template">
 
-           <xsl:attribute name="name">
 
-             <xsl:value-of select="@t:element"/>
 
-             <xsl:text>.titlepage.before.recto</xsl:text>
 
-           </xsl:attribute>
 
-         </xsl:element>
 
-         <xsl:text>
      </xsl:text>
 
-         <xsl:element name="xsl:call-template">
 
-           <xsl:attribute name="name">
 
-             <xsl:value-of select="@t:element"/>
 
-             <xsl:text>.titlepage.recto</xsl:text>
 
-           </xsl:attribute>
 
-         </xsl:element>
 
-         <xsl:text>
    </xsl:text>
 
-       </xsl:element>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:variable">
 
- 	<xsl:attribute name="name">recto.elements.count</xsl:attribute>
 
- 	<xsl:text>
      </xsl:text>
 
- 	<xsl:element name="xsl:choose">
 
- 	  <xsl:text>
        </xsl:text>
 
- 	  <xsl:element name="xsl:when">
 
- 	    <xsl:attribute name="test">function-available('exsl:node-set')</xsl:attribute>
 
- 	    <xsl:element name="xsl:value-of">
 
- 	      <xsl:attribute name="select">count(exsl:node-set($recto.content)/*)</xsl:attribute>
 
- 	    </xsl:element>
 
- 	  </xsl:element>
 
- 	  <xsl:text>
        </xsl:text>
 
- 	  <xsl:element name="xsl:when">
 
- 	    <xsl:attribute name="test">contains(system-property('xsl:vendor'), 'Apache Software Foundation')</xsl:attribute>
 
- 	    <xsl:text>
          </xsl:text>
 
- 	    <xsl:comment>Xalan quirk</xsl:comment>
 
- 	    <xsl:element name="xsl:value-of">
 
- 	      <xsl:attribute name="select">count(exsl:node-set($recto.content)/*)</xsl:attribute>
 
- 	    </xsl:element>
 
- 	  </xsl:element>
 
- 	  <xsl:text>
        </xsl:text>
 
- 	  <xsl:element name="xsl:otherwise">
 
- 	    <xsl:text>1</xsl:text>
 
- 	  </xsl:element>
 
- 	  <xsl:text>
      </xsl:text>
 
- 	</xsl:element>
 
- 	<xsl:text>
    </xsl:text>
 
-       </xsl:element>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:if">
 
-         <xsl:attribute name="test">(normalize-space($recto.content) != '') or ($recto.elements.count > 0)</xsl:attribute>
 
-         <xsl:text>
      </xsl:text>
 
-         <xsl:element name="{@t:wrapper}" namespace="{$ns}">
 
-           <xsl:apply-templates select="t:titlepage-content[@t:side='recto']/@*"
 
-                                mode="copy.literal.atts"/>
 
-           <xsl:element name="xsl:copy-of">
 
-             <xsl:attribute name="select">$recto.content</xsl:attribute>
 
-           </xsl:element>
 
-         </xsl:element>
 
-         <xsl:text>
    </xsl:text>
 
-       </xsl:element>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:variable">
 
-         <xsl:attribute name="name">verso.content</xsl:attribute>
 
-         <xsl:text>
      </xsl:text>
 
-         <xsl:element name="xsl:call-template">
 
-           <xsl:attribute name="name">
 
-             <xsl:value-of select="@t:element"/>
 
-             <xsl:text>.titlepage.before.verso</xsl:text>
 
-           </xsl:attribute>
 
-         </xsl:element>
 
-         <xsl:text>
      </xsl:text>
 
-         <xsl:element name="xsl:call-template">
 
-           <xsl:attribute name="name">
 
-             <xsl:value-of select="@t:element"/>
 
-             <xsl:text>.titlepage.verso</xsl:text>
 
-           </xsl:attribute>
 
-         </xsl:element>
 
-         <xsl:text>
    </xsl:text>
 
-       </xsl:element>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:variable">
 
- 	<xsl:attribute name="name">verso.elements.count</xsl:attribute>
 
- 	<xsl:text>
      </xsl:text>
 
- 	<xsl:element name="xsl:choose">
 
- 	  <xsl:text>
        </xsl:text>
 
- 	  <xsl:element name="xsl:when">
 
- 	    <xsl:attribute name="test">function-available('exsl:node-set')</xsl:attribute>
 
- 	    <xsl:element name="xsl:value-of">
 
- 	      <xsl:attribute name="select">count(exsl:node-set($verso.content)/*)</xsl:attribute>
 
- 	    </xsl:element>
 
- 	  </xsl:element>
 
- 	  <xsl:text>
        </xsl:text>
 
- 	  <xsl:element name="xsl:when">
 
- 	    <xsl:attribute name="test">contains(system-property('xsl:vendor'), 'Apache Software Foundation')</xsl:attribute>
 
- 	    <xsl:text>
          </xsl:text>
 
- 	    <xsl:comment>Xalan quirk</xsl:comment>
 
- 	    <xsl:element name="xsl:value-of">
 
- 	      <xsl:attribute name="select">count(exsl:node-set($verso.content)/*)</xsl:attribute>
 
- 	    </xsl:element>
 
- 	  </xsl:element>
 
- 	  <xsl:text>
        </xsl:text>
 
- 	  <xsl:element name="xsl:otherwise">
 
- 	    <xsl:text>1</xsl:text>
 
- 	  </xsl:element>
 
- 	  <xsl:text>
      </xsl:text>
 
- 	</xsl:element>
 
- 	<xsl:text>
    </xsl:text>
 
-       </xsl:element>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:if">
 
-         <xsl:attribute name="test">(normalize-space($verso.content) != '') or ($verso.elements.count > 0)</xsl:attribute>
 
-         <xsl:text>
      </xsl:text>
 
-         <xsl:element name="{@t:wrapper}" namespace="{$ns}">
 
-           <xsl:apply-templates select="t:titlepage-content[@t:side='verso']/@*"
 
-                                mode="copy.literal.atts"/>
 
-           <xsl:element name="xsl:copy-of">
 
-             <xsl:attribute name="select">$verso.content</xsl:attribute>
 
-           </xsl:element>
 
-         </xsl:element>
 
-         <xsl:text>
    </xsl:text>
 
-       </xsl:element>
 
-       <xsl:text>
    </xsl:text>
 
-       <xsl:element name="xsl:call-template">
 
-         <xsl:attribute name="name">
 
-           <xsl:value-of select="@t:element"/>
 
-           <xsl:text>.titlepage.separator</xsl:text>
 
-         </xsl:attribute>
 
-       </xsl:element>
 
-       <xsl:text>
  </xsl:text>
 
-     </xsl:element>
 
-     <xsl:text>
</xsl:text>
 
-   </xsl:element>
 
-   <!-- If we're not importing a base stylesheet, output a default rule
 
-        for the recto- and verso-mode elements. (If we are importing a
 
-        base stylesheet, don't do this since the *-rules in the stylesheet
 
-        will totally override the rules that would otherwise be imported.)
 
-        -->
 
-   <xsl:if test="not(../@t:base-stylesheet)">
 
-     <!-- output a default rule for the recto-modes elements -->
 
-     <xsl:text>

</xsl:text>
 
-     <xsl:element name="xsl:template">
 
-       <xsl:attribute name="match">*</xsl:attribute>
 
-       <xsl:attribute name="mode">
 
-         <xsl:value-of select="@t:element"/>
 
-         <xsl:text>.titlepage.recto.mode</xsl:text>
 
-       </xsl:attribute>
 
-       <xsl:text>
  </xsl:text>
 
-       <xsl:comment> if an element isn't found in this mode, </xsl:comment>
 
-       <xsl:text>
  </xsl:text>
 
-       <xsl:comment> try the generic titlepage.mode </xsl:comment>
 
-       <xsl:text>
  </xsl:text>
 
-       <xsl:element name="xsl:apply-templates">
 
-         <xsl:attribute name="select">.</xsl:attribute>
 
-         <xsl:attribute name="mode">titlepage.mode</xsl:attribute>
 
-       </xsl:element>
 
-       <xsl:text>
</xsl:text>
 
-     </xsl:element>
 
-     <!-- output a default rule for the verso-modes elements -->
 
-     <xsl:text>

</xsl:text>
 
-     <xsl:element name="xsl:template">
 
-       <xsl:attribute name="match">*</xsl:attribute>
 
-       <xsl:attribute name="mode">
 
-         <xsl:value-of select="@t:element"/>
 
-         <xsl:text>.titlepage.verso.mode</xsl:text>
 
-       </xsl:attribute>
 
-       <xsl:text>
  </xsl:text>
 
-       <xsl:comment> if an element isn't found in this mode, </xsl:comment>
 
-       <xsl:text>
  </xsl:text>
 
-       <xsl:comment> try the generic titlepage.mode </xsl:comment>
 
-       <xsl:text>
  </xsl:text>
 
-       <xsl:element name="xsl:apply-templates">
 
-         <xsl:attribute name="select">.</xsl:attribute>
 
-         <xsl:attribute name="mode">titlepage.mode</xsl:attribute>
 
-       </xsl:element>
 
-       <xsl:text>
</xsl:text>
 
-     </xsl:element>
 
-   </xsl:if>
 
-   <!-- output default templates for each of the elements listed in  -->
 
-   <!-- the titlepage-content. If a template is suppressed or forced -->
 
-   <!-- to be off, or has already been output, don't output it.      -->
 
-   <xsl:for-each select="t:titlepage-content/*">
 
-     <xsl:variable name="thisnode" select="."/>
 
-     <xsl:if test="(not(@t:suppress-template) or @t:suppress-template='0')
 
-                   and (not(@t:force) or @t:force='0')
 
-                   and (not(preceding-sibling::*[name(.)=name($thisnode)]))">
 
-       <xsl:text>

</xsl:text>
 
-       <xsl:element name="xsl:template">
 
-         <xsl:attribute name="match">
 
-           <xsl:value-of select="name(.)"/>
 
-         </xsl:attribute>
 
-         <xsl:attribute name="mode">
 
-           <xsl:value-of select="../../@t:element"/>
 
-           <xsl:text>.titlepage.</xsl:text>
 
-           <xsl:value-of select="../@t:side"/>
 
-           <xsl:text>.auto.mode</xsl:text>
 
-         </xsl:attribute>
 
-         <xsl:text>
</xsl:text>
 
-         <xsl:element name="{../../@t:wrapper}" namespace="{$ns}">
 
-           <xsl:attribute name="xsl:use-attribute-sets">
 
-             <xsl:value-of select="../../@t:element"/>
 
-             <xsl:text>.titlepage.</xsl:text>
 
-             <xsl:value-of select="../@t:side"/>
 
-             <xsl:text>.style</xsl:text>
 
-           </xsl:attribute>
 
-           <xsl:for-each select="@*">
 
-             <xsl:if test="not(starts-with(namespace-uri(.),
 
-                                 'http://nwalsh.com/docbook/xsl/template/1.0'))">
 
-               <xsl:attribute name="{name(.)}" namespace="{namespace-uri(.)}">
 
-                 <xsl:value-of select="."/>
 
-               </xsl:attribute>
 
-             </xsl:if>
 
-           </xsl:for-each>
 
-           <xsl:text>
</xsl:text>
 
-           <xsl:choose>
 
-             <xsl:when test="@t:named-template">
 
-               <xsl:element name="xsl:call-template">
 
-                 <xsl:attribute name="name">
 
-                   <xsl:value-of select="@t:named-template"/>
 
-                 </xsl:attribute>
 
-                 <xsl:for-each select="@*">
 
-                   <xsl:if test="namespace-uri(.)='http://nwalsh.com/docbook/xsl/template/1.0/param'">
 
-                     <xsl:text>
</xsl:text>
 
-                     <xsl:element name="xsl:with-param">
 
-                       <xsl:attribute name="name">
 
-                         <xsl:value-of select="local-name(.)"/>
 
-                       </xsl:attribute>
 
-                       <xsl:attribute name="select">
 
-                         <xsl:value-of select="."/>
 
-                       </xsl:attribute>
 
-                     </xsl:element>
 
-                   </xsl:if>
 
-                 </xsl:for-each>
 
-                 <xsl:text>
</xsl:text>
 
-               </xsl:element>
 
-             </xsl:when>
 
-             <xsl:otherwise>
 
-               <xsl:element name="xsl:apply-templates">
 
-                 <xsl:attribute name="select">.</xsl:attribute>
 
-                 <xsl:attribute name="mode">
 
-                   <xsl:value-of select="../../@t:element"/>
 
-                   <xsl:text>.titlepage.</xsl:text>
 
-                   <xsl:value-of select="../@t:side"/>
 
-                   <xsl:text>.mode</xsl:text>
 
-                 </xsl:attribute>
 
-               </xsl:element>
 
-             </xsl:otherwise>
 
-           </xsl:choose>
 
-           <xsl:text>
</xsl:text>
 
-         </xsl:element>
 
-         <xsl:text>
</xsl:text>
 
-       </xsl:element>
 
-     </xsl:if>
 
-   </xsl:for-each>
 
- </xsl:template>
 
- <doc:template match="@*" mode="copy.literal.atts" xmlns=""
 
-               id="attr_star_in_copy.literal.atts">
 
- <refpurpose>Copy t:titlepage attributes</refpurpose>
 
- <refdescription>
 
- <para>This template copies all of the <quote>other</quote> attributes
 
- from a <literal>t:titlepage</literal> element onto the specified
 
- wrapper.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="@*" mode="copy.literal.atts">
 
-   <xsl:if test="not(starts-with(namespace-uri(.),
 
-                                 'http://nwalsh.com/docbook/xsl/template/1.0'))">
 
-     <xsl:attribute name="{name(.)}">
 
-       <xsl:value-of select="."/>
 
-     </xsl:attribute>
 
-   </xsl:if>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:titlepage-content" id="titlepage-content">
 
- <refpurpose>Create templates for the content of one side of a title page</refpurpose>
 
- <refdescription>
 
- <para>The title page content, that is, the elements from the source
 
- document that are rendered on the title page, can be controlled independently
 
- for the recto and verso sides of the title page.</para>
 
- <para>The <literal>t:titlepage-content</literal> element has two attributes:
 
- <variablelist>
 
- <varlistentry><term>side</term>
 
- <listitem><para>Identifies the side of the page to which this title
 
- page content applies. The
 
- <tag class="attribute">side</tag> attribute is required and
 
- must be set to either 
 
- <quote><literal>recto</literal></quote> or
 
- <quote><literal>verso</literal></quote>. In addition, you must specify
 
- exactly one <literal>t:titlepage-content</literal> for each side
 
- within each <literal>t:titlepage</literal>.</para>
 
- </listitem>
 
- </varlistentry>
 
- <varlistentry><term>order</term>
 
- <listitem><para>Indicates how the order of the elements presented on
 
- the title page is determined. If the
 
- <tag class="attribute">order</tag> is
 
- <quote><literal>document</literal></quote>, the elements are presented
 
- in document order. Otherwise (if the
 
- <tag class="attribute">order</tag> is
 
- <quote><literal>stylesheet</literal></quote>), the elements are presented
 
- in the order that they appear in the template (and consequently in
 
- the stylesheet).</para>
 
- </listitem>
 
- </varlistentry>
 
- </variablelist>
 
- </para>
 
- <para>The content of a <literal>t:titlepage-content</literal> element is
 
- a list of element names. These names should be unqualified.  They identify
 
- the elements in the source document that should appear on the title page.
 
- </para>
 
- <para>Each element may have a single attribute:
 
- <tag class="attribute">predicate</tag>. The value of this
 
- attribute is used as a predicate for the expression that matches
 
- the element on which it occurs.</para>
 
- <para>In other words, to put only the first three authors on the
 
- recto-side of a title
 
- page, you could specify:
 
- <screen><![CDATA[
 
-   <t:titlepage-contents side="recto">
 
-     <!-- other titlepage elements -->
 
-     <author predicate="[count(previous-sibling::author)<2]"/>
 
-     <!-- other titlepage elements -->
 
-   </t:titlepage-contents>
 
- ]]></screen>
 
- </para>
 
- <para>Usually, the elements so named are empty. But it is possible to
 
- make one level of selection within them. Suppose that you want to
 
- process <literal>authorgroup</literal> elements on the title page, but
 
- you want to select only proper authors, editors, or corporate authors,
 
- not collaborators or other credited authors.</para>
 
- <para>In that case, you can put a <literal>t:or</literal> group inside
 
- the <literal>authorgroup</literal> element:
 
- <screen><![CDATA[
 
-   <t:titlepage-contents side="recto">
 
-     <!-- other titlepage elements -->
 
-     <authorgroup>
 
-       <t:or>
 
-         <author/>
 
-         <editor/>
 
-         <corpauthor/>
 
-       </t:or>
 
-     </authorgroup>
 
-     <!-- other titlepage elements -->
 
-   </t:titlepage-contents>
 
- ]]></screen>
 
- </para>
 
- <para>This will have the effect of automatically generating a template
 
- for processing <literal>authorgroup</literal>s in the title page mode,
 
- selecting only the specified children. If you need more complex processing,
 
- you'll have to construct the templates by hand.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:titlepage-content">
 
-   <xsl:variable name="side">
 
-     <xsl:choose>
 
-       <xsl:when test="@t:side='recto' or @t:side='verso'">
 
-         <xsl:value-of select="@t:side"/>
 
-       </xsl:when>
 
-       <xsl:when test="@t:side">
 
-         <xsl:message terminate="yes">
 
-           <xsl:text>Illegal value specified for @t:side </xsl:text>
 
-           <xsl:text>on t:titlepage-content: </xsl:text>
 
-           <xsl:value-of select="@t:side"/>
 
-         </xsl:message>
 
-       </xsl:when>
 
-       <xsl:otherwise>
 
-         <xsl:message terminate="yes">
 
-           <xsl:text>The @t:side attribute is required on </xsl:text>
 
-           <xsl:text>t:titlepage-content.</xsl:text>
 
-         </xsl:message>
 
-       </xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="mode">
 
-     <xsl:value-of select="../@t:element"/>
 
-     <xsl:text>.titlepage.</xsl:text>
 
-     <xsl:value-of select="$side"/>
 
-     <xsl:text>.auto.mode</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:text>

</xsl:text>
 
-   <xsl:element name="xsl:template">
 
-     <xsl:attribute name="name">
 
-       <xsl:value-of select="../@t:element"/>
 
-       <xsl:text>.titlepage.</xsl:text>
 
-       <xsl:value-of select="$side"/>
 
-     </xsl:attribute>
 
-     <xsl:choose>
 
-       <!-- if document order is selected, make a huge select statement
 
-            on a single xsl:apply-templates to pick out the right elements
 
-            for the title page. -->
 
-       <xsl:when test="@t:order='document'">
 
-         <xsl:if test="count(child::*)>0">
 
-           <xsl:element name="xsl:apply-templates">
 
-             <xsl:attribute name="mode">
 
-               <xsl:value-of select="$mode"/>
 
-             </xsl:attribute>
 
-             <xsl:attribute name="select">
 
-               <xsl:apply-templates mode="document.order"/>
 
-             </xsl:attribute>
 
-           </xsl:element>
 
-         </xsl:if>
 
-       </xsl:when>
 
-       <!-- otherwise, select each of the elements in the specified order -->
 
-       <xsl:otherwise>
 
-         <xsl:apply-templates mode="stylesheet.order"/>
 
-       </xsl:otherwise>
 
-     </xsl:choose>
 
-     <xsl:text>
</xsl:text>
 
-   </xsl:element>
 
-   <xsl:apply-templates mode="titlepage.specialrules"/>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:titlepage-separator" id="titlepage-separator">
 
- <refpurpose>Create templates for the separator</refpurpose>
 
- <refdescription>
 
- <para>The title page is separated from the content which follows it by
 
- the markup specified in the <literal>t:titlepage-separator</literal>
 
- element.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:titlepage-separator">
 
-   <xsl:text>

</xsl:text>
 
-   <xsl:element name="xsl:template">
 
-     <xsl:attribute name="name">
 
-       <xsl:value-of select="../@t:element"/>
 
-       <xsl:text>.titlepage.separator</xsl:text>
 
-     </xsl:attribute>
 
-     <xsl:apply-templates mode="copy"/>
 
-     <xsl:text>
</xsl:text>
 
-   </xsl:element>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:titlepage-before" id="titlepage-before">
 
- <refpurpose>Create templates for what precedes a title page</refpurpose>
 
- <refdescription>
 
- <para>Each side of the title page is preceded by the markup specified
 
- in the <literal>t:titlepage-before</literal> element for that
 
- side.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:titlepage-before">
 
-   <xsl:text>

</xsl:text>
 
-   <xsl:element name="xsl:template">
 
-     <xsl:attribute name="name">
 
-       <xsl:value-of select="../@t:element"/>
 
-       <xsl:text>.titlepage.before.</xsl:text>
 
-       <xsl:value-of select="@t:side"/>
 
-     </xsl:attribute>
 
-     <xsl:apply-templates mode="copy"/>
 
-     <xsl:text>
</xsl:text>
 
-   </xsl:element>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="*" mode="copy" xmlns="" id="star_in_copy">
 
- <refpurpose>Copy elements</refpurpose>
 
- <refdescription>
 
- <para>This template simply copies the elements that it applies to
 
- straight through into the result tree.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="*" mode="copy">
 
-   <xsl:choose>
 
-     <xsl:when test="(name(.) = local-name(.)) and namespace-uri(.) != ''">
 
-       <xsl:element name="{name(.)}" namespace="{namespace-uri(.)}">
 
- 	<xsl:apply-templates select="@*" mode="copy"/>
 
- 	<xsl:apply-templates mode="copy"/>
 
-       </xsl:element>
 
-     </xsl:when>
 
-     <xsl:otherwise>
 
-       <xsl:element name="{name(.)}">
 
- 	<xsl:apply-templates select="@*" mode="copy"/>
 
- 	<xsl:apply-templates mode="copy"/>
 
-       </xsl:element>
 
-     </xsl:otherwise>
 
-   </xsl:choose>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="@*" mode="copy" xmlns="" id="attr_star_in_copy">
 
- <refpurpose>Copy attributes</refpurpose>
 
- <refdescription>
 
- <para>This template simply copies the attributes that it applies to
 
- straight through into the result tree.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="@*" mode="copy">
 
-   <xsl:choose>
 
-     <xsl:when test="(name(.) = local-name(.)) and namespace-uri(.) != ''">
 
-       <xsl:attribute name="{name(.)}" namespace="{namespace-uri(.)}">
 
- 	<xsl:value-of select="."/>
 
-       </xsl:attribute>
 
-     </xsl:when>
 
-     <xsl:otherwise>
 
-       <xsl:attribute name="{name(.)}">
 
- 	<xsl:value-of select="."/>
 
-       </xsl:attribute>
 
-     </xsl:otherwise>
 
-   </xsl:choose>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="*" mode="document.order" xmlns="" id="attr_star_in_document.order">
 
- <refpurpose>Create rules to process titlepage elements in document order</refpurpose>
 
- <refdescription>
 
- <para>This template is called to process all of the children of the
 
- <literal>t:titlepage-content</literal> element. It creates the hairy
 
- select expression necessary to process each of those elements in
 
- the title page.</para>
 
- <para>Note that this template automatically handles the case where
 
- some DocBook elements, like title and subtitle, can occur both inside
 
- the *info elements where metadata is usually stored and outside.
 
- </para>
 
- <para>It also automatically calculates the name for the *info container
 
- and handles elements that have historically had containers with different
 
- names.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="*" mode="document.order">
 
-   <xsl:variable name="docinfo">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>info</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:variable name="altinfo">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='article'">
 
-         <xsl:text>artheader</xsl:text>
 
-       </xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='qandaset'">
 
-         <xsl:text>blockinfo</xsl:text>
 
-       </xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='section'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect1'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect2'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect3'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect4'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect5'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='book'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='set'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='topic'"></xsl:when>
 
-       <xsl:otherwise>docinfo</xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="side">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage-content/@t:side">
 
-         <xsl:value-of select="ancestor::t:titlepage-content/@t:side"/>
 
-       </xsl:when>
 
-       <xsl:otherwise>
 
-         <xsl:text>recto</xsl:text>
 
-       </xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="mode">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>.titlepage.</xsl:text>
 
-     <xsl:value-of select="$side"/>
 
-     <xsl:text>.auto.mode</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:if test="preceding-sibling::*">
 
-     <xsl:text>|</xsl:text>
 
-   </xsl:if>
 
-   <xsl:value-of select="$docinfo"/>
 
-   <xsl:text>/</xsl:text>
 
-   <xsl:value-of select="name(.)"/>
 
-   <xsl:if test="@t:predicate">
 
-     <xsl:value-of select="@t:predicate"/>
 
-   </xsl:if>
 
-   <xsl:if test="$altinfo != ''">
 
-     <xsl:text>|</xsl:text>
 
-     <xsl:value-of select="$altinfo"/>
 
-     <xsl:text>/</xsl:text>
 
-     <xsl:value-of select="name(.)"/>
 
-     <xsl:if test="@t:predicate">
 
-       <xsl:value-of select="@t:predicate"/>
 
-     </xsl:if>
 
-   </xsl:if>
 
-   <!-- info -->
 
-   <xsl:text>|info</xsl:text>
 
-   <xsl:text>/</xsl:text>
 
-   <xsl:value-of select="name(.)"/>
 
-   <xsl:if test="@t:predicate">
 
-     <xsl:value-of select="@t:predicate"/>
 
-   </xsl:if>
 
-   <xsl:if test="local-name(.) = 'title'
 
-                 or local-name(.) = 'subtitle'
 
-                 or local-name(.) = 'titleabbrev'">
 
-     <xsl:text>|</xsl:text>
 
-     <xsl:value-of select="name(.)"/>
 
-     <xsl:if test="@t:predicate">
 
-       <xsl:value-of select="@t:predicate"/>
 
-     </xsl:if>
 
-   </xsl:if>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="*" mode="document.order" xmlns="" id="star_in_document.order">
 
- <refpurpose>Create rules to process titlepage elements in stylesheet order</refpurpose>
 
- <refdescription>
 
- <para>This template is called to process all of the children of the
 
- <literal>t:titlepage-content</literal> element. It creates the set
 
- of <literal>xsl:apply-templates</literal> elements necessary
 
- process each of those elements in the title page.</para>
 
- <para>Note that this template automatically handles the case where
 
- some DocBook elements, like title and subtitle, can occur both inside
 
- the *info elements where metadata is usually stored and outside.
 
- </para>
 
- <para>It also automatically calculates the name for the *info container
 
- and handles elements that have historically had containers with different
 
- names.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="*" mode="stylesheet.order">
 
-   <xsl:variable name="docinfo">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>info</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:variable name="altinfo">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='article'">
 
-         <xsl:text>artheader</xsl:text>
 
-       </xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='qandaset'">
 
-         <xsl:text>blockinfo</xsl:text>
 
-       </xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='section'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect1'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect2'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect3'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect4'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='sect5'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='book'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='set'"></xsl:when>
 
-       <xsl:when test="ancestor::t:titlepage/@t:element='topic'"></xsl:when>
 
-       <xsl:otherwise>docinfo</xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="side">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage-content/@t:side">
 
-         <xsl:value-of select="ancestor::t:titlepage-content/@t:side"/>
 
-       </xsl:when>
 
-       <xsl:otherwise>recto</xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="mode">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>.titlepage.</xsl:text>
 
-     <xsl:value-of select="$side"/>
 
-     <xsl:text>.auto.mode</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:text>
  </xsl:text>
 
-   <xsl:choose>
 
-     <xsl:when test="@t:force and @t:force != '0'">
 
-       <xsl:choose>
 
-         <xsl:when test="@t:named-template">
 
-           <xsl:element name="{../../@t:wrapper}" namespace="{$ns}">
 
-             <xsl:attribute name="xsl:use-attribute-sets">
 
-               <xsl:value-of select="../../@t:element"/>
 
-               <xsl:text>.titlepage.</xsl:text>
 
-               <xsl:value-of select="../@t:side"/>
 
-               <xsl:text>.style</xsl:text>
 
-             </xsl:attribute>
 
-             <xsl:for-each select="@*">
 
-               <xsl:if test="not(starts-with(namespace-uri(.),
 
-                                   'http://nwalsh.com/docbook/xsl/template/1.0'))">
 
-                 <xsl:attribute name="{name(.)}" namespace="{namespace-uri(.)}">
 
-                   <xsl:value-of select="."/>
 
-                 </xsl:attribute>
 
-               </xsl:if>
 
-             </xsl:for-each>
 
-             <xsl:text>
</xsl:text>
 
-             <xsl:element name="xsl:call-template">
 
-               <xsl:attribute name="name">
 
-                 <xsl:value-of select="@t:named-template"/>
 
-               </xsl:attribute>
 
-               <xsl:for-each select="@*">
 
-                 <xsl:if test="namespace-uri(.)='http://nwalsh.com/docbook/xsl/template/1.0/param'">
 
-                   <xsl:text>
</xsl:text>
 
-                   <xsl:element name="xsl:with-param">
 
-                     <xsl:attribute name="name">
 
-                       <xsl:value-of select="local-name(.)"/>
 
-                     </xsl:attribute>
 
-                     <xsl:attribute name="select">
 
-                       <xsl:value-of select="."/>
 
-                     </xsl:attribute>
 
-                   </xsl:element>
 
-                 </xsl:if>
 
-               </xsl:for-each>
 
-               <xsl:text>
</xsl:text>
 
-             </xsl:element>
 
-           </xsl:element>
 
-         </xsl:when>
 
-         <xsl:otherwise>
 
-           <xsl:message terminate="yes">
 
-             <xsl:text>Force can only be used with named-templates.</xsl:text>
 
-           </xsl:message>
 
-         </xsl:otherwise>
 
-       </xsl:choose>
 
-     </xsl:when>
 
-     <xsl:otherwise>
 
-       <xsl:choose>
 
-         <xsl:when test="local-name(.) = 'title'
 
-                         or local-name(.) = 'subtitle'
 
-                         or local-name(.) = 'titleabbrev'">
 
-           <!-- the title, subtitle, and titleabbrev elements are special -->
 
-           <xsl:element name="xsl:choose">
 
-             <xsl:text>
    </xsl:text>
 
-             <xsl:element name="xsl:when">
 
-               <xsl:attribute name="test">
 
-                 <xsl:value-of select="$docinfo"/>
 
-                 <xsl:text>/</xsl:text>
 
-                 <xsl:value-of select="name(.)"/>
 
-               </xsl:attribute>
 
-               <xsl:text>
      </xsl:text>
 
-               <xsl:element name="xsl:apply-templates">
 
-                 <xsl:attribute name="mode">
 
-                   <xsl:value-of select="$mode"/>
 
-                 </xsl:attribute>
 
-                 <xsl:attribute name="select">
 
-                   <xsl:value-of select="$docinfo"/>
 
-                   <xsl:text>/</xsl:text>
 
-                   <xsl:value-of select="name(.)"/>
 
-                   <xsl:if test="@t:predicate">
 
-                     <xsl:value-of select="@t:predicate"/>
 
-                   </xsl:if>
 
-                 </xsl:attribute>
 
-               </xsl:element>
 
-               <xsl:text>
    </xsl:text>
 
-             </xsl:element>
 
-             <xsl:if test="$altinfo != ''">
 
-               <xsl:text>
    </xsl:text>
 
-               <xsl:element name="xsl:when">
 
-                 <xsl:attribute name="test">
 
-                   <xsl:value-of select="$altinfo"/>
 
-                   <xsl:text>/</xsl:text>
 
-                   <xsl:value-of select="name(.)"/>
 
-                 </xsl:attribute>
 
-                 <xsl:text>
      </xsl:text>
 
-                 <xsl:element name="xsl:apply-templates">
 
-                   <xsl:attribute name="mode">
 
-                     <xsl:value-of select="$mode"/>
 
-                   </xsl:attribute>
 
-                   <xsl:attribute name="select">
 
-                     <xsl:value-of select="$altinfo"/>
 
-                     <xsl:text>/</xsl:text>
 
-                     <xsl:value-of select="name(.)"/>
 
-                     <xsl:if test="@t:predicate">
 
-                       <xsl:value-of select="@t:predicate"/>
 
-                     </xsl:if>
 
-                   </xsl:attribute>
 
-                 </xsl:element>
 
-                 <xsl:text>
    </xsl:text>
 
-               </xsl:element>
 
-             </xsl:if>
 
-             <!-- info -->
 
-             <xsl:text>
    </xsl:text>
 
-             <xsl:element name="xsl:when">
 
-               <xsl:attribute name="test">
 
-                 <xsl:value-of select="'info'"/>
 
-                 <xsl:text>/</xsl:text>
 
-                 <xsl:value-of select="name(.)"/>
 
-               </xsl:attribute>
 
-               <xsl:text>
      </xsl:text>
 
-               <xsl:element name="xsl:apply-templates">
 
-                 <xsl:attribute name="mode">
 
-                   <xsl:value-of select="$mode"/>
 
-                 </xsl:attribute>
 
-                 <xsl:attribute name="select">
 
-                   <xsl:value-of select="'info'"/>
 
-                   <xsl:text>/</xsl:text>
 
-                   <xsl:value-of select="name(.)"/>
 
-                   <xsl:if test="@t:predicate">
 
-                     <xsl:value-of select="@t:predicate"/>
 
-                   </xsl:if>
 
-                 </xsl:attribute>
 
-               </xsl:element>
 
-               <xsl:text>
    </xsl:text>
 
-             </xsl:element>
 
-             <xsl:text>
    </xsl:text>
 
-             <xsl:element name="xsl:when">
 
-               <xsl:attribute name="test">
 
-                 <xsl:value-of select="name(.)"/>
 
-               </xsl:attribute>
 
-               <xsl:text>
      </xsl:text>
 
-               <xsl:element name="xsl:apply-templates">
 
-                 <xsl:attribute name="mode">
 
-                   <xsl:value-of select="$mode"/>
 
-                 </xsl:attribute>
 
-                 <xsl:attribute name="select">
 
-                   <xsl:value-of select="name(.)"/>
 
-                   <xsl:if test="@t:predicate">
 
-                     <xsl:value-of select="@t:predicate"/>
 
-                   </xsl:if>
 
-                 </xsl:attribute>
 
-               </xsl:element>
 
-               <xsl:text>
    </xsl:text>
 
-             </xsl:element>
 
-             <xsl:text>
  </xsl:text>
 
-           </xsl:element>
 
-           <xsl:text>
</xsl:text>
 
-         </xsl:when>
 
-         <xsl:otherwise>
 
-           <!-- first take care of the $docinfo version -->
 
-           <xsl:element name="xsl:apply-templates">
 
-             <xsl:attribute name="mode">
 
-               <xsl:value-of select="$mode"/>
 
-             </xsl:attribute>
 
-             <xsl:attribute name="select">
 
-               <xsl:value-of select="$docinfo"/>
 
-               <xsl:text>/</xsl:text>
 
-               <xsl:value-of select="name(.)"/>
 
-               <xsl:if test="@t:predicate">
 
-                 <xsl:value-of select="@t:predicate"/>
 
-               </xsl:if>
 
-             </xsl:attribute>
 
-           </xsl:element>
 
-           <!-- then take care of the $altinfo version -->
 
-           <xsl:if test="$altinfo != ''">
 
-             <xsl:text>
  </xsl:text>
 
-             <xsl:element name="xsl:apply-templates">
 
-               <xsl:attribute name="mode">
 
-                 <xsl:value-of select="$mode"/>
 
-               </xsl:attribute>
 
-               <xsl:attribute name="select">
 
-                 <xsl:value-of select="$altinfo"/>
 
-                 <xsl:text>/</xsl:text>
 
-                 <xsl:value-of select="name(.)"/>
 
-                 <xsl:if test="@t:predicate">
 
-                   <xsl:value-of select="@t:predicate"/>
 
-                 </xsl:if>
 
-               </xsl:attribute>
 
-             </xsl:element>
 
-           </xsl:if>
 
-           <!-- info -->
 
-           <xsl:text>
  </xsl:text>
 
-           <xsl:element name="xsl:apply-templates">
 
-             <xsl:attribute name="mode">
 
-               <xsl:value-of select="$mode"/>
 
-             </xsl:attribute>
 
-             <xsl:attribute name="select">
 
-               <xsl:value-of select="'info'"/>
 
-               <xsl:text>/</xsl:text>
 
-               <xsl:value-of select="name(.)"/>
 
-               <xsl:if test="@t:predicate">
 
-                 <xsl:value-of select="@t:predicate"/>
 
-               </xsl:if>
 
-             </xsl:attribute>
 
-           </xsl:element>
 
-         </xsl:otherwise>
 
-       </xsl:choose>
 
-     </xsl:otherwise>
 
-   </xsl:choose>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="*" mode="titlepage.specialrules" xmlns=""
 
-               id="star_in_titlepage.specialrules">
 
- <refpurpose>Create templates for special rules</refpurpose>
 
- <refdescription>
 
- <para>This template is called to process all of the descendants of the
 
- <literal>t:titlepage-content</literal> element that require special
 
- processing. At present, that's just <literal>t:or</literal> elements.
 
- </para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="*" mode="titlepage.specialrules">
 
-   <xsl:variable name="side">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage-content/@t:side">
 
-         <xsl:value-of select="ancestor::t:titlepage-content/@t:side"/>
 
-       </xsl:when>
 
-       <xsl:otherwise>recto</xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="mode">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>.titlepage.</xsl:text>
 
-     <xsl:value-of select="$side"/>
 
-     <xsl:text>.auto.mode</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:choose>
 
-     <xsl:when test="name(.)='t:or'">
 
-       <xsl:apply-templates select="*" mode="titlepage.specialrules"/>
 
-     </xsl:when>
 
-     <xsl:otherwise>
 
-       <xsl:if test="*"><!-- does this element have children? -->
 
-       <xsl:text>

</xsl:text>
 
-         <xsl:element name="xsl:template">
 
-           <xsl:attribute name="match">
 
-             <xsl:value-of select="name(.)"/>
 
-           </xsl:attribute>
 
-           <xsl:attribute name="mode">
 
-             <xsl:value-of select="$mode"/>
 
-           </xsl:attribute>
 
-           <xsl:apply-templates select="*" mode="titlepage.subrules"/>
 
-           <xsl:text>
</xsl:text>
 
-         </xsl:element>
 
-       </xsl:if>
 
-     </xsl:otherwise>
 
-   </xsl:choose>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="*" mode="titlepage.subrules" xmlns=""
 
-               id="star_in_titlepage.subrules">
 
- <refpurpose>Create template for individual special rules</refpurpose>
 
- <refdescription>
 
- <para>This template is called to process the children of special
 
- template elements.
 
- </para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="*" mode="titlepage.subrules">
 
-   <xsl:variable name="side">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage-content/@t:side">
 
-         <xsl:value-of select="ancestor::t:titlepage-content/@t:side"/>
 
-       </xsl:when>
 
-       <xsl:otherwise>recto</xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="mode">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>.titlepage.</xsl:text>
 
-     <xsl:value-of select="$side"/>
 
-     <xsl:text>.auto.mode</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:element name="xsl:apply-templates">
 
-     <xsl:attribute name="select">
 
-       <xsl:value-of select="name(.)"/>
 
-     </xsl:attribute>
 
-     <xsl:attribute name="mode">
 
-       <xsl:value-of select="$mode"/>
 
-     </xsl:attribute>
 
-   </xsl:element>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:or" xmlns="" id="or">
 
- <refpurpose>Process the t:or special rule</refpurpose>
 
- <refdescription>
 
- <para>This template processes t:or.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:or">
 
-   <xsl:variable name="side">
 
-     <xsl:choose>
 
-       <xsl:when test="ancestor::t:titlepage-content/@t:side">
 
-         <xsl:value-of select="ancestor::t:titlepage-content/@t:side"/>
 
-       </xsl:when>
 
-       <xsl:otherwise>recto</xsl:otherwise>
 
-     </xsl:choose>
 
-   </xsl:variable>
 
-   <xsl:variable name="mode">
 
-     <xsl:value-of select="ancestor::t:titlepage/@t:element"/>
 
-     <xsl:text>.titlepage.</xsl:text>
 
-     <xsl:value-of select="$side"/>
 
-     <xsl:text>.auto.mode</xsl:text>
 
-   </xsl:variable>
 
-   <xsl:text>
  </xsl:text>
 
-   <xsl:element name="xsl:apply-templates">
 
-     <xsl:attribute name="select">
 
-       <xsl:call-template name="element-or-list"/>
 
-     </xsl:attribute>
 
-     <xsl:attribute name="mode">
 
-       <xsl:value-of select="$mode"/>
 
-     </xsl:attribute>
 
-   </xsl:element>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template match="t:or" mode="titlepage.subrules" xmlns=""
 
-               id="or_in_titlepage.subrules">
 
- <refpurpose>Process the t:or special rule in
 
- titlepage.subrules mode</refpurpose>
 
- <refdescription>
 
- <para>The titlepage.subrules mode doesn't apply to t:or, so just
 
- reprocess this node in the normal mode.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template match="t:or" mode="titlepage.subrules">
 
-   <xsl:apply-templates select="."/><!-- use normal mode -->
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- <doc:template name="element-or-list" xmlns="">
 
- <refpurpose>Construct the "or-list" used in the select attribute for
 
- special rules.</refpurpose>
 
- <refdescription>
 
- <para>Walk through each of the children of t:or, producing the
 
- text of the select attribute.</para>
 
- </refdescription>
 
- </doc:template>
 
- <xsl:template name="element-or-list">
 
-   <xsl:param name="elements" select="*"/>
 
-   <xsl:param name="element.count" select="count($elements)"/>
 
-   <xsl:param name="count" select="1"/>
 
-   <xsl:param name="orlist"></xsl:param>
 
-   <xsl:choose>
 
-     <xsl:when test="$count>$element.count">
 
-       <xsl:value-of select="$orlist"/>
 
-     </xsl:when>
 
-     <xsl:otherwise>
 
-       <xsl:call-template name="element-or-list">
 
-         <xsl:with-param name="elements" select="$elements"/>
 
-         <xsl:with-param name="element.count" select="$element.count"/>
 
-         <xsl:with-param name="count" select="$count+1"/>
 
-         <xsl:with-param name="orlist">
 
-           <xsl:value-of select="$orlist"/>
 
-           <xsl:if test="not($orlist='')">|</xsl:if>
 
-           <xsl:value-of select="name($elements[position()=$count])"/>
 
-         </xsl:with-param>
 
-       </xsl:call-template>
 
-     </xsl:otherwise>
 
-   </xsl:choose>
 
- </xsl:template>
 
- <!-- ==================================================================== -->
 
- </xsl:stylesheet>
 
 
  |