Home | History | Annotate | Download | only in lib
      1 <?xml version="1.0"?> <!-- -*- sgml -*- -->
      2 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      3 
      4 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl"/>
      5 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk-common.xsl"/>
      6 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/manifest.xsl"/>
      7 <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk-code.xsl"/>
      8 
      9 
     10 <!-- Note [Dec.1 2005]: the tempate 'chunk-code.xsl' in       -->
     11 <!-- '/usr/share/xml/docbook/stylesheet/nwalsh/1.69.0/html/'  -->
     12 <!-- has been edited to remove 'article' and 'refentry'       -->
     13 <!-- so that separate titlepages don't get generated for them -->
     14 <!-- Note [Dec.1 2005, JRS]: ../1.69.0/.. was changed to      -->
     15 <!-- ../current/.. in docs/Makefile.am, since the latter is a -->
     16 <!-- symlink to the former, at least on SuSE 10.0.            -->
     17 
     18 
     19 <!-- use 8859-1 encoding -->
     20 <xsl:output method="html" encoding="ISO-8859-1" indent="yes"/>
     21 
     22 <!-- set various parameters -->
     23 <xsl:param name="use.id.as.filename" select="'1'"/> 
     24 <xsl:param name="chunker.output.indent" select="'yes'"/>
     25 <!-- set chunking at the chapter level only -->
     26 <xsl:param name="chunk.section.depth" select="'0'"/> 
     27 <!-- set toc-levels -->
     28 <xsl:param name="generate.toc">
     29 set       toc,title
     30 book      toc,title,figure,table,example,equation
     31 chapter   toc,title
     32 section   toc
     33 sect1     toc
     34 sect2     toc
     35 sect3     toc
     36 sect4     nop
     37 sect5     nop
     38 qandaset  toc
     39 qandadiv  toc
     40 appendix  toc,title
     41 article/appendix  nop
     42 article   nop
     43 preface   toc,title
     44 reference toc,title
     45 </xsl:param>
     46 
     47 
     48 <!-- properties common to html + fo ................................... -->
     49 
     50 <!-- we like '1.2 Title' -->
     51 <xsl:param name="section.autolabel" select="'1'"/> 
     52 <xsl:param name="section.label.includes.component.label" select="'1'"/>
     53 
     54 <!-- Do not put 'Chapter' at the start of eg 'Chapter 1. Doing This' -->
     55 <xsl:param name="local.l10n.xml" select="document('')"/> 
     56 <l:i18n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"> 
     57   <l:l10n language="en"> 
     58     <l:context name="title-numbered">
     59       <l:template name="chapter" text="%n.&#160;%t"/>
     60     </l:context> 
     61   </l:l10n>
     62 </l:i18n>
     63 
     64 <!-- per Bob Stayton: turn off xml:base processing pro tem -->
     65 <!-- should hopefully be fixed in next docbook stylesheets release (1.70) -->
     66 <xsl:template match="@fileref">
     67   <xsl:value-of select="."/>
     68 </xsl:template>
     69 
     70 <!-- end properties common to html + fo ............................... -->
     71 
     72 
     73 <!-- center everything at the top of a titlepage -->
     74 <xsl:attribute-set name="set.titlepage.recto.style">
     75   <xsl:attribute name="align">center</xsl:attribute>
     76 </xsl:attribute-set>
     77 
     78 
     79 <!-- don`t put an expanded set-level TOC, only book titles -->
     80 <xsl:template match="book" mode="toc">
     81   <xsl:param name="toc-context" select="."/>
     82   <xsl:choose>
     83     <xsl:when test="local-name($toc-context) = 'set'">
     84       <xsl:call-template name="subtoc">
     85         <xsl:with-param name="toc-context" select="$toc-context"/>
     86         <xsl:with-param name="nodes" select="foo"/>
     87       </xsl:call-template>
     88     </xsl:when>
     89     <xsl:otherwise>
     90       <xsl:call-template name="subtoc">
     91         <xsl:with-param name="toc-context" select="$toc-context"/>
     92         <xsl:with-param name="nodes" select="part|reference
     93                                          |preface|chapter|appendix
     94                                          |article
     95                                          |bibliography|glossary|index
     96                                          |refentry
     97                                          |bridgehead[$bridgehead.in.toc !=
     98 0]"/>
     99       </xsl:call-template>
    100     </xsl:otherwise>
    101   </xsl:choose>
    102 </xsl:template>
    103 
    104 
    105 <!-- custom footer -->
    106 <xsl:template name="footer.navigation">
    107   <xsl:param name="prev" select="/foo"/>
    108   <xsl:param name="next" select="/foo"/>
    109   <xsl:param name="nav.context"/>
    110 
    111   <xsl:variable name="home" select="/*[1]"/>
    112   <xsl:variable name="up" select="parent::*"/>
    113 
    114   <xsl:variable name="row1" select="count($prev) &gt; 0
    115                                     or count($up) &gt; 0
    116                                     or count($next) &gt; 0"/>
    117 
    118   <xsl:variable name="row2" select="($prev != 0)
    119              or (generate-id($home) != generate-id(.) or $nav.context = 'toc')
    120              or ($chunk.tocs.and.lots != 0 and $nav.context != 'toc')
    121              or ($next != 0)"/>
    122   <div>
    123   <xsl:if test="$row1 or $row2">
    124    <br />
    125    <table class="nav" width="100%" cellspacing="3" cellpadding="2" border="0" summary="Navigation footer">
    126     <xsl:if test="$row1">
    127      <tr>
    128       <td rowspan="2" width="40%" align="left">
    129        <xsl:if test="count($prev)>0">
    130         <a accesskey="p">
    131          <xsl:attribute name="href">
    132           <xsl:call-template name="href.target">
    133            <xsl:with-param name="object" select="$prev"/>
    134           </xsl:call-template>
    135          </xsl:attribute>
    136          <xsl:text>&#060;&#060;&#160;</xsl:text>
    137          <xsl:apply-templates select="$prev" mode="object.title.markup"/>
    138         </a>
    139        </xsl:if>
    140        <xsl:text>&#160;</xsl:text>
    141       </td>
    142       <td width="20%" align="center">
    143        <xsl:choose>
    144         <xsl:when test="count($up)>0">
    145          <a accesskey="u">
    146           <xsl:attribute name="href">
    147            <xsl:call-template name="href.target">
    148             <xsl:with-param name="object" select="$up"/>
    149            </xsl:call-template>
    150           </xsl:attribute>
    151           <xsl:call-template name="navig.content">
    152            <xsl:with-param name="direction" select="'up'"/>
    153           </xsl:call-template>
    154          </a>
    155         </xsl:when>
    156         <xsl:otherwise>&#160;</xsl:otherwise>
    157        </xsl:choose>
    158       </td>
    159       <td rowspan="2" width="40%" align="right">
    160        <xsl:text>&#160;</xsl:text>
    161        <xsl:if test="count($next)>0">
    162         <a accesskey="n">
    163          <xsl:attribute name="href">
    164           <xsl:call-template name="href.target">
    165            <xsl:with-param name="object" select="$next"/>
    166           </xsl:call-template>
    167          </xsl:attribute>
    168          <xsl:apply-templates select="$next" mode="object.title.markup"/>
    169          <xsl:text>&#160;&#062;&#062;</xsl:text>
    170         </a>
    171        </xsl:if>
    172       </td>
    173      </tr>
    174     </xsl:if>
    175     <xsl:if test="$row2">
    176      <tr>
    177       <td width="20%" align="center">
    178        <xsl:choose>
    179        <xsl:when test="$home != . or $nav.context = 'toc'">
    180         <a accesskey="h">
    181          <xsl:attribute name="href">
    182           <xsl:call-template name="href.target">
    183            <xsl:with-param name="object" select="$home"/>
    184           </xsl:call-template>
    185          </xsl:attribute>
    186          <xsl:call-template name="navig.content">
    187           <xsl:with-param name="direction" select="'home'"/>
    188          </xsl:call-template>
    189         </a>
    190         <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">
    191          <xsl:text>&#160;|&#160;</xsl:text>
    192         </xsl:if>
    193        </xsl:when>
    194        <xsl:otherwise>&#160;</xsl:otherwise>
    195        </xsl:choose>
    196        <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">
    197         <a accesskey="t">
    198          <xsl:attribute name="href">
    199           <xsl:apply-templates select="/*[1]" mode="recursive-chunk-filename"/>
    200           <xsl:text>-toc</xsl:text>
    201           <xsl:value-of select="$html.ext"/>
    202          </xsl:attribute>
    203          <xsl:call-template name="gentext">
    204           <xsl:with-param name="key" select="'nav-toc'"/>
    205          </xsl:call-template>
    206         </a>
    207        </xsl:if>
    208       </td>
    209      </tr>
    210     </xsl:if>
    211    </table>
    212   </xsl:if>
    213  </div>
    214 </xsl:template>
    215 
    216 
    217 <!-- qandaset styles -->
    218 <!-- these templates have been carefully tweaked to correct the        -->
    219 <!-- horrible mess that docbook makes of dl/dt/dd tags. Edit with care -->
    220 <xsl:template match="qandaset">
    221   <xsl:variable name="title" select="(blockinfo/title|title)[1]"/>
    222   <xsl:variable name="toc">
    223     <xsl:call-template name="dbhtml-attribute">
    224       <xsl:with-param name="pis" select="processing-instruction('dbhtml')"/>
    225       <xsl:with-param name="attribute" select="'toc'"/>
    226     </xsl:call-template>
    227   </xsl:variable>
    228 
    229   <xsl:variable name="toc.params">
    230     <xsl:call-template name="find.path.params">
    231       <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
    232     </xsl:call-template>
    233   </xsl:variable>
    234 
    235   <div class="{name(.)}">
    236     <xsl:apply-templates select="$title"/>
    237     <xsl:if test="(contains($toc.params, 'toc') and $toc != '0') or $toc = '1'">
    238       <xsl:call-template name="process.qanda.toc"/>
    239     </xsl:if>
    240     <xsl:apply-templates select="qandaentry|qandadiv"/>
    241   </div>
    242 </xsl:template>
    243 
    244 
    245 <xsl:template match="qandadiv">
    246   <br/>
    247   <table width="100%" summary="Q and A Div" cellpadding="2" cellspacing="2" border="0">
    248   <xsl:if test="blockinfo/title|title">
    249     <tr class="qandadiv">
    250       <td align="left" valign="top" colspan="2">
    251         <xsl:call-template name="anchor">
    252           <xsl:with-param name="conditional" select="0"/>
    253         </xsl:call-template>
    254         <xsl:apply-templates select="(blockinfo/title|title)[1]"/>
    255       </td>
    256     </tr>
    257   </xsl:if>
    258 
    259   <xsl:variable name="toc">
    260     <xsl:call-template name="dbhtml-attribute">
    261       <xsl:with-param name="pis"
    262                       select="processing-instruction('dbhtml')"/>
    263       <xsl:with-param name="attribute" select="'toc'"/>
    264     </xsl:call-template>
    265   </xsl:variable>
    266 
    267   <xsl:variable name="toc.params">
    268     <xsl:call-template name="find.path.params">
    269       <xsl:with-param name="table" select="normalize-space($generate.toc)"/>
    270     </xsl:call-template>
    271   </xsl:variable>
    272 
    273   <xsl:if test="(contains($toc.params, 'toc') and $toc != '0') or $toc = '1'">
    274     <tr class="toc" colspan="2">
    275       <td align="left" valign="top" colspan="2">
    276         <xsl:call-template name="process.myqanda.toc"/>
    277       </td>
    278     </tr>
    279   </xsl:if>
    280   <xsl:apply-templates select="qandadiv|qandaentry"/>
    281   </table>
    282 </xsl:template>
    283 
    284 
    285 <!-- put questions in bold -->
    286 <xsl:template match="question/para">
    287   <b><xsl:apply-templates/></b>
    288 </xsl:template>
    289 
    290 <xsl:template match="question">
    291   <xsl:variable name="deflabel">
    292     <xsl:choose>
    293       <xsl:when test="ancestor-or-self::*[@defaultlabel]">
    294         <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]
    295                               /@defaultlabel"/>
    296       </xsl:when>
    297       <xsl:otherwise>
    298         <xsl:value-of select="$qanda.defaultlabel"/>
    299       </xsl:otherwise>
    300     </xsl:choose>
    301   </xsl:variable>
    302   <tr><td colspan="2"><xsl:text>&#160;</xsl:text></td></tr>
    303   <tr class="{name(.)}">
    304     <td align="left" valign="top">
    305       <xsl:call-template name="anchor">
    306         <xsl:with-param name="node" select=".."/>
    307         <xsl:with-param name="conditional" select="0"/>
    308       </xsl:call-template>
    309       <xsl:call-template name="anchor">
    310         <xsl:with-param name="conditional" select="0"/>
    311       </xsl:call-template>
    312       <b>
    313         <xsl:apply-templates select="." mode="label.markup"/>
    314         <xsl:if test="$deflabel = 'number' and not(label)">
    315           <xsl:apply-templates select="." mode="intralabel.punctuation"/>
    316 	      </xsl:if>
    317       </b>
    318     </td>
    319     <td align="left" valign="top">
    320       <xsl:choose>
    321         <xsl:when test="$deflabel = 'none' and not(label)">
    322           <b><xsl:apply-templates select="*[name(.) != 'label']"/></b>
    323         </xsl:when>
    324         <xsl:otherwise>
    325           <xsl:apply-templates select="*[name(.) != 'label']"/>
    326         </xsl:otherwise>
    327       </xsl:choose>
    328     </td>
    329   </tr>
    330 </xsl:template>
    331 
    332 
    333 <xsl:template name="process.myqanda.toc">
    334   <xsl:apply-templates select="qandadiv" mode="qandatoc.mode"/>
    335   <xsl:apply-templates select="qandaentry" mode="myqandatoc.mode"/>
    336 </xsl:template>
    337 
    338 
    339 <xsl:template name="process.qanda.toc">
    340   <xsl:apply-templates select="qandadiv" mode="qandatoc.mode"/>
    341   <xsl:apply-templates select="qandaentry" mode="qandatoc.mode"/>
    342 </xsl:template>
    343 
    344 
    345 <xsl:template match="qandadiv" mode="qandatoc.mode">
    346 <dl>
    347   <dt><xsl:apply-templates select="title" mode="qandatoc.mode"/></dt>
    348   <xsl:call-template name="process.qanda.toc"/>
    349 </dl>
    350 </xsl:template>
    351 
    352 
    353 <!-- this one is used at the top of the page -->
    354 <xsl:template match="question" mode="qandatoc.mode">
    355   <xsl:variable name="firstch" select="(*[name(.)!='label'])[1]"/>
    356   <xsl:variable name="deflabel">
    357     <xsl:choose>
    358       <xsl:when test="ancestor-or-self::*[@defaultlabel]">
    359         <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]
    360                               /@defaultlabel"/>
    361       </xsl:when>
    362       <xsl:otherwise>
    363         <xsl:value-of select="$qanda.defaultlabel"/>
    364       </xsl:otherwise>
    365     </xsl:choose>
    366   </xsl:variable>
    367   <dd>
    368     <xsl:apply-templates select="." mode="label.markup"/>
    369     <xsl:if test="$deflabel = 'number' and not(label)">
    370       <xsl:apply-templates select="." mode="intralabel.punctuation"/>
    371     </xsl:if>
    372     <xsl:text> </xsl:text>
    373     <a>
    374       <xsl:attribute name="href">
    375         <xsl:call-template name="href.target">
    376           <xsl:with-param name="object" select=".."/>
    377         </xsl:call-template>
    378       </xsl:attribute>
    379       <xsl:value-of select="$firstch"/>
    380     </a>
    381   </dd>
    382 </xsl:template>
    383 
    384 
    385 <!-- this one is used within table cells -->
    386 <xsl:template match="qandaentry" mode="myqandatoc.mode">
    387   <xsl:apply-templates select="question" mode="myqandatoc.mode"/>
    388 </xsl:template>
    389 
    390 <xsl:template match="question" mode="myqandatoc.mode">
    391   <xsl:variable name="firstch" select="(*[name(.)!='label'])[1]"/>
    392   <xsl:variable name="deflabel">
    393     <xsl:choose>
    394       <xsl:when test="ancestor-or-self::*[@defaultlabel]">
    395         <xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]
    396                               /@defaultlabel"/>
    397       </xsl:when>
    398       <xsl:otherwise>
    399         <xsl:value-of select="$qanda.defaultlabel"/>
    400       </xsl:otherwise>
    401     </xsl:choose>
    402   </xsl:variable>
    403     <xsl:apply-templates select="." mode="label.markup"/>
    404     <xsl:if test="$deflabel = 'number' and not(label)">
    405       <xsl:apply-templates select="." mode="intralabel.punctuation"/>
    406     </xsl:if>
    407     <xsl:text> </xsl:text>
    408     <a>
    409       <xsl:attribute name="href">
    410         <xsl:call-template name="href.target">
    411           <xsl:with-param name="object" select=".."/>
    412         </xsl:call-template>
    413       </xsl:attribute>
    414       <xsl:value-of select="$firstch"/>
    415     </a>
    416   <br />
    417 </xsl:template>
    418 
    419 
    420 </xsl:stylesheet>
    421