<xsl:stylesheet xmlns:fotex="http://www.tug.org/fotex" xmlns:rng="http://relaxng.org/ns/structure/1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tei="http://www.tei-c.org/ns/1.0" xmlns:teix="http://www.tei-c.org/ns/Examples" xmlns:a="http://relaxng.org/ns/compatibility/annotations/1.0" xmlns:edate="http://exslt.org/dates-and-times" xmlns:xd="http://www.pnp-software.com/XSLTdoc" xmlns:estr="http://exslt.org/strings" xmlns:exsl="http://exslt.org/common" xmlns:fo="http://www.w3.org/1999/XSL/Format" extension-element-prefixes="exsl estr edate" exclude-result-prefixes="xd exsl fotex estr edate a fo rng tei teix" version="1.0">
  
  <xd:doc type="stylesheet">
    
<xd:short>
    TEI stylesheet
    dealing  with elements from the
      textstructure module, making XSL-FO output.
      
</xd:short>
    
<xd:detail>
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

   
   
      
</xd:detail>
    
<xd:author>See AUTHORS</xd:author>
    
<xd:cvsId>$Id: textstructure.xsl 4801 2008-09-13 10:05:32Z rahtz $</xd:cvsId>
    
<xd:copyright>2008, TEI Consortium</xd:copyright>
  
</xd:doc>

  
  <xd:doc>
    
<xd:short>Process elements  * in inner mode</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="*" mode="innertext">
    
<xsl:apply-templates select="." />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:*</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:*" mode="heading">
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:TEI</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:TEI">
    
<fo:root>
      
<xsl:call-template name="setupPagemasters" />
      
<xsl:call-template name="mainAction" />
    
</fo:root>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:back</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:back">
    
<xsl:comment>Back matter</xsl:comment>
    
<xsl:choose>
      
<xsl:when test="ancestor::tei:group">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:otherwise>
        
<fo:page-sequence format="{$formatBackpage}" text-align="{$alignment}" hyphenate="{$hyphenate}" language="{$language}">
          
<xsl:call-template name="choosePageMaster">
            
<xsl:with-param name="where">
              
<xsl:value-of select="$backMulticolumns" />
            
</xsl:with-param>
          
</xsl:call-template>
<!-- static areas -->
          
<xsl:choose>
            
<xsl:when test="$twoSided='true'">
              
<xsl:call-template name="headers-footers-twoside-back" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:call-template name="headers-footers-oneside-back" />
            
</xsl:otherwise>
          
</xsl:choose>
<!-- now start the main flow -->
          
<fo:flow flow-name="xsl-region-body" font-family="{$bodyFont}" font-size="{$bodySize}">
            
<xsl:apply-templates />
            
<xsl:call-template name="afterBodyHook" />
          
</fo:flow>
        
</fo:page-sequence>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:body</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:body">
    
<xsl:choose>
      
<xsl:when test="ancestor::tei:floatingText">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="ancestor::tei:p">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="ancestor::tei:group">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:otherwise>
<!-- start page sequence -->
        
<fo:page-sequence format="{$formatBodypage}" text-align="{$alignment}" hyphenate="{$hyphenate}" language="{$language}" initial-page-number="1">
          
<xsl:call-template name="choosePageMaster">
            
<xsl:with-param name="where">
              
<xsl:value-of select="$bodyMulticolumns" />
            
</xsl:with-param>
          
</xsl:call-template>
<!-- static areas -->
          
<xsl:choose>
            
<xsl:when test="$twoSided='true'">
              
<xsl:call-template name="headers-footers-twoside" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:call-template name="headers-footers-oneside" />
            
</xsl:otherwise>
          
</xsl:choose>
<!-- now start the main  flow -->
          
<fo:flow flow-name="xsl-region-body" font-family="{$bodyFont}" font-size="{$bodySize}">
            
<xsl:if test="not($flowMarginLeft='')">
              
<xsl:attribute name="margin-left">
                
<xsl:value-of select="$flowMarginLeft" />
              
</xsl:attribute>
            
</xsl:if>
<!--include front matter if there is no separate titlepage -->
            
<xsl:if test="not($titlePage='true') and not(preceding-sibling::tei:front)">
              
<xsl:call-template name="Header" />
            
</xsl:if>
            
<xsl:apply-templates />
            
<xsl:if test=".//tei:note[@place='end']">
              
<fo:block>
                
<xsl:call-template name="setupDiv2" />
                
<xsl:text>Notes</xsl:text>
              
</fo:block>
              
<xsl:apply-templates select=".//tei:note[@place='end']" mode="endnote" />
            
</xsl:if>
          
</fo:flow>
        
</fo:page-sequence>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:closer</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:closer">
    
<fo:block space-before.optimum="4pt" space-after.optimum="4pt" end-indent="{$exampleMargin}" start-indent="{$exampleMargin}">
      
<xsl:apply-templates />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:dateline</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:dateline">
    
<fo:block text-align="end">
      
<xsl:apply-templates />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div</xd:short>
    
<xd:detail>
      
<p> Normal headings </p>
    
</xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div">
    
<xsl:text>
</xsl:text>
    
<xsl:choose>
      
<xsl:when test="@type='bibliog'">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="@type='abstract'">
        
<fo:block keep-with-next.within-page="always" end-indent="{$exampleMargin}" start-indent="{$exampleMargin}">
          
<xsl:attribute name="text-align">center</xsl:attribute>
          
<xsl:call-template name="setupDiv2" />
          
<fo:inline font-style="italic">Abstract</fo:inline>
        
</fo:block>
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="@type='ack'">
        
<fo:block keep-with-next.within-page="always">
          
<xsl:attribute name="text-align">start</xsl:attribute>
          
<xsl:call-template name="setupDiv3" />
          
