home *** CD-ROM | disk | FTP | other *** search
/ Internet Magazine 2003 October / INTERNET108.ISO / pc / software / windows / building / xmlspy / xmlspyentcomplete5.exe / Data1.cab / _62D61EE55ABB4A02BE2E2FB87D67453F < prev    next >
Encoding:
Extensible Markup Language  |  2002-10-21  |  25.6 KB  |  806 lines

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 
  3. TEI XSLT stylesheet family version 1.2
  4. RCS: $Date: 2002/10/21 13:44:28 $, $Revision: 1.1.2.1 $, $Author: jdj $
  5.  
  6. XSL stylesheet to format TEI XML documents to HTML or XSL FO
  7.  
  8.  Copyright 1999-2002 Sebastian Rahtz/Oxford University  <sebastian.rahtz@oucs.ox.ac.uk>
  9.  
  10.  Permission is hereby granted, free of charge, to any person obtaining
  11.  a copy of this software and any associated documentation gfiles (the
  12.  ``Software''), to deal in the Software without restriction, including
  13.  without limitation the rights to use, copy, modify, merge, publish,
  14.  distribute, sublicense, and/or sell copies of the Software, and to
  15.  permit persons to whom the Software is furnished to do so, subject to
  16.  the following conditions:
  17.  
  18.  The above copyright notice and this permission notice shall be included
  19.  in all copies or substantial portions of the Software.
  20. --> 
  21. <xsl:stylesheet
  22.   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  23.  
  24. <!-- ************************************************* -->
  25.  
  26. <!-- basic handles for divisions -->
  27. <xsl:variable name="linkPrefix"/>
  28.  
  29. <xsl:template match="front/div|front/div0|front/div1|front/div2|front/div3|front/div4|front/front/div5|front/div6"> 
  30.     <xsl:variable name="depth">
  31.      <xsl:apply-templates select="." mode="depth"/>
  32.     </xsl:variable>
  33.  <xsl:choose>
  34.  <xsl:when test ="not($depth > $splitLevel) and $splitFrontmatter">
  35.   <xsl:if test="not($STDOUT='true')">
  36.   <xsl:call-template name="outputChunk">
  37.    <xsl:with-param name="ident">
  38.     <xsl:apply-templates select="." mode="ident"/>
  39.    </xsl:with-param>
  40.    <xsl:with-param name="content">
  41.     <xsl:call-template name="writeDiv"/>
  42.    </xsl:with-param>
  43.    </xsl:call-template>
  44.   </xsl:if>
  45.   </xsl:when>
  46.   <xsl:otherwise>
  47.    <div class="teidiv">
  48.     <xsl:call-template name="doDivBody">
  49.       <xsl:with-param name="Type" select="$depth"/>
  50.     </xsl:call-template>
  51.    </div>
  52.   </xsl:otherwise>
  53.  </xsl:choose>
  54. </xsl:template>
  55.  
  56. <xsl:template match="back/div|back/div0|back/div1|back/div2|back/div3|back/div4|back/div5|back/div6"> 
  57.   <xsl:variable name="depth">
  58.      <xsl:apply-templates select="." mode="depth"/>
  59.   </xsl:variable>
  60.  <xsl:choose>
  61.  <xsl:when test="not($depth > $splitLevel) and $splitBackmatter">
  62.   <xsl:if test="not($STDOUT='true')">
  63.   <xsl:call-template name="outputChunk">
  64.   <xsl:with-param name="ident">
  65.    <xsl:apply-templates select="." mode="ident"/>
  66.   </xsl:with-param>
  67.   <xsl:with-param name="content">
  68.     <xsl:call-template name="writeDiv"/>
  69.   </xsl:with-param>
  70.   </xsl:call-template>
  71.   </xsl:if>
  72.   </xsl:when>
  73.   <xsl:otherwise>
  74.    <div class="teidiv">
  75.     <xsl:call-template name="doDivBody">
  76.       <xsl:with-param name="Type" select="$depth"/>
  77.     </xsl:call-template>
  78.    </div>
  79.   </xsl:otherwise>
  80.  </xsl:choose>
  81. </xsl:template>
  82.  
  83. <xsl:template match="div|div0|div1|div2|div3|div4|div5|div6"> 
  84. <!-- establish section depth -->
  85.   <xsl:variable name="depth">
  86.    <xsl:apply-templates select="." mode="depth"/>
  87.  </xsl:variable>
  88. <!-- depending on depth and splitting level, 
  89.      we may do one of two things: -->
  90.  <xsl:choose>
  91.  
  92. <!-- 1. our section depth is below the splitting level -->
  93.  <xsl:when test="$depth > $splitLevel">
  94.    <div  class="teidiv">
  95.    <xsl:call-template name="doDivBody">
  96.       <xsl:with-param name="Type" select="$depth"/>
  97.    </xsl:call-template>
  98.   <xsl:if test="$sectionUpLink and $depth='0'">
  99.    <xsl:call-template name="topLink"/>
  100.   </xsl:if>
  101.   </div>
  102.  </xsl:when>
  103.  
  104. <!-- 2. we are at or above splitting level, 
  105.         so start a new file
  106. -->
  107.  <xsl:when test="$depth <= $splitLevel">
  108.   <xsl:if test="not($STDOUT='true')">
  109.   <xsl:call-template name="outputChunk">
  110.   <xsl:with-param name="ident">
  111.    <xsl:apply-templates select="." mode="ident"/>
  112.   </xsl:with-param>
  113.   <xsl:with-param name="content">
  114.     <xsl:call-template name="writeDiv"/>
  115.   </xsl:with-param>
  116.   </xsl:call-template>
  117.  </xsl:if>
  118.  </xsl:when>
  119.  </xsl:choose>
  120. </xsl:template>
  121.  
  122. <!-- table of contents -->
  123. <xsl:template match="divGen[@type='toc']">
  124.      <h2><xsl:value-of select="$tocWords"/></h2>
  125.       <xsl:call-template name="maintoc"/>
  126. </xsl:template>
  127.  
  128. <!-- anything with a <head> can go in the TOC -->
  129.  
  130. <xsl:template match="*" mode="maketoc">
  131.  <xsl:param name="forcedepth"/>
  132. <xsl:if test="head">
  133.  <xsl:variable name="Depth">
  134.  <xsl:choose>
  135.   <xsl:when test="not($forcedepth='')">
  136.      <xsl:value-of select="$forcedepth"/>
  137.   </xsl:when>
  138.   <xsl:otherwise>
  139.      <xsl:value-of select="$tocDepth"/>
  140.   </xsl:otherwise>
  141.  </xsl:choose>
  142.  </xsl:variable>
  143.  <xsl:variable name="thislevel">
  144.   <xsl:choose>
  145.   <xsl:when test="name(.) = 'div'">
  146.     <xsl:value-of select="count(ancestor::div)"/>
  147.   </xsl:when>
  148.   <xsl:when test="starts-with(name(.),'div')">
  149.    <xsl:choose>
  150.     <xsl:when test="ancestor-or-self::div0">
  151.       <xsl:value-of select="substring-after(name(.),'div')"/>
  152.     </xsl:when>
  153.     <xsl:otherwise>
  154.       <xsl:value-of select="substring-after(name(.),'div') - 1"/>
  155.     </xsl:otherwise>
  156.    </xsl:choose>
  157.  </xsl:when>
  158.  <xsl:otherwise>99</xsl:otherwise>
  159.  </xsl:choose>
  160.  </xsl:variable>
  161.  <xsl:variable name="pointer">
  162.       <xsl:apply-templates mode="xrefheader" select="."/>
  163.  </xsl:variable>
  164.  <li class="toc">
  165.        <xsl:call-template name="header">
  166.            <xsl:with-param name="toc" select="$pointer"/>
  167.       </xsl:call-template>
  168.       <xsl:if test="$thislevel < $Depth">
  169.           <xsl:call-template name="continuedToc"/>
  170.       </xsl:if>
  171.  </li>
  172. </xsl:if>
  173. </xsl:template>
  174.  
  175. <xsl:template name="continuedToc">
  176.    <xsl:if test="div|div0|div1|div2|div3|div4|div5|div6">
  177.    <ul class="toc">
  178.    <xsl:apply-templates select="div|div0|div1|div2|div3|div4|div5|div6" mode="maketoc"/>
  179.    </ul>
  180.  </xsl:if>
  181. </xsl:template>
  182.  
  183. <xsl:template match="div|div0|div1|div2|div3|div4|div5|div6" mode="depth">
  184.   <xsl:choose>
  185.   <xsl:when test="name(.) = 'div'">
  186.     <xsl:value-of select="count(ancestor::div)"/>
  187.   </xsl:when>
  188.   <xsl:otherwise>
  189.    <xsl:choose>
  190.     <xsl:when test="ancestor-or-self::div0">
  191.       <xsl:value-of select="substring-after(name(.),'div')"/>
  192.     </xsl:when>
  193.     <xsl:otherwise>
  194.       <xsl:value-of select="substring-after(name(.),'div') - 1"/>
  195.     </xsl:otherwise>
  196.    </xsl:choose>
  197.   </xsl:otherwise>
  198.   </xsl:choose>
  199. </xsl:template>
  200.  
  201. <xsl:template match="*" mode="depth">99</xsl:template>
  202.  
  203. <xsl:template match="div|div0|div1|div2|div3|div4|div5|div6" mode="header"> 
  204.  <xsl:param name="minimal"/>
  205.  <xsl:call-template name="header">
  206.      <xsl:with-param name="minimal" select="$minimalCrossRef"/>
  207.  </xsl:call-template>
  208. </xsl:template>
  209.  
  210. <xsl:template match="TEI.2" mode="header"> 
  211.   <xsl:value-of select="teiHeader/fileDesc/titleStmt/title"/>
  212. </xsl:template>
  213.  
  214. <!-- headings etc -->
  215. <xsl:template match="head">
  216.  <xsl:variable name="parent" select="name(..)"/>
  217.  <xsl:if test="not(starts-with($parent,'div'))">
  218.    <xsl:apply-templates/>
  219.  </xsl:if>
  220. </xsl:template>
  221.  
  222. <xsl:template mode="plain" match="head">
  223.      <xsl:if test="preceding-sibling::head">
  224.     <xsl:text> </xsl:text>
  225.      </xsl:if>
  226.    <xsl:apply-templates mode="plain"/>
  227. </xsl:template>
  228.  
  229. <xsl:template match="p">
  230.   <xsl:choose>
  231.     <xsl:when test="list">
  232.       <xsl:apply-templates select="list[1]" mode="inpara"/> 
  233.     </xsl:when> 
  234.     <xsl:otherwise>
  235.      <p>
  236.     <xsl:choose>
  237.         <xsl:when test="@rend and starts-with(@rend,'class:')">
  238.     <xsl:attribute name="class">
  239.       <xsl:value-of select="substring-after(@rend,'class:')"/>
  240.     </xsl:attribute>
  241.       </xsl:when>
  242.     <xsl:when test="@rend">
  243.        <xsl:attribute name="class"><xsl:value-of select="@rend"/></xsl:attribute>
  244.       </xsl:when>
  245.     </xsl:choose>
  246.       <xsl:choose>
  247.         <xsl:when test="@id">
  248.           <a name="{@id}"/>
  249.         </xsl:when>
  250.         <xsl:when test="$generateParagraphIDs='true'">
  251.          <a name="{generate-id()}"/>
  252.         </xsl:when>
  253.       </xsl:choose>
  254.       <xsl:if test="$numberParagraphs='true'">
  255.         <xsl:number/><xsl:text> </xsl:text>
  256.       </xsl:if>
  257.       <xsl:apply-templates/>
  258.      </p>
  259.     </xsl:otherwise>
  260. </xsl:choose>
  261. </xsl:template>
  262.  
  263. <xsl:template match="list" mode="inpara">
  264.   <p><xsl:apply-templates select="preceding-sibling::node()"/></p>
  265.   <xsl:apply-templates select="."/>
  266.   <p><xsl:apply-templates select="following-sibling::node()"/></p>
  267. </xsl:template>
  268.  
  269. <xsl:template match="gi" mode="plain">
  270.   <xsl:text><</xsl:text>
  271.    <xsl:apply-templates/>
  272.   <xsl:text>></xsl:text>
  273. </xsl:template>
  274.  
  275. <xsl:template match="*" mode="plain">
  276.   <xsl:apply-templates/>
  277. </xsl:template>
  278.  
  279. <!-- why do this? it makes embedded elements fall over-->
  280.  
  281. <!--
  282. <xsl:template match="text()" mode="plain">
  283.   <xsl:value-of select="normalize-space(.)"/>
  284. </xsl:template>
  285. -->
  286.  
  287. <xsl:template name="writeDiv">
  288. <xsl:variable name="BaseFile">
  289.   <xsl:value-of select="$masterFile"/>
  290.   <xsl:if test="ancestor::teiCorpus.2">
  291.     <xsl:text>-</xsl:text>
  292.      <xsl:choose>
  293.       <xsl:when test="@id"><xsl:value-of select="@id"/></xsl:when> 
  294.       <xsl:otherwise><xsl:number/></xsl:otherwise>
  295.      </xsl:choose>
  296.   </xsl:if>
  297. </xsl:variable>
  298.     <html> <xsl:call-template name="addLangAtt"/>
  299.       <xsl:comment>THIS IS A GENERATED FILE. DO NOT EDIT</xsl:comment>
  300.       <head>
  301.         <xsl:variable name="pagetitle">
  302.           <xsl:call-template name="generateDivtitle"/>
  303.         </xsl:variable>
  304.         <title><xsl:value-of select="$pagetitle"/></title>
  305.          <xsl:call-template name="headHook"/>
  306.          <xsl:if test="not($cssFile = '')">
  307.            <link rel="stylesheet" type="text/css" href="{$cssFile}"/>
  308.          </xsl:if>
  309.         <xsl:call-template name="metaHook">
  310.          <xsl:with-param name="title" select="$pagetitle"/>
  311.         </xsl:call-template>
  312.         <xsl:call-template name="javaScript"/>
  313.        </head>
  314.        <body>
  315.        <xsl:call-template name="bodyHook"/>
  316.        <xsl:call-template name="bodyJavaScript"/>
  317.        <a name="TOP"/>
  318.        <div  class="teidiv">
  319.         <xsl:call-template name="stdheader">
  320.            <xsl:with-param name="title">
  321.                <xsl:call-template name="generateDivheading"/>
  322.            </xsl:with-param>
  323.         </xsl:call-template>
  324.  
  325.         <xsl:if test="$topNavigationPanel='true'">
  326.          <xsl:call-template name="xrefpanel">
  327.           <xsl:with-param name="homepage" 
  328.               select="concat($BaseFile,$standardSuffix)"/>
  329.           <xsl:with-param name="mode" 
  330.               select="name(.)"/>
  331.      </xsl:call-template>
  332.         </xsl:if>
  333.         <xsl:if test="$subTocDepth >= 0">
  334.           <xsl:call-template name="subtoc"/>
  335.         </xsl:if>
  336.  
  337.         <xsl:call-template name="startHook"/>
  338.         
  339.         <xsl:call-template name="doDivBody"/>
  340.  
  341.         <xsl:if test="descendant::note[@place='foot'] and not($footnoteFile)">
  342.          <hr/>
  343.          <p><b>Notes</b></p>
  344.            <xsl:call-template name="printDivnotes"/>
  345.         </xsl:if>
  346.         <xsl:if test="$bottomNavigationPanel='true'">
  347.          <xsl:call-template name="xrefpanel">
  348.           <xsl:with-param name="homepage" select="concat($BaseFile,$standardSuffix)"/>
  349.           <xsl:with-param name="mode" select="name(.)"/>
  350.      </xsl:call-template>
  351.         </xsl:if>
  352.  
  353.       <xsl:call-template name="stdfooter">
  354.           <xsl:with-param name="date">
  355.            <xsl:call-template name="generateDate"/>
  356.           </xsl:with-param>
  357.           <xsl:with-param name="author">
  358.             <xsl:call-template name="generateAuthorList"/>
  359.           </xsl:with-param>
  360.          </xsl:call-template>
  361.  
  362.         </div>
  363.      </body>
  364.    </html>
  365. </xsl:template>
  366.  
  367. <xsl:template name="header">
  368.  <xsl:param name="minimal"/>
  369.  <xsl:param name="toc"/>
  370.  <xsl:variable name="depth">
  371.      <xsl:apply-templates select="." mode="depth"/>
  372.  </xsl:variable>
  373.    <xsl:choose>
  374.      <xsl:when test="name(.) = 'TEI.2'">
  375.      </xsl:when>
  376.      <xsl:when test="$depth > $numberHeadingsDepth">
  377.      </xsl:when>
  378.      <xsl:when test="ancestor::back">
  379.        <xsl:if test="not($numberBackHeadings='')">
  380.         <xsl:value-of select="$appendixWords"/><xsl:text> </xsl:text>
  381.         <xsl:call-template name="numberBackDiv">
  382.           <xsl:with-param name="minimal" select="$minimal"/>
  383.         </xsl:call-template>
  384.         <xsl:if test="not($minimal)">
  385.           <xsl:value-of select="$numberSpacer"/>
  386.         </xsl:if>
  387.        </xsl:if>
  388.      </xsl:when>
  389.      <xsl:when test="ancestor::front">
  390.        <xsl:if test="not($numberFrontHeadings='')">
  391.         <xsl:call-template name="numberFrontDiv">
  392.           <xsl:with-param name="minimal" select="$minimal"/>
  393.         </xsl:call-template>
  394.        </xsl:if>
  395.      </xsl:when>
  396.      <xsl:when test="$numberHeadings ='true'">
  397.        <xsl:choose>
  398.        <xsl:when test="$prenumberedHeadings">
  399.                <xsl:value-of select="@n"/>
  400.        </xsl:when>
  401.        <xsl:otherwise>
  402.         <xsl:call-template name="numberBodyDiv">
  403.           <xsl:with-param name="minimal" select="$minimal"/>
  404.         </xsl:call-template>
  405.        </xsl:otherwise>
  406.        </xsl:choose>
  407.        <xsl:if test="not($minimal)"><xsl:value-of
  408.                select="$headingNumberSuffix"/>
  409.        </xsl:if>
  410.      </xsl:when>
  411.    </xsl:choose>
  412.    <xsl:if test="not($minimal)">
  413.     <xsl:choose>
  414.       <xsl:when test="name(.) = 'TEI.2'">
  415.         <xsl:value-of select="teiHeader/fileDesc/titleStmt/title"/>
  416.       </xsl:when>
  417.       <xsl:when test="not($toc='')">
  418.         <a class="toc" href="{$toc}">
  419.         <xsl:apply-templates mode="plain" select="head"/></a>
  420.       </xsl:when>
  421.       <xsl:otherwise>
  422.        <xsl:apply-templates mode="plain" select="head"/>
  423.       </xsl:otherwise>
  424.      </xsl:choose>
  425.     </xsl:if>
  426. </xsl:template>
  427.  
  428.  
  429. <xsl:template name="subtoc">
  430.  <xsl:if test="child::div|div1|div2|div3|div4|div5|div6">
  431.   <xsl:variable name="parent">
  432.    <xsl:choose>
  433.    <xsl:when test="ancestor::div">
  434.      <xsl:apply-templates select="ancestor::div[last()]" mode="ident"/>
  435.    </xsl:when>
  436.    <xsl:otherwise>
  437.      <xsl:apply-templates select="." mode="ident"/>
  438.    </xsl:otherwise>
  439.    </xsl:choose>
  440.   </xsl:variable>
  441.   <xsl:variable name="depth">
  442.    <xsl:apply-templates select="." mode="depth"/>
  443.  </xsl:variable>
  444.      <p><span class="subtochead"><xsl:value-of select="$tocWords"/></span></p>
  445.      <div class="subtoc">
  446.       <ul class="subtoc">
  447.       <xsl:for-each select="div|div1|div2|div3|div4|div5|div6">
  448.        <xsl:variable name="innerdent">
  449.          <xsl:apply-templates select="." mode="xrefheader"/>
  450.       </xsl:variable>
  451.       <li class="subtoc"><a class="subtoc" href="{$innerdent}">
  452.         <xsl:call-template name="header"/></a>
  453.      </li>
  454.      </xsl:for-each>
  455.     </ul></div>
  456.   </xsl:if>
  457. </xsl:template> 
  458.  
  459. <xsl:template name="maintoc"> 
  460.  <xsl:param name="force"/>
  461.  
  462.  <xsl:if test="$tocFront">
  463.    <xsl:for-each select="ancestor-or-self::TEI.2/text/front">
  464.     <xsl:if test="div|div0|div1|div2|div3|div4|div5|div6">
  465.     <ul class="toc{$force}">
  466.     <xsl:apply-templates 
  467.       select="div|div0|div1|div2|div3|div4|div5|div6" mode="maketoc">
  468.      <xsl:with-param name="forcedepth" select="$force"/>
  469.     </xsl:apply-templates>
  470.     </ul>
  471.     </xsl:if>
  472.    </xsl:for-each>
  473.  </xsl:if>
  474.    <xsl:for-each select="ancestor-or-self::TEI.2/text/body">
  475.     <xsl:if test="div|div0|div1|div2|div3|div4|div5|div6">
  476.     <ul class="toc{$force}">
  477.     <xsl:apply-templates 
  478.       select="div|div0|div1|div2|div3|div4|div5|div6" mode="maketoc">
  479.      <xsl:with-param name="forcedepth" select="$force"/>
  480.     </xsl:apply-templates>
  481.     </ul>
  482.     </xsl:if>
  483.    </xsl:for-each>
  484.  <xsl:if test="$tocBack">
  485.    <xsl:for-each select="ancestor-or-self::TEI.2/text/back">
  486.     <xsl:if test="div|div0|div1|div2|div3|div4|div5|div6">
  487.     <ul class="toc{$force}">
  488.     <xsl:apply-templates 
  489.       select="div|div0|div1|div2|div3|div4|div5|div6" mode="maketoc">
  490.      <xsl:with-param name="forcedepth" select="$force"/>
  491.     </xsl:apply-templates>
  492.     </ul>
  493.     </xsl:if>
  494.    </xsl:for-each>
  495.   </xsl:if>
  496. </xsl:template>
  497.  
  498.  
  499. <!-- xref to previous and last sections -->
  500.  
  501. <xsl:template name="xrefpanel">
  502. <xsl:param name="homepage"/>
  503. <xsl:param name="mode"/>
  504.  
  505. <p align="{$alignNavigationPanel}">
  506.  
  507.    <xsl:variable name="Parent">
  508.      <xsl:call-template name="locateParent"/>
  509.      <xsl:value-of select="$standardSuffix"/>
  510.    </xsl:variable>
  511.    <xsl:choose>
  512.     <xsl:when test="$Parent = $standardSuffix">
  513.       <xsl:call-template name="upLink">
  514.         <xsl:with-param name="up" select="$homepage"/>
  515.         <xsl:with-param name="title">
  516.           <xsl:call-template name="contentsWord"/>
  517.         </xsl:with-param>
  518.       </xsl:call-template>
  519.     </xsl:when>
  520.     <xsl:otherwise>
  521.         <xsl:call-template name="generateUpLink"/>
  522.     </xsl:otherwise>
  523.    </xsl:choose>
  524.  
  525. <xsl:choose>
  526.  <xsl:when test="$mode = 'div' and preceding-sibling::div">
  527.   <xsl:call-template name="previousLink">
  528.     <xsl:with-param name="previous"  select="preceding-sibling::div[1]"/>
  529.   </xsl:call-template>
  530.  </xsl:when>
  531.  <xsl:when test="$mode = 'div' and parent::body/preceding-sibling::front/div">
  532.   <xsl:call-template name="previousLink">
  533.     <xsl:with-param name="previous"  select="parent::body/preceding-sibling::front/div[head][last()]"/>
  534.   </xsl:call-template>
  535.  </xsl:when>
  536.  <xsl:when test="$mode = 'div' and parent::back/preceding-sibling::body/div">
  537.   <xsl:call-template name="previousLink">
  538.     <xsl:with-param name="previous"  select="parent::back/preceding-sibling::body/div[last()]"/>
  539.   </xsl:call-template>
  540.  </xsl:when>
  541.  <xsl:otherwise>
  542.   <xsl:choose>
  543.     <xsl:when test="name(.)='div0'">
  544.       <xsl:call-template name="previousLink">
  545.       <xsl:with-param name="previous" select="preceding-sibling::div0[1]"/>
  546.      </xsl:call-template>
  547.     </xsl:when>
  548.     <xsl:when test="name(.)='div1'">
  549.       <xsl:call-template name="previousLink">
  550.       <xsl:with-param name="previous" select="preceding-sibling::div1[1]"/>
  551.      </xsl:call-template>
  552.     </xsl:when>
  553.     <xsl:when test="name(.)='div2'">
  554.       <xsl:call-template name="previousLink">
  555.       <xsl:with-param name="previous" select="preceding-sibling::div2[1]"/>
  556.      </xsl:call-template>
  557.     </xsl:when>
  558.     <xsl:when test="name(.)='div3'">
  559.       <xsl:call-template name="previousLink">
  560.       <xsl:with-param name="previous" select="preceding-sibling::div3[1]"/> 
  561.      </xsl:call-template>
  562.    </xsl:when>
  563.   </xsl:choose>
  564.  </xsl:otherwise>
  565. </xsl:choose>
  566.  
  567. <xsl:choose>
  568.  <xsl:when test="$mode = 'div'">
  569.   <xsl:call-template name="nextLink">
  570.    <xsl:with-param name="next" 
  571.      select="(following-sibling::div[head][1]|parent::body/following-sibling::back/div[1]|parent::front/following-sibling::body/div[1])[1]"/>
  572.   </xsl:call-template>
  573.  </xsl:when>
  574.  <xsl:otherwise>
  575.   <xsl:choose>
  576.     <xsl:when test="name(.)='div0'">
  577.       <xsl:call-template name="nextLink">
  578.       <xsl:with-param name="next" select="following-sibling::div0[1]"/>
  579.      </xsl:call-template>
  580.     </xsl:when>
  581.     <xsl:when test="name(.)='div1'">
  582.       <xsl:call-template name="nextLink">
  583.       <xsl:with-param name="next" select="following-sibling::div1[1]"/>
  584.      </xsl:call-template>
  585.     </xsl:when>
  586.     <xsl:when test="name(.)='div2'">
  587.       <xsl:call-template name="nextLink">
  588.       <xsl:with-param name="next" select="following-sibling::div2[1]"/>
  589.      </xsl:call-template>
  590.     </xsl:when>
  591.     <xsl:when test="name(.)='div3'">
  592.       <xsl:call-template name="nextLink">
  593.       <xsl:with-param name="next" select="following-sibling::div3[1]"/> 
  594.      </xsl:call-template>
  595.    </xsl:when>
  596.   </xsl:choose>
  597.  </xsl:otherwise>
  598. </xsl:choose>
  599.  
  600. </p>
  601. </xsl:template>
  602.  
  603.  
  604. <xsl:template name="upLink">
  605. <xsl:param name="up"/>
  606. <xsl:param name="title"/>
  607. <xsl:if test="$up and not($makeFrames='true')">
  608.  <i><xsl:text> </xsl:text> <xsl:value-of select="$upWord"/>: </i>
  609.  <a  class="navlink"> 
  610.      <xsl:choose>
  611.       <xsl:when test="$title">
  612.          <xsl:attribute name="href">
  613.            <xsl:value-of select="$linkPrefix"/>
  614.            <xsl:value-of select="$up"/>
  615.          </xsl:attribute>
  616.          <xsl:value-of select="$title"/>
  617.       </xsl:when>
  618.       <xsl:otherwise>
  619.        <xsl:attribute name="href">
  620.            <xsl:value-of select="$linkPrefix"/>
  621.         <xsl:apply-templates mode="xrefheader" select="$up"/>
  622.        </xsl:attribute>
  623.        <xsl:for-each select="$up">
  624.         <xsl:call-template name="header">
  625.          <xsl:with-param name="minimal" select="$minimalCrossRef"/>
  626.         </xsl:call-template>
  627.        </xsl:for-each>
  628.       </xsl:otherwise>
  629.      </xsl:choose>
  630.    </a>  
  631. </xsl:if>
  632. </xsl:template>
  633.  
  634. <xsl:template name="previousLink">
  635. <xsl:param name="previous"/>
  636. <xsl:if test="$previous">
  637.  <i><xsl:text> </xsl:text>
  638.     <xsl:value-of select="$previousWord"/>: </i> 
  639.     <a  class="navlink"> <xsl:attribute name="href">
  640.            <xsl:value-of select="$linkPrefix"/>
  641.      <xsl:apply-templates mode="xrefheader" select="$previous"/>
  642.      </xsl:attribute>
  643.      <xsl:for-each select="$previous">
  644.        <xsl:call-template name="header">
  645.         <xsl:with-param name="minimal" select="$minimalCrossRef"/>
  646.        </xsl:call-template>
  647.      </xsl:for-each>
  648.     </a>  
  649. </xsl:if>
  650. </xsl:template>
  651.  
  652. <xsl:template name="nextLink">
  653. <xsl:param name="next"/>
  654. <xsl:if test="$next">
  655.  <i><xsl:text> </xsl:text>
  656.      <xsl:value-of select="$nextWord"/>: </i> <a  class="navlink">
  657.        <xsl:attribute name="href">
  658.            <xsl:value-of select="$linkPrefix"/>
  659.       <xsl:apply-templates mode="xrefheader" select="$next"/>
  660.      </xsl:attribute>
  661.      <xsl:for-each select="$next">
  662.        <xsl:call-template name="header">
  663.         <xsl:with-param name="minimal" select="$minimalCrossRef"/>
  664.        </xsl:call-template>
  665.      </xsl:for-each>
  666.      </a>  
  667. </xsl:if>
  668. </xsl:template> 
  669.  
  670. <xsl:template name="generateDivtitle">
  671.   <xsl:apply-templates select="head/text()"/>
  672. </xsl:template> 
  673.  
  674. <xsl:template name="generateDivheading">
  675.       <xsl:apply-templates select="." mode="header"/>
  676. </xsl:template> 
  677.  
  678. <xsl:template name="startHook"/>
  679.  
  680. <xsl:template name="doDivBody">
  681. <xsl:param name="Type"/>
  682. <xsl:call-template name="startDivHook"/>
  683. <xsl:variable name="ident">
  684.    <xsl:apply-templates select="." mode="ident"/>
  685. </xsl:variable>
  686.  <xsl:choose>
  687.   <xsl:when test="$leftLinks and $Type =''">
  688.        <xsl:call-template name="linkList">
  689.          <xsl:with-param name="side" select="'left'"/>
  690.        </xsl:call-template>
  691.   </xsl:when>
  692.   <xsl:when test="$rightLinks and $Type  =''">
  693.        <xsl:call-template name="linkList">
  694.          <xsl:with-param name="side" select="'right'"/>
  695.        </xsl:call-template>
  696.   </xsl:when>
  697.   <xsl:when test="parent::div/@rend='multicol'">
  698.      <td valign="top">
  699.       <xsl:if test="not($Type = '')">
  700.        <xsl:element name="h{$Type + $divOffset}">
  701.         <a name="{$ident}"></a><xsl:call-template name="header"/>
  702.        </xsl:element>
  703.       </xsl:if>
  704.       <xsl:apply-templates/>
  705.      </td>
  706.   </xsl:when>
  707.   <xsl:when test="@rend='multicol'">
  708.      <xsl:apply-templates select="*[not(name(.)='div')]"/>
  709.    <table>
  710.    <tr>
  711.      <xsl:apply-templates select="div"/>
  712.    </tr>
  713.    </table>
  714.   </xsl:when>
  715.   <xsl:otherwise>
  716.       <xsl:if test="not($Type = '')">
  717.        <xsl:element name="h{$Type + $divOffset}">
  718.         <a name="{$ident}"></a><xsl:call-template name="header"/>
  719.        </xsl:element>
  720.       </xsl:if>
  721.    <xsl:apply-templates/>
  722.   </xsl:otherwise>
  723.  </xsl:choose>
  724. </xsl:template>
  725.  
  726.  
  727. <xsl:template name="generateUpLink">
  728. <xsl:variable name="BaseFile">
  729.   <xsl:value-of select="$masterFile"/>
  730.   <xsl:if test="ancestor::teiCorpus.2">
  731.     <xsl:text>-</xsl:text>
  732.      <xsl:choose>
  733.       <xsl:when test="@id"><xsl:value-of select="@id"/></xsl:when> 
  734.       <xsl:otherwise><xsl:number/></xsl:otherwise>
  735.      </xsl:choose>
  736.   </xsl:if>
  737. </xsl:variable>
  738. <xsl:choose>
  739.  <xsl:when test="name(.) = 'div'">
  740.   <xsl:call-template name="upLink">
  741.     <xsl:with-param name="up" select="ancestor::div[last()]"/>
  742.   </xsl:call-template>
  743.  </xsl:when>
  744.  <xsl:otherwise>
  745.   <xsl:choose>
  746.     <xsl:when test="name(.)='div0'">
  747.       <xsl:call-template name="upLink">
  748.         <xsl:with-param name="up" select="concat($BaseFile,$standardSuffix)"/>
  749.         <xsl:with-param name="title" select="$homeLabel"/>
  750.       </xsl:call-template>
  751.     </xsl:when>
  752.     <xsl:when test="name(.)='div1'">
  753.       <xsl:call-template name="upLink">
  754.         <xsl:with-param name="up" select="concat($BaseFile,$standardSuffix)"/>
  755.         <xsl:with-param name="title" select="$homeLabel"/>
  756.       </xsl:call-template>
  757.     </xsl:when>
  758.     <xsl:when test="name(.)='div2'">
  759.       <xsl:call-template name="upLink">
  760.        <xsl:with-param name="up" select="ancestor::div1"/>
  761.       </xsl:call-template>
  762.     </xsl:when>
  763.     <xsl:when test="name(.)='div3'">
  764.      <xsl:call-template name="upLink">
  765.       <xsl:with-param name="up" select="ancestor::div2"/>
  766.      </xsl:call-template>
  767.     </xsl:when>
  768.     <xsl:when test="name(.)='div4'">
  769.       <xsl:call-template name="upLink">
  770.        <xsl:with-param name="up" select="ancestor::div3"/>
  771.       </xsl:call-template>
  772.     </xsl:when>
  773.     <xsl:when test="name(.)='div5'">
  774.      <xsl:call-template name="upLink">
  775.       <xsl:with-param name="up" select="ancestor::div4"/>
  776.      </xsl:call-template>
  777.     </xsl:when>
  778.     <xsl:otherwise>
  779.      <xsl:call-template name="upLink">
  780.       <xsl:with-param name="up" select="(ancestor::div1|ancestor::div)[1]"/>
  781.      </xsl:call-template>
  782.     </xsl:otherwise>
  783.   </xsl:choose>
  784.  </xsl:otherwise>
  785. </xsl:choose>
  786. </xsl:template>
  787.  
  788.  
  789. <xsl:template name="addLangAtt">
  790.   <xsl:variable name="supplied">
  791.     <xsl:value-of select="ancestor-or-self::*[@lang][1]/@lang"/>
  792.   </xsl:variable>
  793.   <xsl:attribute name="lang">
  794.     <xsl:choose>
  795.       <xsl:when test="$supplied">
  796.         <xsl:text>en</xsl:text>
  797.       </xsl:when>
  798.       <xsl:otherwise>
  799.         <xsl:value-of select="$supplied"/>
  800.       </xsl:otherwise>
  801.     </xsl:choose>
  802.   </xsl:attribute>
  803. </xsl:template>
  804.  
  805. </xsl:stylesheet>
  806.