| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447 | <?xml version="1.0" encoding="US-ASCII"?><!--This file was created automatically by html2xhtml--><!--from the HTML stylesheets. Do not edit this file.--><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:exsl="http://exslt.org/common" xmlns:cf="http://docbook.sourceforge.net/xmlns/chunkfast/1.0" xmlns:ng="http://docbook.org/docbook-ng" xmlns:db="http://docbook.org/ns/docbook" xmlns="http://www.w3.org/1999/xhtml" version="1.0" exclude-result-prefixes="exsl cf ng db"><!-- ********************************************************************     $Id$     ********************************************************************     This file is part of the XSL DocBook Stylesheet distribution.     See ../README or http://nwalsh.com/docbook/xsl/ for copyright     and other information.     ******************************************************************** --><!-- ==================================================================== --><xsl:param name="onechunk" select="0"/><xsl:param name="refentry.separator" select="0"/><xsl:param name="chunk.fast" select="0"/><xsl:key name="genid" match="*" use="generate-id()"/><!-- ==================================================================== --><xsl:variable name="chunk.hierarchy">  <xsl:if test="$chunk.fast != 0">    <xsl:choose>      <xsl:when test="function-available('exsl:node-set')">        <xsl:message>Computing chunks...</xsl:message>        <xsl:apply-templates select="/*" mode="find.chunks"/>      </xsl:when>      <xsl:otherwise>        <xsl:message>          <xsl:text>Fast chunking requires exsl:node-set(). </xsl:text>          <xsl:text>Using "slow" chunking.</xsl:text>        </xsl:message>      </xsl:otherwise>    </xsl:choose>  </xsl:if></xsl:variable><!-- ==================================================================== --><xsl:template name="process-chunk-element">  <xsl:param name="content">    <xsl:apply-imports/>  </xsl:param>  <xsl:choose>    <xsl:when test="$chunk.fast != 0 and function-available('exsl:node-set')">      <xsl:variable name="chunks" select="exsl:node-set($chunk.hierarchy)//cf:div"/>      <xsl:variable name="genid" select="generate-id()"/>      <xsl:variable name="div" select="$chunks[@id=$genid or @xml:id=$genid]"/>      <xsl:variable name="prevdiv" select="($div/preceding-sibling::cf:div|$div/preceding::cf:div|$div/parent::cf:div)[last()]"/>      <xsl:variable name="prev" select="key('genid', ($prevdiv/@id|$prevdiv/@xml:id)[1])"/>      <xsl:variable name="nextdiv" select="($div/following-sibling::cf:div|$div/following::cf:div|$div/cf:div)[1]"/>      <xsl:variable name="next" select="key('genid', ($nextdiv/@id|$nextdiv/@xml:id)[1])"/>      <xsl:choose>        <xsl:when test="$onechunk != 0 and parent::*">          <xsl:copy-of select="$content"/>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="process-chunk">            <xsl:with-param name="prev" select="$prev"/>            <xsl:with-param name="next" select="$next"/>            <xsl:with-param name="content" select="$content"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:when>    <xsl:otherwise>      <xsl:choose>        <xsl:when test="$onechunk != 0 and not(parent::*)">          <xsl:call-template name="chunk-all-sections">            <xsl:with-param name="content" select="$content"/>          </xsl:call-template>        </xsl:when>        <xsl:when test="$onechunk != 0">          <xsl:copy-of select="$content"/>        </xsl:when>        <xsl:when test="$chunk.first.sections = 0">          <xsl:call-template name="chunk-first-section-with-parent">            <xsl:with-param name="content" select="$content"/>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="chunk-all-sections">            <xsl:with-param name="content" select="$content"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:otherwise>  </xsl:choose></xsl:template><xsl:template name="process-chunk">  <xsl:param name="prev" select="."/>  <xsl:param name="next" select="."/>  <xsl:param name="content">    <xsl:apply-imports/>  </xsl:param>  <xsl:variable name="ischunk">    <xsl:call-template name="chunk"/>  </xsl:variable>  <xsl:variable name="chunkfn">    <xsl:if test="$ischunk='1'">      <xsl:apply-templates mode="chunk-filename" select="."/>    </xsl:if>  </xsl:variable>  <xsl:if test="$ischunk='0'">    <xsl:message>      <xsl:text>Error </xsl:text>      <xsl:value-of select="name(.)"/>      <xsl:text> is not a chunk!</xsl:text>    </xsl:message>  </xsl:if>  <xsl:variable name="filename">    <xsl:call-template name="make-relative-filename">      <xsl:with-param name="base.dir" select="$base.dir"/>      <xsl:with-param name="base.name" select="$chunkfn"/>    </xsl:call-template>  </xsl:variable>  <xsl:call-template name="write.chunk">    <xsl:with-param name="filename" select="$filename"/>    <xsl:with-param name="content">      <xsl:call-template name="chunk-element-content">        <xsl:with-param name="prev" select="$prev"/>        <xsl:with-param name="next" select="$next"/>        <xsl:with-param name="content" select="$content"/>      </xsl:call-template>    </xsl:with-param>    <xsl:with-param name="quiet" select="$chunk.quietly"/>  </xsl:call-template></xsl:template><xsl:template name="chunk-first-section-with-parent">  <xsl:param name="content">    <xsl:apply-imports/>  </xsl:param>  <!-- These xpath expressions are really hairy. The trick is to pick sections -->  <!-- that are not first children and are not the children of first children -->  <!-- Break these variables into pieces to work around       http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6063 -->  <xsl:variable name="prev-v1" select="(ancestor::sect1[$chunk.section.depth > 0                                and preceding-sibling::sect1][1]               |ancestor::sect2[$chunk.section.depth > 1                                and preceding-sibling::sect2                                and parent::sect1[preceding-sibling::sect1]][1]               |ancestor::sect3[$chunk.section.depth > 2                                and preceding-sibling::sect3                                and parent::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |ancestor::sect4[$chunk.section.depth > 3                                and preceding-sibling::sect4                                and parent::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |ancestor::sect5[$chunk.section.depth > 4                                and preceding-sibling::sect5                                and parent::sect4[preceding-sibling::sect4]                                and ancestor::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |ancestor::section[$chunk.section.depth > count(ancestor::section)                                 and not(ancestor::section[not(preceding-sibling::section)])][1])[last()]"/>  <xsl:variable name="prev-v2" select="(preceding::sect1[$chunk.section.depth > 0                                and preceding-sibling::sect1][1]               |preceding::sect2[$chunk.section.depth > 1                                and preceding-sibling::sect2                                and parent::sect1[preceding-sibling::sect1]][1]               |preceding::sect3[$chunk.section.depth > 2                                and preceding-sibling::sect3                                and parent::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |preceding::sect4[$chunk.section.depth > 3                                and preceding-sibling::sect4                                and parent::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |preceding::sect5[$chunk.section.depth > 4                                and preceding-sibling::sect5                                and parent::sect4[preceding-sibling::sect4]                                and ancestor::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |preceding::section[$chunk.section.depth > count(ancestor::section)                                  and preceding-sibling::section                                  and not(ancestor::section[not(preceding-sibling::section)])][1])[last()]"/>  <xsl:variable name="prev" select="(preceding::book[1]              |preceding::preface[1]              |preceding::chapter[1]              |preceding::appendix[1]              |preceding::part[1]              |preceding::reference[1]              |preceding::refentry[1]              |preceding::colophon[1]              |preceding::article[1]              |preceding::bibliography[parent::article or parent::book or parent::part][1]              |preceding::glossary[parent::article or parent::book or parent::part][1]              |preceding::index[$generate.index != 0]                                [parent::article or parent::book or parent::part][1]              |preceding::setindex[$generate.index != 0][1]              |ancestor::set              |ancestor::book[1]              |ancestor::preface[1]              |ancestor::chapter[1]              |ancestor::appendix[1]              |ancestor::part[1]              |ancestor::reference[1]              |ancestor::article[1]              |$prev-v1              |$prev-v2)[last()]"/>  <xsl:variable name="next-v1" select="(following::sect1[$chunk.section.depth > 0                                and preceding-sibling::sect1][1]               |following::sect2[$chunk.section.depth > 1                                and preceding-sibling::sect2                                and parent::sect1[preceding-sibling::sect1]][1]               |following::sect3[$chunk.section.depth > 2                                and preceding-sibling::sect3                                and parent::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |following::sect4[$chunk.section.depth > 3                                and preceding-sibling::sect4                                and parent::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |following::sect5[$chunk.section.depth > 4                                and preceding-sibling::sect5                                and parent::sect4[preceding-sibling::sect4]                                and ancestor::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |following::section[$chunk.section.depth > count(ancestor::section)                                  and preceding-sibling::section                                  and not(ancestor::section[not(preceding-sibling::section)])][1])[1]"/>  <xsl:variable name="next-v2" select="(descendant::sect1[$chunk.section.depth > 0                                and preceding-sibling::sect1][1]               |descendant::sect2[$chunk.section.depth > 1                                and preceding-sibling::sect2                                and parent::sect1[preceding-sibling::sect1]][1]               |descendant::sect3[$chunk.section.depth > 2                                and preceding-sibling::sect3                                and parent::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |descendant::sect4[$chunk.section.depth > 3                                and preceding-sibling::sect4                                and parent::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |descendant::sect5[$chunk.section.depth > 4                                and preceding-sibling::sect5                                and parent::sect4[preceding-sibling::sect4]                                and ancestor::sect3[preceding-sibling::sect3]                                and ancestor::sect2[preceding-sibling::sect2]                                and ancestor::sect1[preceding-sibling::sect1]][1]               |descendant::section[$chunk.section.depth > count(ancestor::section)                                  and preceding-sibling::section                                  and not(ancestor::section[not(preceding-sibling::section)])])[1]"/>  <xsl:variable name="next" select="(following::book[1]              |following::preface[1]              |following::chapter[1]              |following::appendix[1]              |following::part[1]              |following::reference[1]              |following::refentry[1]              |following::colophon[1]              |following::bibliography[parent::article or parent::book or parent::part][1]              |following::glossary[parent::article or parent::book or parent::part][1]              |following::index[$generate.index != 0]                                [parent::article or parent::book or parent::part][1]              |following::article[1]              |following::setindex[$generate.index != 0][1]              |descendant::book[1]              |descendant::preface[1]              |descendant::chapter[1]              |descendant::appendix[1]              |descendant::article[1]              |descendant::bibliography[parent::article or parent::book or parent::part][1]              |descendant::glossary[parent::article or parent::book or parent::part][1]              |descendant::index[$generate.index != 0]                                [parent::article or parent::book or parent::part][1]              |descendant::colophon[1]              |descendant::setindex[$generate.index != 0][1]              |descendant::part[1]              |descendant::reference[1]              |descendant::refentry[1]              |$next-v1              |$next-v2)[1]"/>  <xsl:call-template name="process-chunk">    <xsl:with-param name="prev" select="$prev"/>    <xsl:with-param name="next" select="$next"/>    <xsl:with-param name="content" select="$content"/>  </xsl:call-template></xsl:template><xsl:template name="chunk-all-sections">  <xsl:param name="content">    <xsl:apply-imports/>  </xsl:param>  <xsl:variable name="prev-v1" select="(preceding::sect1[$chunk.section.depth > 0][1]              |preceding::sect2[$chunk.section.depth > 1][1]              |preceding::sect3[$chunk.section.depth > 2][1]              |preceding::sect4[$chunk.section.depth > 3][1]              |preceding::sect5[$chunk.section.depth > 4][1]              |preceding::section[$chunk.section.depth > count(ancestor::section)][1])[last()]"/>  <xsl:variable name="prev-v2" select="(ancestor::sect1[$chunk.section.depth > 0][1]              |ancestor::sect2[$chunk.section.depth > 1][1]              |ancestor::sect3[$chunk.section.depth > 2][1]              |ancestor::sect4[$chunk.section.depth > 3][1]              |ancestor::sect5[$chunk.section.depth > 4][1]              |ancestor::section[$chunk.section.depth > count(ancestor::section)][1])[last()]"/>  <xsl:variable name="prev" select="(preceding::book[1]              |preceding::preface[1]              |preceding::chapter[1]              |preceding::appendix[1]              |preceding::part[1]              |preceding::reference[1]              |preceding::refentry[1]              |preceding::colophon[1]              |preceding::article[1]              |preceding::bibliography[parent::article or parent::book or parent::part][1]              |preceding::glossary[parent::article or parent::book or parent::part][1]              |preceding::index[$generate.index != 0]                                [parent::article or parent::book or parent::part][1]              |preceding::setindex[$generate.index != 0][1]              |ancestor::set              |ancestor::book[1]              |ancestor::preface[1]              |ancestor::chapter[1]              |ancestor::appendix[1]              |ancestor::part[1]              |ancestor::reference[1]              |ancestor::article[1]              |$prev-v1              |$prev-v2)[last()]"/>  <xsl:variable name="next-v1" select="(following::sect1[$chunk.section.depth > 0][1]              |following::sect2[$chunk.section.depth > 1][1]              |following::sect3[$chunk.section.depth > 2][1]              |following::sect4[$chunk.section.depth > 3][1]              |following::sect5[$chunk.section.depth > 4][1]              |following::section[$chunk.section.depth > count(ancestor::section)][1])[1]"/>  <xsl:variable name="next-v2" select="(descendant::sect1[$chunk.section.depth > 0][1]              |descendant::sect2[$chunk.section.depth > 1][1]              |descendant::sect3[$chunk.section.depth > 2][1]              |descendant::sect4[$chunk.section.depth > 3][1]              |descendant::sect5[$chunk.section.depth > 4][1]              |descendant::section[$chunk.section.depth                                    > count(ancestor::section)][1])[1]"/>  <xsl:variable name="next" select="(following::book[1]              |following::preface[1]              |following::chapter[1]              |following::appendix[1]              |following::part[1]              |following::reference[1]              |following::refentry[1]              |following::colophon[1]              |following::bibliography[parent::article or parent::book or parent::part][1]              |following::glossary[parent::article or parent::book or parent::part][1]              |following::index[$generate.index != 0]                                [parent::article or parent::book][1]              |following::article[1]              |following::setindex[$generate.index != 0][1]              |descendant::book[1]              |descendant::preface[1]              |descendant::chapter[1]              |descendant::appendix[1]              |descendant::article[1]              |descendant::bibliography[parent::article or parent::book][1]              |descendant::glossary[parent::article or parent::book or parent::part][1]              |descendant::index[$generate.index != 0]                                [parent::article or parent::book][1]              |descendant::colophon[1]              |descendant::setindex[$generate.index != 0][1]              |descendant::part[1]              |descendant::reference[1]              |descendant::refentry[1]              |$next-v1              |$next-v2)[1]"/>  <xsl:call-template name="process-chunk">    <xsl:with-param name="prev" select="$prev"/>    <xsl:with-param name="next" select="$next"/>    <xsl:with-param name="content" select="$content"/>  </xsl:call-template></xsl:template><!-- ==================================================================== --><!-- ==================================================================== --><xsl:template name="make.lots">  <xsl:param name="toc.params" select="''"/>  <xsl:param name="toc"/>  <xsl:variable name="lots">    <xsl:if test="contains($toc.params, 'toc')">      <xsl:copy-of select="$toc"/>    </xsl:if>    <xsl:if test="contains($toc.params, 'figure')">      <xsl:choose>        <xsl:when test="$chunk.separate.lots != '0'">          <xsl:call-template name="make.lot.chunk">            <xsl:with-param name="type" select="'figure'"/>            <xsl:with-param name="lot">              <xsl:call-template name="list.of.titles">                <xsl:with-param name="titles" select="'figure'"/>                <xsl:with-param name="nodes" select=".//figure"/>              </xsl:call-template>            </xsl:with-param>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="list.of.titles">            <xsl:with-param name="titles" select="'figure'"/>            <xsl:with-param name="nodes" select=".//figure"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:if>    <xsl:if test="contains($toc.params, 'table')">      <xsl:choose>        <xsl:when test="$chunk.separate.lots != '0'">          <xsl:call-template name="make.lot.chunk">            <xsl:with-param name="type" select="'table'"/>            <xsl:with-param name="lot">              <xsl:call-template name="list.of.titles">                <xsl:with-param name="titles" select="'table'"/>                <xsl:with-param name="nodes" select=".//table"/>              </xsl:call-template>            </xsl:with-param>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="list.of.titles">            <xsl:with-param name="titles" select="'table'"/>            <xsl:with-param name="nodes" select=".//table"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:if>    <xsl:if test="contains($toc.params, 'example')">      <xsl:choose>        <xsl:when test="$chunk.separate.lots != '0'">          <xsl:call-template name="make.lot.chunk">            <xsl:with-param name="type" select="'example'"/>            <xsl:with-param name="lot">              <xsl:call-template name="list.of.titles">                <xsl:with-param name="titles" select="'example'"/>                <xsl:with-param name="nodes" select=".//example"/>              </xsl:call-template>            </xsl:with-param>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="list.of.titles">            <xsl:with-param name="titles" select="'example'"/>            <xsl:with-param name="nodes" select=".//example"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:if>    <xsl:if test="contains($toc.params, 'equation')">      <xsl:choose>        <xsl:when test="$chunk.separate.lots != '0'">          <xsl:call-template name="make.lot.chunk">            <xsl:with-param name="type" select="'equation'"/>            <xsl:with-param name="lot">              <xsl:call-template name="list.of.titles">                <xsl:with-param name="titles" select="'equation'"/>                <xsl:with-param name="nodes" select=".//equation"/>              </xsl:call-template>            </xsl:with-param>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="list.of.titles">            <xsl:with-param name="titles" select="'equation'"/>            <xsl:with-param name="nodes" select=".//equation"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:if>    <xsl:if test="contains($toc.params, 'procedure')">      <xsl:choose>        <xsl:when test="$chunk.separate.lots != '0'">          <xsl:call-template name="make.lot.chunk">            <xsl:with-param name="type" select="'procedure'"/>            <xsl:with-param name="lot">              <xsl:call-template name="list.of.titles">                <xsl:with-param name="titles" select="'procedure'"/>                <xsl:with-param name="nodes" select=".//procedure[title]"/>              </xsl:call-template>            </xsl:with-param>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="list.of.titles">            <xsl:with-param name="titles" select="'procedure'"/>            <xsl:with-param name="nodes" select=".//procedure[title]"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:if>  </xsl:variable>  <xsl:if test="string($lots) != ''">    <xsl:choose>      <xsl:when test="$chunk.tocs.and.lots != 0 and not(parent::*)">        <xsl:call-template name="write.chunk">          <xsl:with-param name="filename">            <xsl:call-template name="make-relative-filename">              <xsl:with-param name="base.dir" select="$base.dir"/>              <xsl:with-param name="base.name">                <xsl:call-template name="dbhtml-dir"/>                <xsl:apply-templates select="." mode="recursive-chunk-filename">                  <xsl:with-param name="recursive" select="true()"/>                </xsl:apply-templates>                <xsl:text>-toc</xsl:text>                <xsl:value-of select="$html.ext"/>              </xsl:with-param>            </xsl:call-template>          </xsl:with-param>          <xsl:with-param name="content">            <xsl:call-template name="chunk-element-content">              <xsl:with-param name="prev" select="/foo"/>              <xsl:with-param name="next" select="/foo"/>              <xsl:with-param name="nav.context" select="'toc'"/>              <xsl:with-param name="content">                <xsl:if test="$chunk.tocs.and.lots.has.title != 0">                  <h1>                    <xsl:apply-templates select="." mode="object.title.markup"/>                  </h1>                </xsl:if>                <xsl:copy-of select="$lots"/>              </xsl:with-param>            </xsl:call-template>          </xsl:with-param>          <xsl:with-param name="quiet" select="$chunk.quietly"/>        </xsl:call-template>      </xsl:when>      <xsl:otherwise>        <xsl:copy-of select="$lots"/>      </xsl:otherwise>    </xsl:choose>  </xsl:if></xsl:template><xsl:template name="make.lot.chunk">  <xsl:param name="type" select="''"/>  <xsl:param name="lot"/>  <xsl:if test="string($lot) != ''">    <xsl:variable name="filename">      <xsl:call-template name="make-relative-filename">        <xsl:with-param name="base.dir" select="$base.dir"/>        <xsl:with-param name="base.name">          <xsl:call-template name="dbhtml-dir"/>          <xsl:value-of select="$type"/>          <xsl:text>-toc</xsl:text>          <xsl:value-of select="$html.ext"/>        </xsl:with-param>      </xsl:call-template>    </xsl:variable>    <xsl:variable name="href">      <xsl:call-template name="make-relative-filename">        <xsl:with-param name="base.name">          <xsl:call-template name="dbhtml-dir"/>          <xsl:value-of select="$type"/>          <xsl:text>-toc</xsl:text>          <xsl:value-of select="$html.ext"/>        </xsl:with-param>      </xsl:call-template>    </xsl:variable>    <xsl:call-template name="write.chunk">      <xsl:with-param name="filename" select="$filename"/>      <xsl:with-param name="content">        <xsl:call-template name="chunk-element-content">          <xsl:with-param name="prev" select="/foo"/>          <xsl:with-param name="next" select="/foo"/>          <xsl:with-param name="nav.context" select="'toc'"/>          <xsl:with-param name="content">            <xsl:copy-of select="$lot"/>          </xsl:with-param>        </xsl:call-template>      </xsl:with-param>      <xsl:with-param name="quiet" select="$chunk.quietly"/>    </xsl:call-template>    <!-- And output a link to this file -->    <div>      <xsl:attribute name="class">        <xsl:text>ListofTitles</xsl:text>      </xsl:attribute>      <a href="{$href}">        <xsl:call-template name="gentext">          <xsl:with-param name="key">            <xsl:choose>              <xsl:when test="$type='table'">ListofTables</xsl:when>              <xsl:when test="$type='figure'">ListofFigures</xsl:when>              <xsl:when test="$type='equation'">ListofEquations</xsl:when>              <xsl:when test="$type='example'">ListofExamples</xsl:when>              <xsl:when test="$type='procedure'">ListofProcedures</xsl:when>              <xsl:otherwise>ListofUnknown</xsl:otherwise>            </xsl:choose>          </xsl:with-param>        </xsl:call-template>      </a>    </div>  </xsl:if></xsl:template><!-- ==================================================================== --><xsl:template name="in.other.chunk">  <xsl:param name="chunk" select="."/>  <xsl:param name="node" select="."/>  <xsl:variable name="is.chunk">    <xsl:call-template name="chunk">      <xsl:with-param name="node" select="$node"/>    </xsl:call-template>  </xsl:variable><!--  <xsl:message>    <xsl:text>in.other.chunk: </xsl:text>    <xsl:value-of select="name($chunk)"/>    <xsl:text> </xsl:text>    <xsl:value-of select="name($node)"/>    <xsl:text> </xsl:text>    <xsl:value-of select="$chunk = $node"/>    <xsl:text> </xsl:text>    <xsl:value-of select="$is.chunk"/>  </xsl:message>-->  <xsl:choose>    <xsl:when test="$chunk = $node">0</xsl:when>    <xsl:when test="$is.chunk = 1">1</xsl:when>    <xsl:when test="count($node) = 0">0</xsl:when>    <xsl:otherwise>      <xsl:call-template name="in.other.chunk">        <xsl:with-param name="chunk" select="$chunk"/>        <xsl:with-param name="node" select="$node/parent::*"/>      </xsl:call-template>    </xsl:otherwise>  </xsl:choose></xsl:template><xsl:template name="count.footnotes.in.this.chunk">  <xsl:param name="node" select="."/>  <xsl:param name="footnotes" select="$node//footnote"/>  <xsl:param name="count" select="0"/><!--  <xsl:message>    <xsl:text>count.footnotes.in.this.chunk: </xsl:text>    <xsl:value-of select="name($node)"/>  </xsl:message>-->  <xsl:variable name="in.other.chunk">    <xsl:call-template name="in.other.chunk">      <xsl:with-param name="chunk" select="$node"/>      <xsl:with-param name="node" select="$footnotes[1]"/>    </xsl:call-template>  </xsl:variable>  <xsl:choose>    <xsl:when test="count($footnotes) = 0">      <xsl:value-of select="$count"/>    </xsl:when>    <xsl:otherwise>      <xsl:choose>        <xsl:when test="$in.other.chunk != 0">          <xsl:call-template name="count.footnotes.in.this.chunk">            <xsl:with-param name="node" select="$node"/>            <xsl:with-param name="footnotes" select="$footnotes[position() > 1]"/>            <xsl:with-param name="count" select="$count"/>          </xsl:call-template>        </xsl:when>        <xsl:when test="$footnotes[1]/ancestor::table                         |$footnotes[1]/ancestor::informaltable">          <xsl:call-template name="count.footnotes.in.this.chunk">            <xsl:with-param name="node" select="$node"/>            <xsl:with-param name="footnotes" select="$footnotes[position() > 1]"/>            <xsl:with-param name="count" select="$count"/>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:call-template name="count.footnotes.in.this.chunk">            <xsl:with-param name="node" select="$node"/>            <xsl:with-param name="footnotes" select="$footnotes[position() > 1]"/>            <xsl:with-param name="count" select="$count + 1"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:otherwise>  </xsl:choose></xsl:template><xsl:template name="process.footnotes.in.this.chunk">  <xsl:param name="node" select="."/>  <xsl:param name="footnotes" select="$node//footnote"/><!--  <xsl:message>process.footnotes.in.this.chunk</xsl:message>-->  <xsl:variable name="in.other.chunk">    <xsl:call-template name="in.other.chunk">      <xsl:with-param name="chunk" select="$node"/>      <xsl:with-param name="node" select="$footnotes[1]"/>    </xsl:call-template>  </xsl:variable>  <xsl:choose>    <xsl:when test="count($footnotes) = 0">      <!-- nop -->    </xsl:when>    <xsl:otherwise>      <xsl:choose>        <xsl:when test="$in.other.chunk != 0">          <xsl:call-template name="process.footnotes.in.this.chunk">            <xsl:with-param name="node" select="$node"/>            <xsl:with-param name="footnotes" select="$footnotes[position() > 1]"/>          </xsl:call-template>        </xsl:when>        <xsl:when test="$footnotes[1]/ancestor::table                         |$footnotes[1]/ancestor::informaltable">          <xsl:call-template name="process.footnotes.in.this.chunk">            <xsl:with-param name="node" select="$node"/>            <xsl:with-param name="footnotes" select="$footnotes[position() > 1]"/>          </xsl:call-template>        </xsl:when>        <xsl:otherwise>          <xsl:apply-templates select="$footnotes[1]" mode="process.footnote.mode"/>          <xsl:call-template name="process.footnotes.in.this.chunk">            <xsl:with-param name="node" select="$node"/>            <xsl:with-param name="footnotes" select="$footnotes[position() > 1]"/>          </xsl:call-template>        </xsl:otherwise>      </xsl:choose>    </xsl:otherwise>  </xsl:choose></xsl:template><xsl:template name="process.footnotes">  <xsl:variable name="footnotes" select=".//footnote"/>  <xsl:variable name="fcount">    <xsl:call-template name="count.footnotes.in.this.chunk">      <xsl:with-param name="node" select="."/>      <xsl:with-param name="footnotes" select="$footnotes"/>    </xsl:call-template>  </xsl:variable><!--  <xsl:message>    <xsl:value-of select="name(.)"/>    <xsl:text> fcount: </xsl:text>    <xsl:value-of select="$fcount"/>  </xsl:message>-->  <!-- Only bother to do this if there's at least one non-table footnote -->  <xsl:if test="$fcount > 0">    <div class="footnotes">      <br/>      <hr width="100" align="left"/>      <xsl:call-template name="process.footnotes.in.this.chunk">        <xsl:with-param name="node" select="."/>        <xsl:with-param name="footnotes" select="$footnotes"/>      </xsl:call-template>    </div>  </xsl:if>  <!-- FIXME: When chunking, only the annotations actually used              in this chunk should be referenced. I don't think it              does any harm to reference them all, but it adds              unnecessary bloat to each chunk. -->  <xsl:if test="$annotation.support != 0 and //annotation">    <div class="annotation-list">      <div class="annotation-nocss">        <p>The following annotations are from this essay. You are seeing        them here because your browser doesn’t support the user-interface        techniques used to make them appear as ‘popups’ on modern browsers.</p>      </div>      <xsl:apply-templates select="//annotation" mode="annotation-popup"/>    </div>  </xsl:if></xsl:template><xsl:template name="process.chunk.footnotes">  <xsl:variable name="is.chunk">    <xsl:call-template name="chunk"/>  </xsl:variable>  <xsl:if test="$is.chunk = 1">    <xsl:call-template name="process.footnotes"/>  </xsl:if></xsl:template><!-- ====================================================================== --><xsl:template name="chunk">  <xsl:param name="node" select="."/>  <!-- returns 1 if $node is a chunk -->  <!-- ==================================================================== -->  <!-- What's a chunk?       The root element       appendix       article       bibliography  in article or part or book       book       chapter       colophon       glossary      in article or part or book       index         in article or part or book       part       preface       refentry       reference       sect{1,2,3,4,5}  if position()>1 && depth < chunk.section.depth       section          if position()>1 && depth < chunk.section.depth       set       setindex                                                                            -->  <!-- ==================================================================== --><!--  <xsl:message>    <xsl:text>chunk: </xsl:text>    <xsl:value-of select="name($node)"/>    <xsl:text>(</xsl:text>    <xsl:value-of select="$node/@id"/>    <xsl:text>)</xsl:text>    <xsl:text> csd: </xsl:text>    <xsl:value-of select="$chunk.section.depth"/>    <xsl:text> cfs: </xsl:text>    <xsl:value-of select="$chunk.first.sections"/>    <xsl:text> ps: </xsl:text>    <xsl:value-of select="count($node/parent::section)"/>    <xsl:text> prs: </xsl:text>    <xsl:value-of select="count($node/preceding-sibling::section)"/>  </xsl:message>-->  <xsl:choose>    <xsl:when test="not($node/parent::*)">1</xsl:when>    <xsl:when test="local-name($node) = 'sect1'                     and $chunk.section.depth >= 1                     and ($chunk.first.sections != 0                          or count($node/preceding-sibling::sect1) > 0)">      <xsl:text>1</xsl:text>    </xsl:when>    <xsl:when test="local-name($node) = 'sect2'                     and $chunk.section.depth >= 2                     and ($chunk.first.sections != 0                          or count($node/preceding-sibling::sect2) > 0)">      <xsl:call-template name="chunk">        <xsl:with-param name="node" select="$node/parent::*"/>      </xsl:call-template>    </xsl:when>    <xsl:when test="local-name($node) = 'sect3'                     and $chunk.section.depth >= 3                     and ($chunk.first.sections != 0                          or count($node/preceding-sibling::sect3) > 0)">      <xsl:call-template name="chunk">        <xsl:with-param name="node" select="$node/parent::*"/>      </xsl:call-template>    </xsl:when>    <xsl:when test="local-name($node) = 'sect4'                     and $chunk.section.depth >= 4                     and ($chunk.first.sections != 0                          or count($node/preceding-sibling::sect4) > 0)">      <xsl:call-template name="chunk">        <xsl:with-param name="node" select="$node/parent::*"/>      </xsl:call-template>    </xsl:when>    <xsl:when test="local-name($node) = 'sect5'                     and $chunk.section.depth >= 5                     and ($chunk.first.sections != 0                          or count($node/preceding-sibling::sect5) > 0)">      <xsl:call-template name="chunk">        <xsl:with-param name="node" select="$node/parent::*"/>      </xsl:call-template>    </xsl:when>    <xsl:when test="local-name($node) = 'section'                     and $chunk.section.depth >= count($node/ancestor::section)+1                     and ($chunk.first.sections != 0                          or count($node/preceding-sibling::section) > 0)">      <xsl:call-template name="chunk">        <xsl:with-param name="node" select="$node/parent::*"/>      </xsl:call-template>    </xsl:when>    <xsl:when test="local-name($node)='preface'">1</xsl:when>    <xsl:when test="local-name($node)='chapter'">1</xsl:when>    <xsl:when test="local-name($node)='appendix'">1</xsl:when>    <xsl:when test="local-name($node)='article'">1</xsl:when>    <xsl:when test="local-name($node)='part'">1</xsl:when>    <xsl:when test="local-name($node)='reference'">1</xsl:when>    <xsl:when test="local-name($node)='refentry'">1</xsl:when>    <xsl:when test="local-name($node)='index' and ($generate.index != 0 or count($node/*) > 0)                     and (local-name($node/parent::*) = 'article'                     or local-name($node/parent::*) = 'book'                     or local-name($node/parent::*) = 'part'                     )">1</xsl:when>    <xsl:when test="local-name($node)='bibliography'                     and (local-name($node/parent::*) = 'article'                     or local-name($node/parent::*) = 'book'                     or local-name($node/parent::*) = 'part'                     )">1</xsl:when>    <xsl:when test="local-name($node)='glossary'                     and (local-name($node/parent::*) = 'article'                     or local-name($node/parent::*) = 'book'                     or local-name($node/parent::*) = 'part'                     )">1</xsl:when>    <xsl:when test="local-name($node)='colophon'">1</xsl:when>    <xsl:when test="local-name($node)='book'">1</xsl:when>    <xsl:when test="local-name($node)='set'">1</xsl:when>    <xsl:when test="local-name($node)='setindex'">1</xsl:when>    <xsl:when test="local-name($node)='legalnotice'                     and $generate.legalnotice.link != 0">1</xsl:when>    <xsl:otherwise>0</xsl:otherwise>  </xsl:choose></xsl:template><!-- ==================================================================== --><xsl:template name="href.target.uri">  <xsl:param name="object" select="."/>  <xsl:variable name="ischunk">    <xsl:call-template name="chunk">      <xsl:with-param name="node" select="$object"/>    </xsl:call-template>  </xsl:variable>  <xsl:apply-templates mode="chunk-filename" select="$object"/>  <xsl:if test="$ischunk='0'">    <xsl:text>#</xsl:text>    <xsl:call-template name="object.id">      <xsl:with-param name="object" select="$object"/>    </xsl:call-template>  </xsl:if></xsl:template><xsl:template name="href.target">  <xsl:param name="context" select="."/>  <xsl:param name="object" select="."/>  <xsl:variable name="href.to.uri">    <xsl:call-template name="href.target.uri">      <xsl:with-param name="object" select="$object"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="href.from.uri">    <xsl:call-template name="href.target.uri">      <xsl:with-param name="object" select="$context"/>    </xsl:call-template>  </xsl:variable>    <!--  <xsl:message>href.to.uri: <xsl:value-of select="$href.to.uri"/></xsl:message>  <xsl:message>href.from.uri: <xsl:value-of select="$href.from.uri"/></xsl:message>  -->  <xsl:variable name="href.to">    <xsl:call-template name="trim.common.uri.paths">      <xsl:with-param name="uriA" select="$href.to.uri"/>      <xsl:with-param name="uriB" select="$href.from.uri"/>      <xsl:with-param name="return" select="'A'"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="href.from">    <xsl:call-template name="trim.common.uri.paths">      <xsl:with-param name="uriA" select="$href.to.uri"/>      <xsl:with-param name="uriB" select="$href.from.uri"/>      <xsl:with-param name="return" select="'B'"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="depth">    <xsl:call-template name="count.uri.path.depth">      <xsl:with-param name="filename" select="$href.from"/>    </xsl:call-template>  </xsl:variable>  <xsl:variable name="href">    <xsl:call-template name="copy-string">      <xsl:with-param name="string" select="'../'"/>      <xsl:with-param name="count" select="$depth"/>    </xsl:call-template>    <xsl:value-of select="$href.to"/>  </xsl:variable>  <!--  <xsl:message>    <xsl:text>In </xsl:text>    <xsl:value-of select="name(.)"/>    <xsl:text> (</xsl:text>    <xsl:value-of select="$href.from"/>    <xsl:text>,</xsl:text>    <xsl:value-of select="$depth"/>    <xsl:text>) </xsl:text>    <xsl:value-of select="name($object)"/>    <xsl:text> href=</xsl:text>    <xsl:value-of select="$href"/>  </xsl:message>  -->  <xsl:value-of select="$href"/></xsl:template><!-- Returns the complete olink href value if found --><!-- Must take into account any dbhtml dir of the chunk containing the olink --><xsl:template name="make.olink.href">  <xsl:param name="olink.key" select="''"/>  <xsl:param name="target.database"/>  <xsl:if test="$olink.key != ''">    <xsl:variable name="target.href">      <xsl:for-each select="$target.database">        <xsl:value-of select="key('targetptr-key', $olink.key)/@href"/>      </xsl:for-each>    </xsl:variable>      <!-- an olink starting point may be in a subdirectory, so need         the "from" reference point to compute a relative path -->    <xsl:variable name="from.href">      <xsl:call-template name="olink.from.uri">        <xsl:with-param name="target.database" select="$target.database"/>        <xsl:with-param name="object" select="."/>        <xsl:with-param name="object.targetdoc" select="$current.docid"/>      </xsl:call-template>    </xsl:variable>    <!-- If the from.href has directory path, then must "../" upward         to document level -->    <xsl:variable name="upward.from.path">      <xsl:call-template name="upward.path">        <xsl:with-param name="path" select="$from.href"/>      </xsl:call-template>    </xsl:variable>    <xsl:variable name="targetdoc">      <xsl:value-of select="substring-before($olink.key, '/')"/>    </xsl:variable>      <!-- Does the target database use a sitemap? -->    <xsl:variable name="use.sitemap">      <xsl:choose>        <xsl:when test="$target.database//sitemap">1</xsl:when>        <xsl:otherwise>0</xsl:otherwise>      </xsl:choose>    </xsl:variable>        <!-- Get the baseuri for this targetptr -->    <xsl:variable name="baseuri">      <xsl:choose>        <!-- Does the database use a sitemap? -->        <xsl:when test="$use.sitemap != 0">          <xsl:choose>            <!-- Was current.docid parameter set? -->            <xsl:when test="$current.docid != ''">              <!-- Was it found in the database? -->              <xsl:variable name="currentdoc.key">                <xsl:for-each select="$target.database">                  <xsl:value-of select="key('targetdoc-key',                                         $current.docid)/@targetdoc"/>                </xsl:for-each>              </xsl:variable>              <xsl:choose>                <xsl:when test="$currentdoc.key != ''">                  <xsl:for-each select="$target.database">                    <xsl:call-template name="targetpath">                      <xsl:with-param name="dirnode" select="key('targetdoc-key', $current.docid)/parent::dir"/>                      <xsl:with-param name="targetdoc" select="$targetdoc"/>                    </xsl:call-template>                  </xsl:for-each>                </xsl:when>                <xsl:otherwise>                  <xsl:message>                    <xsl:text>Olink error: cannot compute relative </xsl:text>                    <xsl:text>sitemap path because $current.docid '</xsl:text>                    <xsl:value-of select="$current.docid"/>                    <xsl:text>' not found in target database.</xsl:text>                  </xsl:message>                </xsl:otherwise>              </xsl:choose>            </xsl:when>            <xsl:otherwise>              <xsl:message>                <xsl:text>Olink warning: cannot compute relative </xsl:text>                <xsl:text>sitemap path without $current.docid parameter</xsl:text>              </xsl:message>            </xsl:otherwise>          </xsl:choose>           <!-- In either case, add baseuri from its document entry-->          <xsl:variable name="docbaseuri">            <xsl:for-each select="$target.database">              <xsl:value-of select="key('targetdoc-key', $targetdoc)/@baseuri"/>            </xsl:for-each>          </xsl:variable>          <xsl:if test="$docbaseuri != ''">            <xsl:value-of select="$docbaseuri"/>          </xsl:if>        </xsl:when>        <!-- No database sitemap in use -->        <xsl:otherwise>          <!-- Just use any baseuri from its document entry -->          <xsl:variable name="docbaseuri">            <xsl:for-each select="$target.database">              <xsl:value-of select="key('targetdoc-key', $targetdoc)/@baseuri"/>            </xsl:for-each>          </xsl:variable>          <xsl:if test="$docbaseuri != ''">            <xsl:value-of select="$docbaseuri"/>          </xsl:if>        </xsl:otherwise>      </xsl:choose>    </xsl:variable>      <!-- Form the href information -->    <xsl:if test="not(contains($baseuri, ':'))">      <!-- if not an absolute uri, add upward path from olink chunk -->      <xsl:value-of select="$upward.from.path"/>    </xsl:if>    <xsl:if test="$baseuri != ''">      <xsl:value-of select="$baseuri"/>      <xsl:if test="substring($target.href,1,1) != '#'">        <!--xsl:text>/</xsl:text-->      </xsl:if>    </xsl:if>    <!-- optionally turn off frag for PDF references -->    <xsl:if test="not($insert.olink.pdf.frag = 0 and           translate(substring($baseuri, string-length($baseuri) - 3),                     'PDF', 'pdf') = '.pdf'           and starts-with($target.href, '#') )">      <xsl:value-of select="$target.href"/>    </xsl:if>  </xsl:if></xsl:template><!-- Computes "../" to reach top --><xsl:template name="upward.path">  <xsl:param name="path" select="''"/>  <xsl:choose>     <!-- Don't bother with absolute uris -->    <xsl:when test="contains($path, ':')"/>    <xsl:when test="starts-with($path, '/')"/>    <xsl:when test="contains($path, '/')">      <xsl:text>../</xsl:text>      <xsl:call-template name="upward.path">        <xsl:with-param name="path" select="substring-after($path, '/')"/>      </xsl:call-template>    </xsl:when>  </xsl:choose></xsl:template><!-- ==================================================================== --><xsl:template name="html.head">  <xsl:param name="prev" select="/foo"/>  <xsl:param name="next" select="/foo"/>  <xsl:variable name="this" select="."/>  <xsl:variable name="home" select="/*[1]"/>  <xsl:variable name="up" select="parent::*"/>  <head>    <xsl:call-template name="system.head.content"/>    <xsl:call-template name="head.content"/>    <xsl:if test="$home">      <link rel="start">        <xsl:attribute name="href">          <xsl:call-template name="href.target">            <xsl:with-param name="object" select="$home"/>          </xsl:call-template>        </xsl:attribute>        <xsl:attribute name="title">          <xsl:apply-templates select="$home" mode="object.title.markup.textonly"/>        </xsl:attribute>      </link>    </xsl:if>    <xsl:if test="$up">      <link rel="up">        <xsl:attribute name="href">          <xsl:call-template name="href.target">            <xsl:with-param name="object" select="$up"/>          </xsl:call-template>        </xsl:attribute>        <xsl:attribute name="title">          <xsl:apply-templates select="$up" mode="object.title.markup.textonly"/>        </xsl:attribute>      </link>    </xsl:if>    <xsl:if test="$prev">      <link rel="prev">        <xsl:attribute name="href">          <xsl:call-template name="href.target">            <xsl:with-param name="object" select="$prev"/>          </xsl:call-template>        </xsl:attribute>        <xsl:attribute name="title">          <xsl:apply-templates select="$prev" mode="object.title.markup.textonly"/>        </xsl:attribute>      </link>    </xsl:if>    <xsl:if test="$next">      <link rel="next">        <xsl:attribute name="href">          <xsl:call-template name="href.target">            <xsl:with-param name="object" select="$next"/>          </xsl:call-template>        </xsl:attribute>        <xsl:attribute name="title">          <xsl:apply-templates select="$next" mode="object.title.markup.textonly"/>        </xsl:attribute>      </link>    </xsl:if>    <xsl:if test="$html.extra.head.links != 0">      <xsl:for-each select="//part                             |//reference                             |//preface                             |//chapter                             |//article                             |//refentry                             |//appendix[not(parent::article)]|appendix                             |//glossary[not(parent::article)]|glossary                             |//index[not(parent::article)]|index">        <link rel="{local-name(.)}">          <xsl:attribute name="href">            <xsl:call-template name="href.target">              <xsl:with-param name="context" select="$this"/>              <xsl:with-param name="object" select="."/>            </xsl:call-template>          </xsl:attribute>          <xsl:attribute name="title">            <xsl:apply-templates select="." mode="object.title.markup.textonly"/>          </xsl:attribute>        </link>      </xsl:for-each>      <xsl:for-each select="section|sect1|refsection|refsect1">        <link>          <xsl:attribute name="rel">            <xsl:choose>              <xsl:when test="local-name($this) = 'section'                               or local-name($this) = 'refsection'">                <xsl:value-of select="'subsection'"/>              </xsl:when>              <xsl:otherwise>                <xsl:value-of select="'section'"/>              </xsl:otherwise>            </xsl:choose>          </xsl:attribute>          <xsl:attribute name="href">            <xsl:call-template name="href.target">              <xsl:with-param name="context" select="$this"/>              <xsl:with-param name="object" select="."/>            </xsl:call-template>          </xsl:attribute>          <xsl:attribute name="title">            <xsl:apply-templates select="." mode="object.title.markup.textonly"/>          </xsl:attribute>        </link>      </xsl:for-each>      <xsl:for-each select="sect2|sect3|sect4|sect5|refsect2|refsect3">        <link rel="subsection">          <xsl:attribute name="href">            <xsl:call-template name="href.target">              <xsl:with-param name="context" select="$this"/>              <xsl:with-param name="object" select="."/>            </xsl:call-template>          </xsl:attribute>          <xsl:attribute name="title">            <xsl:apply-templates select="." mode="object.title.markup.textonly"/>          </xsl:attribute>        </link>      </xsl:for-each>    </xsl:if>    <!-- * if we have a legalnotice and user wants it output as a -->    <!-- * separate page and $html.head.legalnotice.link.types is -->    <!-- * non-empty, we generate a link or links for each value in -->    <!-- * $html.head.legalnotice.link.types -->    <xsl:if test="//legalnotice                   and not($generate.legalnotice.link = 0)                   and not($html.head.legalnotice.link.types = '')">      <xsl:call-template name="make.legalnotice.head.links"/>    </xsl:if>    <xsl:call-template name="user.head.content"/>  </head></xsl:template><!-- ==================================================================== --><xsl:template name="header.navigation">  <xsl:param name="prev" select="/foo"/>  <xsl:param name="next" select="/foo"/>  <xsl:param name="nav.context"/>  <xsl:variable name="home" select="/*[1]"/>  <xsl:variable name="up" select="parent::*"/>  <xsl:variable name="row1" select="$navig.showtitles != 0"/>  <xsl:variable name="row2" select="count($prev) > 0                                     or (count($up) > 0                                          and generate-id($up) != generate-id($home)                                         and $navig.showtitles != 0)                                     or count($next) > 0"/>  <xsl:if test="$suppress.navigation = '0' and $suppress.header.navigation = '0'">    <div class="navheader">      <xsl:if test="$row1 or $row2">        <table width="100%" summary="Navigation header">          <xsl:if test="$row1">            <tr>              <th colspan="3" align="center">                <xsl:apply-templates select="." mode="object.title.markup"/>              </th>            </tr>          </xsl:if>          <xsl:if test="$row2">            <tr>              <td width="20%" align="left">                <xsl:if test="count($prev)>0">                  <a accesskey="p">                    <xsl:attribute name="href">                      <xsl:call-template name="href.target">                        <xsl:with-param name="object" select="$prev"/>                      </xsl:call-template>                    </xsl:attribute>                    <xsl:call-template name="navig.content">                      <xsl:with-param name="direction" select="'prev'"/>                    </xsl:call-template>                  </a>                </xsl:if>                <xsl:text> </xsl:text>              </td>              <th width="60%" align="center">                <xsl:choose>                  <xsl:when test="count($up) > 0                                   and generate-id($up) != generate-id($home)                                   and $navig.showtitles != 0">                    <xsl:apply-templates select="$up" mode="object.title.markup"/>                  </xsl:when>                  <xsl:otherwise> </xsl:otherwise>                </xsl:choose>              </th>              <td width="20%" align="right">                <xsl:text> </xsl:text>                <xsl:if test="count($next)>0">                  <a accesskey="n">                    <xsl:attribute name="href">                      <xsl:call-template name="href.target">                        <xsl:with-param name="object" select="$next"/>                      </xsl:call-template>                    </xsl:attribute>                    <xsl:call-template name="navig.content">                      <xsl:with-param name="direction" select="'next'"/>                    </xsl:call-template>                  </a>                </xsl:if>              </td>            </tr>          </xsl:if>        </table>      </xsl:if>      <xsl:if test="$header.rule != 0">        <hr/>      </xsl:if>    </div>  </xsl:if></xsl:template><!-- ==================================================================== --><xsl:template name="footer.navigation">  <xsl:param name="prev" select="/foo"/>  <xsl:param name="next" select="/foo"/>  <xsl:param name="nav.context"/>  <xsl:variable name="home" select="/*[1]"/>  <xsl:variable name="up" select="parent::*"/>  <xsl:variable name="row1" select="count($prev) > 0                                     or count($up) > 0                                     or count($next) > 0"/>  <xsl:variable name="row2" select="($prev and $navig.showtitles != 0)                                     or (generate-id($home) != generate-id(.)                                         or $nav.context = 'toc')                                     or ($chunk.tocs.and.lots != 0                                         and $nav.context != 'toc')                                     or ($next and $navig.showtitles != 0)"/>  <xsl:if test="$suppress.navigation = '0' and $suppress.footer.navigation = '0'">    <div class="navfooter">      <xsl:if test="$footer.rule != 0">        <hr/>      </xsl:if>      <xsl:if test="$row1 or $row2">        <table width="100%" summary="Navigation footer">          <xsl:if test="$row1">            <tr>              <td width="40%" align="left">                <xsl:if test="count($prev)>0">                  <a accesskey="p">                    <xsl:attribute name="href">                      <xsl:call-template name="href.target">                        <xsl:with-param name="object" select="$prev"/>                      </xsl:call-template>                    </xsl:attribute>                    <xsl:call-template name="navig.content">                      <xsl:with-param name="direction" select="'prev'"/>                    </xsl:call-template>                  </a>                </xsl:if>                <xsl:text> </xsl:text>              </td>              <td width="20%" align="center">                <xsl:choose>                  <xsl:when test="count($up)>0                                   and generate-id($up) != generate-id($home)">                    <a accesskey="u">                      <xsl:attribute name="href">                        <xsl:call-template name="href.target">                          <xsl:with-param name="object" select="$up"/>                        </xsl:call-template>                      </xsl:attribute>                      <xsl:call-template name="navig.content">                        <xsl:with-param name="direction" select="'up'"/>                      </xsl:call-template>                    </a>                  </xsl:when>                  <xsl:otherwise> </xsl:otherwise>                </xsl:choose>              </td>              <td width="40%" align="right">                <xsl:text> </xsl:text>                <xsl:if test="count($next)>0">                  <a accesskey="n">                    <xsl:attribute name="href">                      <xsl:call-template name="href.target">                        <xsl:with-param name="object" select="$next"/>                      </xsl:call-template>                    </xsl:attribute>                    <xsl:call-template name="navig.content">                      <xsl:with-param name="direction" select="'next'"/>                    </xsl:call-template>                  </a>                </xsl:if>              </td>            </tr>          </xsl:if>          <xsl:if test="$row2">            <tr>              <td width="40%" align="left" valign="top">                <xsl:if test="$navig.showtitles != 0">                  <xsl:apply-templates select="$prev" mode="object.title.markup"/>                </xsl:if>                <xsl:text> </xsl:text>              </td>              <td width="20%" align="center">                <xsl:choose>                  <xsl:when test="$home != . or $nav.context = 'toc'">                    <a accesskey="h">                      <xsl:attribute name="href">                        <xsl:call-template name="href.target">                          <xsl:with-param name="object" select="$home"/>                        </xsl:call-template>                      </xsl:attribute>                      <xsl:call-template name="navig.content">                        <xsl:with-param name="direction" select="'home'"/>                      </xsl:call-template>                    </a>                    <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">                      <xsl:text> | </xsl:text>                    </xsl:if>                  </xsl:when>                  <xsl:otherwise> </xsl:otherwise>                </xsl:choose>                <xsl:if test="$chunk.tocs.and.lots != 0 and $nav.context != 'toc'">                  <a accesskey="t">                    <xsl:attribute name="href">                      <xsl:apply-templates select="/*[1]" mode="recursive-chunk-filename">                        <xsl:with-param name="recursive" select="true()"/>                      </xsl:apply-templates>                      <xsl:text>-toc</xsl:text>                      <xsl:value-of select="$html.ext"/>                    </xsl:attribute>                    <xsl:call-template name="gentext">                      <xsl:with-param name="key" select="'nav-toc'"/>                    </xsl:call-template>                  </a>                </xsl:if>              </td>              <td width="40%" align="right" valign="top">                <xsl:text> </xsl:text>                <xsl:if test="$navig.showtitles != 0">                  <xsl:apply-templates select="$next" mode="object.title.markup"/>                </xsl:if>              </td>            </tr>          </xsl:if>        </table>      </xsl:if>    </div>  </xsl:if></xsl:template><!-- ==================================================================== --><xsl:template name="navig.content">    <xsl:param name="direction" select="next"/>    <xsl:variable name="navtext">        <xsl:choose>            <xsl:when test="$direction = 'prev'">                <xsl:call-template name="gentext.nav.prev"/>            </xsl:when>            <xsl:when test="$direction = 'next'">                <xsl:call-template name="gentext.nav.next"/>            </xsl:when>            <xsl:when test="$direction = 'up'">                <xsl:call-template name="gentext.nav.up"/>            </xsl:when>            <xsl:when test="$direction = 'home'">                <xsl:call-template name="gentext.nav.home"/>            </xsl:when>            <xsl:otherwise>                <xsl:text>xxx</xsl:text>            </xsl:otherwise>        </xsl:choose>    </xsl:variable>    <xsl:choose>        <xsl:when test="$navig.graphics != 0">            <img>                <xsl:attribute name="src">                    <xsl:value-of select="$navig.graphics.path"/>                    <xsl:value-of select="$direction"/>                    <xsl:value-of select="$navig.graphics.extension"/>                </xsl:attribute>                <xsl:attribute name="alt">                    <xsl:value-of select="$navtext"/>                </xsl:attribute>            </img>        </xsl:when>        <xsl:otherwise>            <xsl:value-of select="$navtext"/>        </xsl:otherwise>    </xsl:choose></xsl:template><!-- ==================================================================== --><!-- * The following template assumes that the first legalnotice --><!-- * instance found in a document applies to the contents of the --><!-- * entire document. It generates an HTML link in each chunk, back --><!-- * to the file containing the contents of the first legalnotice. --><!-- * --><!-- * Actually, it may generate multiple link instances in each chunk, --><!-- * because it walks through the space-separated list of link --><!-- * types specified in the $html.head.legalnotice.link.types param, --><!-- * popping off link types and generating links for them until it --><!-- * depletes the list. -->  <xsl:template name="make.legalnotice.head.links">  <!-- * the following ID is used as part of the legalnotice filename; -->  <!-- * we need it in order to construct the filename for use in the -->  <!-- * value of the href attribute on the link -->  <xsl:param name="id">    <xsl:call-template name="object.id">      <xsl:with-param name="object" select="(//legalnotice)[1]"/>    </xsl:call-template>  </xsl:param>  <xsl:param name="linktype">    <xsl:choose>      <xsl:when test="contains($html.head.legalnotice.link.types, ' ')">        <xsl:value-of select="normalize-space(                     substring-before($html.head.legalnotice.link.types, ' '))"/>      </xsl:when>      <xsl:otherwise>        <xsl:value-of select="$html.head.legalnotice.link.types"/>      </xsl:otherwise>    </xsl:choose>  </xsl:param>  <xsl:param name="remaining.linktypes" select="concat(               normalize-space(               substring-after($html.head.legalnotice.link.types, ' ')),' ')"/>  <xsl:if test="not($linktype = '')">    <link rel="{$linktype}">      <xsl:attribute name="href">        <xsl:value-of select="concat('ln-',$id,$html.ext)"/>      </xsl:attribute>      <xsl:attribute name="title">        <xsl:apply-templates select="(//legalnotice)[1]" mode="object.title.markup.textonly"/>      </xsl:attribute>    </link>    <xsl:call-template name="make.legalnotice.head.links">      <!-- * pop the next value off the list of link types -->      <xsl:with-param name="linktype" select="substring-before($remaining.linktypes, ' ')"/>      <!-- * remove the link type from the list of remaining link types -->      <xsl:with-param name="remaining.linktypes" select="substring-after($remaining.linktypes, ' ')"/>    </xsl:call-template>  </xsl:if></xsl:template><!-- ==================================================================== --><xsl:template name="chunk-element-content">  <xsl:param name="prev"/>  <xsl:param name="next"/>  <xsl:param name="nav.context"/>  <xsl:param name="content">    <xsl:apply-imports/>  </xsl:param>  <xsl:call-template name="user.preroot"/>  <html>    <xsl:call-template name="html.head">      <xsl:with-param name="prev" select="$prev"/>      <xsl:with-param name="next" select="$next"/>    </xsl:call-template>    <body>      <xsl:call-template name="body.attributes"/>      <xsl:call-template name="user.header.navigation"/>      <xsl:call-template name="header.navigation">        <xsl:with-param name="prev" select="$prev"/>        <xsl:with-param name="next" select="$next"/>        <xsl:with-param name="nav.context" select="$nav.context"/>      </xsl:call-template>      <xsl:call-template name="user.header.content"/>      <xsl:copy-of select="$content"/>      <xsl:call-template name="user.footer.content"/>      <xsl:call-template name="footer.navigation">        <xsl:with-param name="prev" select="$prev"/>        <xsl:with-param name="next" select="$next"/>        <xsl:with-param name="nav.context" select="$nav.context"/>      </xsl:call-template>      <xsl:call-template name="user.footer.navigation"/>    </body>  </html>  <xsl:value-of select="$chunk.append"/></xsl:template><!-- ==================================================================== --><xsl:template name="generate.manifest">  <xsl:param name="node" select="/"/>  <xsl:call-template name="write.text.chunk">    <xsl:with-param name="filename">      <xsl:if test="$manifest.in.base.dir != 0">        <xsl:value-of select="$base.dir"/>      </xsl:if>      <xsl:value-of select="$manifest"/>    </xsl:with-param>    <xsl:with-param name="method" select="'text'"/>    <xsl:with-param name="content">      <xsl:apply-templates select="$node" mode="enumerate-files"/>    </xsl:with-param>    <xsl:with-param name="encoding" select="$chunker.output.encoding"/>  </xsl:call-template></xsl:template></xsl:stylesheet>
 |