<fo:inline font-style="italic">Acknowledgements</fo:inline>
        
</fo:block>
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:otherwise>
<!-- behaviour depends on the nesting level of <div> elements -->
        
<xsl:variable name="divlevel" select="count(ancestor::tei:div)" />
        
<xsl:call-template name="NumberedHeading">
          
<xsl:with-param name="level">
            
<xsl:value-of select="$divlevel" />
          
</xsl:with-param>
        
</xsl:call-template>
        
<xsl:apply-templates />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div (toc mode)</xd:short>
    
<xd:detail>
      
<p> headings in TOC </p>
    
</xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div" mode="toc">
    
<xsl:variable name="divlevel">
      
<xsl:value-of select="count(ancestor::tei:div)" />
    
</xsl:variable>
    
<xsl:call-template name="tocheading">
      
<xsl:with-param name="level">
        
<xsl:value-of select="$divlevel" />
      
</xsl:with-param>
    
</xsl:call-template>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div (xref mode)</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div" mode="xref">
    
<xsl:variable name="divlevel" select="count(ancestor::tei:div)" />
    
<xsl:call-template name="xheading">
      
<xsl:with-param name="level">div<xsl:value-of select="$divlevel" /></xsl:with-param>
    
</xsl:call-template>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5">
    
<xsl:choose>
      
<xsl:when test="@type='letter'">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:call-template name="NumberedHeading">
          
<xsl:with-param name="level">
            
<xsl:value-of select="substring-after(local-name(),'div')" />
          
</xsl:with-param>
        
</xsl:call-template>
        
<xsl:apply-templates />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements
      tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5 (toc mode)
</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5" mode="toc">
    
<xsl:call-template name="tocheading">
      
<xsl:with-param name="level">
        
<xsl:value-of select="substring-after(local-name(),'div')" />
      
</xsl:with-param>
    
</xsl:call-template>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5
    (xref mode)
</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template mode="xref" match="tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5">
    
<xsl:call-template name="xheading">
      
<xsl:with-param name="level">
        
<xsl:value-of select="local-name()" />
      
</xsl:with-param>
    
</xsl:call-template>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div[@type='canto']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div[@type='canto']">
    
<xsl:variable name="divlevel" select="count(ancestor::tei:div)" />
    
<xsl:call-template name="NumberedHeading">
      
<xsl:with-param name="level">
        
<xsl:value-of select="$divlevel" />
      
</xsl:with-param>
    
</xsl:call-template>
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div[@type='epistle']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div[@type='epistle']">
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div[@type='frontispiece']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div[@type='frontispiece']">
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:div[@type='illustration']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:div[@type='illustration']">
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:divGen</xd:short>
    
<xd:detail>
      
<p> table of contents </p>
    
</xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:divGen">
    
<xsl:choose>
      
<xsl:when test="@type='toc' and ancestor::tei:text/tei:group">
        
<xsl:call-template name="bookTOC" />
      
</xsl:when>
      
<xsl:when test="@type='toc'">
        
<xsl:call-template name="mainTOC" />
      
</xsl:when>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:front</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:front">
    
<xsl:comment>Front matter</xsl:comment>
    
<xsl:choose>
      
<xsl:when test="ancestor::tei:floatingText">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="ancestor::tei:p">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="ancestor::tei:group">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:if test="$titlePage='true'">
          
<fo:page-sequence format="{$formatFrontpage}" force-page-count="end-on-even" hyphenate="{$hyphenate}" language="{$language}">
            
<xsl:call-template name="choosePageMaster">
              
<xsl:with-param name="where">
                
<xsl:value-of select="$frontMulticolumns" />
              
</xsl:with-param>
            
</xsl:call-template>
            
<fo:static-content flow-name="xsl-region-before">
              
<fo:block />
            
</fo:static-content>
            
<fo:static-content flow-name="xsl-region-after">
              
<fo:block />
            
</fo:static-content>
            
<fo:flow flow-name="xsl-region-body" font-family="{$bodyFont}">
              
<xsl:call-template name="Header" />
            
</fo:flow>
          
</fo:page-sequence>
        
</xsl:if>
        
<fo:page-sequence format="{$formatFrontpage}" text-align="{$alignment}" hyphenate="{$hyphenate}" language="{$language}" initial-page-number="1">
          
<xsl:call-template name="choosePageMaster">
            
<xsl:with-param name="where">
              
<xsl:value-of select="$frontMulticolumns" />
            
</xsl:with-param>
          
</xsl:call-template>
<!-- static areas -->
          
<xsl:choose>
            
<xsl:when test="$twoSided='true'">
              
<xsl:call-template name="headers-footers-twoside" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:call-template name="headers-footers-oneside" />
            
</xsl:otherwise>
          
</xsl:choose>
<!-- now start the main flow -->
          
<fo:flow flow-name="xsl-region-body" font-family="{$bodyFont}" font-size="{$bodySize}">
            
<xsl:for-each select="tei:*">
              
<xsl:comment>Start <xsl:value-of select="name(.)" /></xsl:comment>
              
<xsl:apply-templates select="." />
              
<xsl:comment>End <xsl:value-of select="name(.)" /></xsl:comment>
            
</xsl:for-each>
          
</fo:flow>
        
</fo:page-sequence>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:group/tei:text</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:group/tei:text">
    
<xsl:variable name="N">
      
<xsl:number />
    
</xsl:variable>
    
<fo:page-sequence format="1" text-align="{$alignment}" hyphenate="{$hyphenate}" language="{$language}" master-reference="twoside1">
      
<xsl:attribute name="initial-page-number">
        
<xsl:choose>
          
<xsl:when test="$N = 1">1</xsl:when>
          
<xsl:otherwise>auto-odd</xsl:otherwise>
        
</xsl:choose>
      
</xsl:attribute>
      
<xsl:call-template name="grouptextStatic" />
      
<fo:flow flow-name="xsl-region-body" font-family="{$bodyFont}">
        
<xsl:call-template name="textTitle">
          
<xsl:with-param name="N" select="$N" />
        
</xsl:call-template>
        
<xsl:apply-templates select="tei:body" />
        
<xsl:apply-templates select="tei:back" />
      
</fo:flow>
    
</fo:page-sequence>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:group/tei:text/tei:body</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:group/tei:text/tei:body">
    
<xsl:apply-templates />
    
<xsl:if test=".//tei:note[@place='end']">
      
<fo:block>
        
<xsl:call-template name="setupDiv2" />
        
<xsl:text>Notes</xsl:text>
      
</fo:block>
      
<xsl:apply-templates select=".//tei:note[@place='end']" mode="endnote" />
    
</xsl:if>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:head (section mode)</xd:short>
    
<xd:detail>
      
<p> simple head </p>
    
</xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:head" mode="section">
<!-- if we have multiple <head> elements together, 
  separate by spaces 
-->
<!--
   <xsl:if test="preceding-sibling::tei:head">
        <xsl:text> </xsl:text>
     </xsl:if>
-->
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:head</xd:short>
    
<xd:detail>
      
<p> unqualified &lt;head&gt; </p>
    
</xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:head" />
  
  <xd:doc>
    
<xd:short>Process elements  tei:opener</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:opener">
    
<fo:block space-before.optimum="4pt" space-after.optimum="4pt" end-indent="{$exampleMargin}" start-indent="{$exampleMargin}">
      
<xsl:apply-templates />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:text (xref mode)</xd:short>
    
<xd:detail>
      
<p> headings when cross-referenced </p>
    
</xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:text" mode="xref">
    
<xsl:choose>
      
<xsl:when test="@n">
        
<xsl:value-of select="@n" />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:number />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:text</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:text">
    
<xsl:choose>
      
<xsl:when test="parent::tei:TEI">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:when test="parent::tei:group">
        
<xsl:apply-templates />
      
</xsl:when>
      
<xsl:otherwise>
        
<fo:block text-align="start" text-indent="0pt" end-indent="{$exampleMargin}" start-indent="{$exampleMargin}" font-size="{$exampleSize}" border-top-style="solid" border-bottom-style="solid" space-before.optimum="{$exampleBefore}" space-after.optimum="{$exampleAfter}">
          
<xsl:apply-templates mode="innertext" />
        
</fo:block>
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:text (toc mode)</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:text" mode="toc">
    
<fo:block>
      
<xsl:attribute name="font-weight">bold</xsl:attribute>
      
<xsl:number />
      
<xsl:text></xsl:text>
      
<fo:inline>
        
<xsl:choose>
          
<xsl:when test="tei:front/tei:docTitle[@n]">
            
<xsl:value-of select="tei:front/tei:docTitle/@n" />
          
</xsl:when>
          
<xsl:otherwise>
            
<xsl:value-of select="tei:front/tei:docTitle" />
          
</xsl:otherwise>
        
</xsl:choose>
      
</fo:inline>
      
<fo:leader rule-thickness="0pt" />
      
<fo:inline>
        
<xsl:call-template name="linkStyle" />
        
<xsl:variable name="pagref">
          
<xsl:choose>
            
<xsl:when test="@xml:id">
              
<xsl:value-of select="@xml:id" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:value-of select="generate-id()" />
            
</xsl:otherwise>
          
</xsl:choose>
        
</xsl:variable>
        
<fo:basic-link internal-destination="{$pagref}">
          
<fo:page-number-citation ref-id="{$pagref}" />
        
</fo:basic-link>
      
</fo:inline>
    
</fo:block>
    
<fo:block font-style="italic" space-after="10pt" space-before="6pt">
      
<xsl:apply-templates select="tei:front//tei:docAuthor" mode="heading" />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:titlePage</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:titlePage">
    
<fo:block text-align="center">
      
<xsl:apply-templates />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:titlePage//tei:titlePart[@type='main']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:titlePage//tei:titlePart[@type='main']">
    
<fo:block font-size="{$titleSize}" space-after="8pt" text-align="center">
      
<xsl:apply-templates />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:titlePage/tei:titlePart[@type='sub']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:titlePage/tei:titlePart[@type='sub']">
    
<fo:block>
      
<fo:block font-size="{$authorSize}" space-after="8pt" text-align="center">
        
<xsl:apply-templates />
      
</fo:block>
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:titlePart</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:titlePart">
    
<xsl:apply-templates />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  tei:titlePart[@type='running']</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:titlePart[@type='running']" />
  
  <xd:doc>
    
<xd:short>Process elements  tei:trailer</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template match="tei:trailer">
    
<fo:block>
      
<xsl:apply-templates />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>Process elements  text()</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="Header">
    
<fo:block font-size="12pt" padding-before="6pt">
      
<fo:inline>
        
<xsl:value-of select="$institution" />
      
</fo:inline>
    
</fo:block>
    
    
<fo:block font-size="12pt" font-weight="bold">
      
<xsl:call-template name="generateTitle" />
    
</fo:block>
    
    
<fo:block>
      
<xsl:call-template name="generateAuthor" />
    
</fo:block>
    
    
<fo:block padding-after="6pt">
      
<xsl:call-template name="generateDate" />
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="level">level</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="NumberedHeading">
    
<xsl:param name="level" />
    
<fo:block keep-with-next.within-page="always">
      
<xsl:variable name="divid">
        
<xsl:choose>
          
<xsl:when test="@xml:id">
            
<xsl:value-of select="@xml:id" />
          
</xsl:when>
          
<xsl:otherwise>
            
<xsl:value-of select="generate-id()" />
          
</xsl:otherwise>
        
</xsl:choose>
      
</xsl:variable>
      
<xsl:attribute name="id">
        
<xsl:value-of select="$divid" />
      
</xsl:attribute>
      
<xsl:attribute name="text-align">start</xsl:attribute>
      
<xsl:attribute name="font-family">
        
<xsl:value-of select="$divFont" />
      
</xsl:attribute>
      
<xsl:choose>
        
<xsl:when test="$level=0">
          
<xsl:call-template name="setupDiv0" />
        
</xsl:when>
        
<xsl:when test="$level=1">
          
<xsl:call-template name="setupDiv1" />
        
</xsl:when>
        
<xsl:when test="$level=2">
          
<xsl:call-template name="setupDiv2" />
        
</xsl:when>
        
<xsl:when test="$level=3">
          
<xsl:call-template name="setupDiv3" />
        
</xsl:when>
        
<xsl:when test="$level=4">
          
<xsl:call-template name="setupDiv4" />
        
</xsl:when>
        
<xsl:when test="$level=5">
          
<xsl:call-template name="setupDiv5" />
        
</xsl:when>
      
</xsl:choose>
      
<xsl:call-template name="blockStartHook" />
      
<xsl:variable name="Number">
        
<xsl:if test="$numberHeadings='true' and $numberHeadingsDepth &gt; $level">
          
<xsl:call-template name="calculateNumber">
            
<xsl:with-param name="numbersuffix" select="$headingNumberSuffix" />
          
</xsl:call-template>
        
</xsl:if>
      
</xsl:variable>
<!--
<xsl:message>**  Calculated   [<xsl:value-of select="$Number"/>] [<xsl:value-of select="$headingNumberSuffix"/>] for <xsl:value-of select="@xml:id"/></xsl:message>
-->
      
<xsl:value-of select="$Number" />
      
<xsl:apply-templates mode="section" select="tei:head" />
      
<xsl:if test="$divRunningheads='true'">
<!-- markers for use in running heads -->
        
<xsl:choose>
          
<xsl:when test="$level=0">
            
<fo:marker marker-class-name="section1" />
            
<fo:marker marker-class-name="section2" />
            
<fo:marker marker-class-name="section3" />
            
<fo:marker marker-class-name="section4" />
            
<fo:marker marker-class-name="section5" />
          
</xsl:when>
          
<xsl:when test="$level=1">
            
<fo:marker marker-class-name="section2" />
            
<fo:marker marker-class-name="section3" />
            
<fo:marker marker-class-name="section4" />
            
<fo:marker marker-class-name="section5" />
          
</xsl:when>
          
<xsl:when test="$level=2">
            
<fo:marker marker-class-name="section3" />
            
<fo:marker marker-class-name="section4" />
            
<fo:marker marker-class-name="section5" />
          
</xsl:when>
          
<xsl:when test="$level=3">
            
<fo:marker marker-class-name="section4" />
            
<fo:marker marker-class-name="section5" />
          
</xsl:when>
          
<xsl:when test="$level=4">
          
<fo:marker marker-class-name="section5" />
          
</xsl:when>
          
<xsl:when test="$level=5" />                     
        
</xsl:choose>
        
<fo:marker marker-class-name="section{$level}">
          
<xsl:if test="$numberHeadings='true'">
            
<xsl:value-of select="$Number" />
            
<xsl:value-of select="$headingNumberSuffix" />
          
</xsl:if>
          
<xsl:value-of select="tei:head" />
        
</fo:marker>
      
</xsl:if>
      
<xsl:choose>
        
<xsl:when test="$foEngine='passivetex'">
<!-- Passive TeX extension, to get PDF bookmarks -->
          
<fotex:bookmark fotex-bookmark-level="{$level}" fotex-bookmark-label="{$divid}">
            
<xsl:if test="$numberHeadings='true'">
              
<xsl:value-of select="$Number" />
            
</xsl:if>
            
<xsl:value-of select="tei:head" />
          
</fotex:bookmark>
        
</xsl:when>
      
</xsl:choose>
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="bookTOC">
    
<fo:page-sequence format="1" initial-page-number="{$tocStartPage}" master-reference="twoside1">
      
<xsl:call-template name="headers-footers-twoside">
        
<xsl:with-param name="runeven">even page running head</xsl:with-param>
        
<xsl:with-param name="runodd"> odd page running head</xsl:with-param>
      
</xsl:call-template>
      
<fo:flow flow-name="xsl-region-body" font-family="{$bodyFont}">
        
<fo:block text-align="center">
          
<xsl:attribute name="font-size">
            
<xsl:value-of select="$tocSize" />
          
</xsl:attribute>
          
<xsl:attribute name="text-indent">
            
<xsl:value-of select="$headingOutdent" />
          
</xsl:attribute>
          
<xsl:attribute name="font-weight">bold</xsl:attribute>
          
<xsl:attribute name="space-after">24pt</xsl:attribute>
          
<xsl:attribute name="space-before.optimum">24pt</xsl:attribute>
          
<xsl:text>Contents</xsl:text>
        
</fo:block>
        
<xsl:for-each select="ancestor::tei:text/tei:group/tei:text">
          
<xsl:apply-templates select="." mode="toc" />
        
</xsl:for-each>
      
</fo:flow>
    
</fo:page-sequence>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="where">where</xd:param>
    
<xd:param name="force">force</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="choosePageMaster">
    
<xsl:param name="where" />
    
<xsl:param name="force" />
    
<xsl:variable name="mn">
      
<xsl:choose>
        
<xsl:when test="$forcePageMaster">
          
<xsl:value-of select="$forcePageMaster" />
        
</xsl:when>
        
<xsl:when test="not($where='')">
          
<xsl:choose>
            
<xsl:when test="$twoSided='true'">twoside2</xsl:when>
            
<xsl:otherwise>oneside2</xsl:otherwise>
          
</xsl:choose>
        
</xsl:when>
        
<xsl:otherwise>
          
<xsl:choose>
            
<xsl:when test="$twoSided='true'">twoside1</xsl:when>
            
<xsl:otherwise>oneside1</xsl:otherwise>
          
</xsl:choose>
        
</xsl:otherwise>
      
</xsl:choose>
    
</xsl:variable>
    
<xsl:attribute name="master-reference">
      
<xsl:value-of select="$mn" />
    
</xsl:attribute>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="grouptextStatic">
    
<fo:static-content flow-name="xsl-region-after-right">
      
<fo:block text-align="end" font-size="{$bodySize}">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-after-left">
      
<fo:block text-align="start" font-size="{$bodySize}">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-before-left">
      
<fo:block text-indent="0em" background-color="blue" font-weight="bold" padding="3pt" color="white" font-family="{$runFont}" text-align="justify" font-size="{$runSize}">
        
<fo:inline>
          
<xsl:number />
        
</fo:inline>
        
<fo:leader rule-thickness="0pt" />
        
<fo:inline>
          
<xsl:choose>
            
<xsl:when test="front/tei:docTitle[@n]">
              
<xsl:value-of select="tei:front/tei:docTitle[@n]" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:value-of select="tei:front/tei:docTitle" />
            
</xsl:otherwise>
          
</xsl:choose>
        
</fo:inline>
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-before-right">
      
<fo:block background-color="blue" text-indent="0em" font-weight="bold" padding="3pt" color="white" text-align="left" font-family="{$runFont}" font-size="{$runSize}">
        
<xsl:value-of select="tei:front//tei:docAuthor" />
      
</fo:block>
    
</fo:static-content>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="runhead">runhead</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="headers-footers-oneside">
    
<xsl:param name="runhead" />
    
<fo:static-content flow-name="xsl-region-before">
      
<fo:block font-size="{$bodySize}">
        
<xsl:choose>
          
<xsl:when test="$runhead='true'">
            
<xsl:value-of select="$runhead" />
          
</xsl:when>
          
<xsl:otherwise>
            
<xsl:call-template name="runninghead-author" />
          
</xsl:otherwise>
        
</xsl:choose>
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-after">
      
<fo:block text-align="center" font-size="{$bodySize}">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-before-first">
        
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-after-first">
      
<fo:block text-align="center" font-size="{$bodySize}">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="runhead">runhead</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="headers-footers-oneside-back">
    
<xsl:param name="runhead" />
    
<xsl:call-template name="headers-footers-oneside">
      
<xsl:with-param name="runhead">
        
<xsl:value-of select="$runhead" />
      
</xsl:with-param>
    
</xsl:call-template>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="runodd">odd page running head</xd:param>
    
<xd:param name="runeven">even page running head</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="headers-footers-twoside">
    
<xsl:param name="runodd" />
    
<xsl:param name="runeven" />
    
<fo:static-content flow-name="xsl-region-before-right">
      
<fo:block text-align="justify" text-align-last="justify" font-size="{$bodySize}">
        
<xsl:choose>
          
<xsl:when test="$runodd">
            
<xsl:value-of select="$runodd" />
          
</xsl:when>
          
<xsl:when test="$sectionHeaders='true'">
            
<fo:block>
              
<xsl:if test="$divRunningheads='true'">
                
<fo:inline>
                  
<fo:retrieve-marker retrieve-class-name="section2" />
                
</fo:inline>
              
</xsl:if>
              
<fo:leader rule-thickness="0pt" />
              
<fo:inline>
                
<fo:page-number />
              
</fo:inline>
            
</fo:block>
          
</xsl:when>
          
<xsl:otherwise>
            
<xsl:call-template name="runninghead-title" />
          
</xsl:otherwise>
        
</xsl:choose>
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-before-left">
      
<fo:block text-align="justify" font-size="{$bodySize}">
        
<xsl:choose>
          
<xsl:when test="$runeven">
            
<xsl:value-of select="$runeven" />
          
</xsl:when>
          
<xsl:when test="$sectionHeaders='true'">
            
<fo:block>
              
<fo:inline>
                
<fo:page-number />
              
</fo:inline>
              
<fo:leader rule-thickness="0pt" />
              
<xsl:if test="$divRunningheads='true'">
                
<fo:inline>
                  
<fo:retrieve-marker retrieve-class-name="section1" />
                
</fo:inline>
              
</xsl:if>
            
</fo:block>
          
</xsl:when>
          
<xsl:otherwise>
            
<xsl:call-template name="runninghead-author" />
          
</xsl:otherwise>
        
</xsl:choose>
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-before-first">
      
<fo:block />
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-after-right">
      
<fo:block text-align="end" font-size="{$bodySize}">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-after-left">
      
<fo:block text-align="start" font-size="{$bodySize}">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
    
<fo:static-content flow-name="xsl-region-after-first">
      
<fo:block font-size="{$bodySize}" text-align="end">
        
<fo:page-number />
      
</fo:block>
    
</fo:static-content>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="runodd">odd page running head</xd:param>
    
<xd:param name="runeven">even page running head</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="headers-footers-twoside-back">
    
<xsl:param name="runodd" />
    
<xsl:param name="runeven" />
    
<xsl:call-template name="headers-footers-twoside">
      
<xsl:with-param name="runeven">
        
<xsl:value-of select="$runeven" />
      
</xsl:with-param>
      
<xsl:with-param name="runodd">
        
<xsl:value-of select="$runodd" />
      
</xsl:with-param>
    
</xsl:call-template>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="mainAction">
    
<xsl:choose>
      
<xsl:when test="text/tei:group">
        
<xsl:apply-templates select="tei:text/tei:front" />
        
<xsl:apply-templates select="tei:text/tei:group" />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:apply-templates select="tei:text/tei:front" />
        
<xsl:apply-templates select="tei:text/tei:body" />
      
</xsl:otherwise>
    
</xsl:choose>
    
<xsl:apply-templates select="tei:text/tei:back" />
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="mainTOC">
    
<fo:block>
      
<xsl:call-template name="setupDiv1" />
      
<xsl:call-template name="i18n">
        
<xsl:with-param name="word">contentsWord</xsl:with-param>
      
</xsl:call-template>
    
</fo:block>
    
<xsl:choose>
      
<xsl:when test="ancestor::tei:text/tei:group">
        
<xsl:for-each select="ancestor::tei:text/tei:group">
          
<xsl:apply-templates select="tei:text" mode="toc" />
        
</xsl:for-each>
      
</xsl:when>
      
<xsl:when test="ancestor::tei:text/tei:body/tei:div1">
        
<xsl:if test="$tocFront='true'">
          
<xsl:for-each select="ancestor::tei:text/tei:front/tei:div1|ancestor::tei:text/tei:front//tei:div2|ancestor::tei:text/tei:front//tei:div3">
            
<xsl:apply-templates mode="toc" select="(.)" />
          
</xsl:for-each>
        
</xsl:if>
        
<xsl:for-each select="ancestor::tei:text/tei:body/tei:div1|ancestor::tei:text/tei:body//tei:div2|ancestor::tei:text/tei:body//tei:div3">
          
<xsl:apply-templates mode="toc" select="(.)" />
        
</xsl:for-each>
        
<xsl:if test="$tocBack='true'">
          
<xsl:for-each select="ancestor::tei:text/tei:back/tei:div1|ancestor::tei:text/tei:back//tei:div2|ancestor::tei:text/tei:back//tei:div3">
            
<xsl:apply-templates mode="toc" select="(.)" />
          
</xsl:for-each>
        
</xsl:if>
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:call-template name="tocBits" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="runninghead-author">
    
<xsl:choose>
      
<xsl:when test="ancestor::tei:text[1]/tei:front//tei:docAuthor[@type='running']">
        
<xsl:apply-templates select="ancestor-or-self::tei:text[1]/tei:front//tei:docAuthor[@type='running']" mode="heading" />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:apply-templates select="ancestor-or-self::tei:text[1]/tei:front//tei:docAuthor" mode="heading" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="runninghead-title">
    
<xsl:comment>Running Head: title</xsl:comment>
    
<xsl:choose>
      
<xsl:when test="ancestor-or-self::tei:text[1]/tei:front//tei:docTitle[1]/tei:titlePart[@type='running']">
        
<xsl:apply-templates select="ancestor-or-self::tei:text[1]/tei:front//tei:docTitle[1]/tei:titlePart[@type='running']" mode="heading" />
      
</xsl:when>
      
<xsl:otherwise>
        
<xsl:apply-templates select="ancestor-or-self::tei:text[1]/tei:front//tei:docTitle[1]/tei:titlePart" mode="heading" />
      
</xsl:otherwise>
    
</xsl:choose>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="setupPagemasters">
    
<fo:layout-master-set>
<!-- one sided, single column -->
      
<fo:simple-page-master master-name="simple1" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before extent="{$regionBeforeExtent}" />
        
<fo:region-after extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- for left-hand/tei:even pages in twosided mode, single column -->
      
<fo:simple-page-master master-name="left1" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before region-name="xsl-region-before-left" extent="{$regionBeforeExtent}" />
        
<fo:region-after region-name="xsl-region-after-left" extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- for right-hand/tei:odd pages in twosided mode, single column -->
      
<fo:simple-page-master master-name="right1" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before region-name="xsl-region-before-right" extent="{$regionBeforeExtent}" />
        
<fo:region-after region-name="xsl-region-after-right" extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- special case of first page in either mode, single column -->
      
<fo:simple-page-master master-name="first1" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before region-name="xsl-region-before-first" extent="{$regionBeforeExtent}" />
        
<fo:region-after region-name="xsl-region-after-first" extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- for pages in one-side mode, 2 column -->
      
<fo:simple-page-master master-name="simple2" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body column-count="{$columnCount}" margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before extent="{$regionBeforeExtent}" />
        
<fo:region-after extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- for left-hand/tei:even pages in twosided mode, 2 column -->
      
<fo:simple-page-master master-name="left2" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body column-count="{$columnCount}" margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before region-name="xsl-region-before-left" extent="{$regionBeforeExtent}" />
        
<fo:region-after region-name="xsl-region-after-left" extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- for right-hand/tei:odd pages in twosided mode, 2 column -->
      
<fo:simple-page-master master-name="right2" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body column-count="{$columnCount}" margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before region-name="xsl-region-before-right" extent="{$regionBeforeExtent}" />
        
<fo:region-after region-name="xsl-region-after-right" extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- special case of first page in either mode -->
      
<fo:simple-page-master master-name="first2" page-width="{$pageWidth}" page-height="{$pageHeight}" margin-top="{$pageMarginTop}" margin-bottom="{$pageMarginBottom}" margin-left="{$pageMarginLeft}" margin-right="{$pageMarginRight}">
        
<fo:region-body column-count="{$columnCount}" margin-bottom="{$bodyMarginBottom}" margin-top="{$bodyMarginTop}" />
        
<fo:region-before region-name="xsl-region-before-first" extent="{$regionBeforeExtent}" />
        
<fo:region-after region-name="xsl-region-after-first" extent="{$regionAfterExtent}" />
      
</fo:simple-page-master>
<!-- setup for double-sided, 1 column, no first page -->
      
<fo:page-sequence-master master-name="twoside1nofirst">
        
<fo:repeatable-page-master-alternatives>
          
<fo:conditional-page-master-reference master-reference="right1" odd-or-even="odd" />
          
<fo:conditional-page-master-reference master-reference="left1" odd-or-even="even" />
        
</fo:repeatable-page-master-alternatives>
      
</fo:page-sequence-master>
<!-- setup for double-sided, 1 column -->
      
<fo:page-sequence-master master-name="twoside1">
        
<fo:repeatable-page-master-alternatives>
          
<fo:conditional-page-master-reference master-reference="first1" page-position="first" />
          
<fo:conditional-page-master-reference master-reference="right1" odd-or-even="odd" />
          
<fo:conditional-page-master-reference master-reference="left1" odd-or-even="even" />
        
</fo:repeatable-page-master-alternatives>
      
</fo:page-sequence-master>
<!-- setup for single-sided, 1 column -->
      
<fo:page-sequence-master master-name="oneside1">
        
<fo:repeatable-page-master-alternatives>
          
<fo:conditional-page-master-reference master-reference="first1" page-position="first" />
          
<fo:conditional-page-master-reference master-reference="simple1" />
        
</fo:repeatable-page-master-alternatives>
      
</fo:page-sequence-master>
<!-- setup for double-sided, 2 column -->
      
<fo:page-sequence-master master-name="twoside2">
        
<fo:repeatable-page-master-alternatives>
          
<fo:conditional-page-master-reference master-reference="first2" page-position="first" />
          
<fo:conditional-page-master-reference master-reference="right2" odd-or-even="odd" />
          
<fo:conditional-page-master-reference master-reference="left2" odd-or-even="even" />
        
</fo:repeatable-page-master-alternatives>
      
</fo:page-sequence-master>
<!-- setup for single-sided, 2 column -->
      
<fo:page-sequence-master master-name="oneside2">
        
<fo:repeatable-page-master-alternatives>
          
<fo:conditional-page-master-reference master-reference="first2" page-position="first" />
          
<fo:conditional-page-master-reference master-reference="simple2" />
        
</fo:repeatable-page-master-alternatives>
      
</fo:page-sequence-master>
      
<xsl:call-template name="pageMasterHook" />
    
</fo:layout-master-set>
    
<xsl:if test="$foEngine='xep'">
<!-- PDF bookmarks using XEP -->
      
<outline xmlns="http://www.renderx.com/XSL/Extensions">
        
<xsl:for-each select="/tei:TEI/tei:text/tei:front/tei:div">
          
<xsl:call-template name="makeBookMark" />
        
</xsl:for-each>
        
<xsl:for-each select="/tei:TEI/tei:text/tei:body/tei:div">
          
<xsl:call-template name="makeBookMark" />
        
</xsl:for-each>
        
<xsl:for-each select="/tei:TEI/tei:text/tei:back/tei:div">
          
<xsl:call-template name="makeBookMark" />
        
</xsl:for-each>
<!-- now try numbered divs -->
        
<xsl:for-each select="/tei:TEI/tei:text/tei:front/tei:div0">
          
<xsl:call-template name="makeBookMarkN" />
        
</xsl:for-each>
        
<xsl:for-each select="/tei:TEI/tei:text/tei:body/tei:div0">
          
<xsl:call-template name="makeBookMarkN" />
        
</xsl:for-each>
        
<xsl:for-each select="/tei:TEI/tei:text/tei:back/tei:div0">
          
<xsl:call-template name="makeBookMarkN" />
        
</xsl:for-each>
<!-- now try numbered divs -->
        
<xsl:for-each select="/tei:TEI/tei:text/tei:front/tei:div1">
          
<xsl:call-template name="makeBookMarkN" />
        
</xsl:for-each>
        
<xsl:for-each select="/tei:TEI/tei:text/tei:body/tei:div1">
          
<xsl:call-template name="makeBookMarkN" />
        
</xsl:for-each>
        
<xsl:for-each select="/tei:TEI/tei:text/tei:back/tei:div1">
          
<xsl:call-template name="makeBookMarkN" />
        
</xsl:for-each>
      
</outline>
    
</xsl:if>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] Make an XEP bookmark</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="makeBookMark">
    
<xsl:if test="tei:head">
      
<bookmark xmlns="http://www.renderx.com/XSL/Extensions">
        
<xsl:variable name="depth" select="count(ancestor::tei:div)" />
        
<xsl:attribute name="internal-destination">
          
<xsl:choose>
            
<xsl:when test="@xml:id">
              
<xsl:value-of select="@xml:id" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:value-of select="generate-id()" />
            
</xsl:otherwise>
          
</xsl:choose>
        
</xsl:attribute>
        
<bookmark-label>
          
<xsl:if test="$numberHeadings='true' and $numberHeadingsDepth &gt; $depth">
            
<xsl:call-template name="calculateNumber">
              
<xsl:with-param name="numbersuffix" select="$headingNumberSuffix" />
            
</xsl:call-template>
            
<xsl:text> </xsl:text>
          
</xsl:if>
          
<xsl:value-of select="tei:head" />
        
</bookmark-label>
        
<xsl:for-each select="tei:div">
          
<xsl:call-template name="makeBookMark" />
        
</xsl:for-each>
      
</bookmark>
    
</xsl:if>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] Make an XEP bookmark for numbered divs</xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="makeBookMarkN">
    
<xsl:if test="tei:head">
      
<xsl:variable name="depth" select="substring-after(local-name(.),'div')" />
      
<bookmark xmlns="http://www.renderx.com/XSL/Extensions">
        
<xsl:attribute name="internal-destination">
          
<xsl:choose>
            
<xsl:when test="@xml:id">
              
<xsl:value-of select="@xml:id" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:value-of select="generate-id()" />
            
</xsl:otherwise>
          
</xsl:choose>
        
</xsl:attribute>
        
<bookmark-label>
          
<xsl:if test="$numberHeadings='true' and $numberHeadingsDepth &gt; $depth">
            
<xsl:call-template name="calculateNumber">
              
<xsl:with-param name="numbersuffix" select="$headingNumberSuffix" />
            
</xsl:call-template>
            
<xsl:text> </xsl:text>
          
</xsl:if>
          
<xsl:value-of select="tei:head" />
        
</bookmark-label>
        
<xsl:choose>
          
<xsl:when test="$depth='0'">
            
<xsl:for-each select="tei:div1">
              
<xsl:call-template name="makeBookMarkN" />
            
</xsl:for-each>
          
</xsl:when>
          
<xsl:when test="$depth='1'">
            
<xsl:for-each select="tei:div2">
              
<xsl:call-template name="makeBookMarkN" />
            
</xsl:for-each>
          
</xsl:when>
          
<xsl:when test="$depth='2'">
            
<xsl:for-each select="tei:div3">
              
<xsl:call-template name="makeBookMarkN" />
            
</xsl:for-each>
          
</xsl:when>
          
<xsl:when test="$depth='3'">
            
<xsl:for-each select="tei:div4">
              
<xsl:call-template name="makeBookMarkN" />
            
</xsl:for-each>
          
</xsl:when>
          
<xsl:when test="$depth='4'">
            
<xsl:for-each select="tei:div5">
              
<xsl:call-template name="makeBookMarkN" />
            
</xsl:for-each>
          
</xsl:when>
          
<xsl:when test="$depth='5'">
            
<xsl:for-each select="tei:div6">
              
<xsl:call-template name="makeBookMarkN" />
            
</xsl:for-each>
          
</xsl:when>
        
</xsl:choose>
      
</bookmark>
    
</xsl:if>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="tocBits">
    
<xsl:if test="$tocFront='true'">
      
<xsl:for-each select="ancestor::tei:text/tei:front//tei:div">
        
<xsl:apply-templates mode="toc" select="(.)" />
      
</xsl:for-each>
    
</xsl:if>
    
<xsl:for-each select="ancestor::tei:text/tei:body//tei:div">
      
<xsl:apply-templates mode="toc" select="(.)" />
    
</xsl:for-each>
    
<xsl:if test="$tocBack='true'">
      
<xsl:for-each select="ancestor::tei:text/tei:back//tei:div">
        
<xsl:apply-templates mode="toc" select="(.)" />
      
</xsl:for-each>
    
</xsl:if>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="level">level</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="tocheading">
    
<xsl:param name="level" />
    
<xsl:variable name="tocindent">
      
<xsl:choose>
        
<xsl:when test="$level='0'">
          
<xsl:value-of select="$div0Tocindent" />
        
</xsl:when>
        
<xsl:when test="$level='1'">
          
<xsl:value-of select="$div1Tocindent" />
        
</xsl:when>
        
<xsl:when test="$level='2'">
          
<xsl:value-of select="$div2Tocindent" />
        
</xsl:when>
        
<xsl:when test="$level='3'">
          
<xsl:value-of select="$div3Tocindent" />
        
</xsl:when>
        
<xsl:when test="$level='4'">
          
<xsl:value-of select="$div4Tocindent" />
        
</xsl:when>
        
<xsl:when test="$level='5'">
          
<xsl:value-of select="$div5Tocindent" />
        
</xsl:when>
        
<xsl:otherwise>
          
<xsl:value-of select="$div1Tocindent" />
        
</xsl:otherwise>
      
</xsl:choose>
    
</xsl:variable>
    
<fo:block>
      
<xsl:if test="$level='0'">
        
<xsl:attribute name="font-weight">bold</xsl:attribute>
      
</xsl:if>
      
<xsl:attribute name="text-indent">
        
<xsl:value-of select="$tocindent" />
      
</xsl:attribute>
      
<xsl:variable name="Number">
        
<xsl:if test="$numberHeadings='true' and $numberHeadingsDepth &gt; $level">
          
<xsl:call-template name="calculateNumber">
            
<xsl:with-param name="numbersuffix" select="$tocNumberSuffix" />
          
</xsl:call-template>
        
</xsl:if>
      
</xsl:variable>
      
<xsl:value-of select="$Number" />
      
<xsl:text></xsl:text>
      
<fo:inline>
        
<xsl:apply-templates mode="section" select="tei:head" />
      
</fo:inline>
      
<fo:leader rule-thickness="0pt" />
      
<fo:inline>
        
<xsl:call-template name="linkStyle" />
        
<xsl:variable name="pagref">
          
<xsl:choose>
            
<xsl:when test="@xml:id">
              
<xsl:value-of select="@xml:id" />
            
</xsl:when>
            
<xsl:otherwise>
              
<xsl:value-of select="generate-id()" />
            
</xsl:otherwise>
          
</xsl:choose>
        
</xsl:variable>
        
<fo:basic-link internal-destination="{$pagref}">
          
<fo:page-number-citation ref-id="{$pagref}" />
        
</fo:basic-link>
      
</fo:inline>
    
</fo:block>
  
</xsl:template>
  
  <xd:doc>
    
<xd:short>[fo] </xd:short>
    
<xd:param name="level">level</xd:param>
    
<xd:detail> </xd:detail>
  
</xd:doc>

  
<xsl:template name="xheading">
    
<xsl:param name="level" />
    
<xsl:if test="$numberHeadings='true'">
      
<xsl:call-template name="calculateNumber" />
    
</xsl:if>
    
<xsl:call-template name="divXRefHeading" />
  
</xsl:template>
</xsl:stylesheet>






































v