<
xsl:
stylesheet xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
 xmlns:xd="
http://www.pnp-software.com/XSLTdoc"
 xmlns:tei="
http://www.tei-c.org/ns/1.0"
 xmlns:edate="
http://exslt.org/dates-and-times" 
exclude-result-prefixes="
xd tei edate" 
extension-element-prefixes="
edate" 
version="
1.0">
  
  <
xd:
doc type="
stylesheet">
    <
xd:
short>
 TEI stylesheet dealing with elements from the linking module. </
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: linking.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 tei:TEI</
xd:
short>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:TEI" 
mode="
xref">
    <
xsl:
apply-templates select="
tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title[1]" />
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
Process elements tei:anchor|tei:p in xref mode</
xd:
short>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:anchor|tei:p" 
mode="
xref">
    <
xsl:
text>
here</
xsl:
text>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
Process elements tei:bibl</
xd:
short>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:bibl" 
mode="
xref">
    <
xsl:
text>
[</
xsl:
text>
    <
xsl:
number />
    <
xsl:
text>
]</
xsl:
text>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
Process elements
      tei:div|tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5|tei:div6 in
      xref mode</
xd:
short>
    <
xd:
param name="
minimal">
whether to make a link with just numbers or with
      text too</
xd:
param>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:div|tei:div0|tei:div1|tei:div2|tei:div3|tei:div4|tei:div5|tei:div6" 
mode="
xref">
    <
xsl:
param name="
minimal">
false</
xsl:
param>
    <
xsl:
call-template name="
header">
      <
xsl:
with-param name="
minimal" 
select="
$minimal" />
      <
xsl:
with-param name="
display">
plain</
xsl:
with-param>
    </
xsl:
call-template>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
Process elements tei:note</
xd:
short>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:note" 
mode="
xref">
    <
xsl:
number level="
any" />
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
Process elements tei:ptr|tei:xptr in xref mode</
xd:
short>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:ptr|tei:xptr">
    <
xsl:
call-template name="
makeTEILink">
      <
xsl:
with-param name="
ptr">
true</
xsl:
with-param>
    </
xsl:
call-template>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
Process elements tei:ref|tei:xref</
xd:
short>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template match="
tei:ref|tei:xref">
    <
xsl:
call-template name="
makeTEILink">
      <
xsl:
with-param name="
ptr">
false</
xsl:
with-param>
    </
xsl:
call-template>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
[common] Making a heading for something</
xd:
short>
    <
xd:
param name="
minimal">
whether to display headings</
xd:
param>
    <
xd:
param name="
toc">
whether this is making a TOC entry</
xd:
param>
    <
xd:
param name="
display">
detail of display (full, simple, plain), ie
    whether markup is followed</
xd:
param>
    <
xd:
detail>
 </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template name="
header">
    <
xsl:
param name="
minimal">
false</
xsl:
param>
    <
xsl:
param name="
toc" />
    <
xsl:
param name="
display">
full</
xsl:
param>
    <
xsl:
variable name="
depth">
      <
xsl:
apply-templates mode="
depth" 
select="
." />
    </
xsl:
variable>
    <
xsl:
call-template name="
formatHeadingNumber">
      <
xsl:
with-param name="
toc">
        <
xsl:
value-of select="
$toc" />
      </
xsl:
with-param>
      <
xsl:
with-param name="
text">
    <
xsl:
choose>
      <
xsl:
when test="
local-name(.) = 'TEI'" />
      <
xsl:
when test="
local-name(.) = 'TEI.2'" />
      <
xsl:
when test="
$depth > $numberHeadingsDepth">
 </
xsl:
when>
      <
xsl:
when test="
ancestor::tei:back">
        <
xsl:
if test="
not($numberBackHeadings='')">
          <
xsl:
call-template name="
i18n">
            <
xsl:
with-param name="
word">
appendixWords</
xsl:
with-param>
          </
xsl:
call-template>
          <
xsl:
text>
 </
xsl:
text>
          <
xsl:
call-template name="
numberBackDiv" />
          <
xsl:
if test="
$minimal='false'">
            <
xsl:
value-of select="
$numberSpacer" />
          </
xsl:
if>
        </
xsl:
if>
      </
xsl:
when>
      <
xsl:
when test="
ancestor::tei:front">
        <
xsl:
if test="
not($numberFrontHeadings='')">
          <
xsl:
call-template name="
numberFrontDiv">
            <
xsl:
with-param name="
minimal">
              <
xsl:
value-of select="
$minimal" />
            </
xsl:
with-param>
          </
xsl:
call-template>
        </
xsl:
if>
      </
xsl:
when>
      <
xsl:
when test="
$numberHeadings ='true'">
        <
xsl:
choose>
          <
xsl:
when test="
$prenumberedHeadings='true'">
            <
xsl:
value-of select="
@n" />
          </
xsl:
when>
          <
xsl:
otherwise>
            <
xsl:
call-template name="
numberBodyDiv" />
          </
xsl:
otherwise>
        </
xsl:
choose>
        <
xsl:
if test="
$minimal='false'">
          <
xsl:
value-of select="
$headingNumberSuffix" />
        </
xsl:
if>
      </
xsl:
when>
    </
xsl:
choose>
      </
xsl:
with-param>
    </
xsl:
call-template>
    <
xsl:
if test="
$minimal='false'">
      <
xsl:
choose>
        <
xsl:
when test="
local-name(.) = 'TEI' or local-name(.)='TEI.2'">
          <
xsl:
apply-templates select="
tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title[1]" />
        </
xsl:
when>
        <
xsl:
when test="
not(tei:head) and @n">
          <
xsl:
value-of select="
@n" />
        </
xsl:
when>
        <
xsl:
when test="
not($toc='')">
          <
xsl:
call-template name="
makeInternalLink">
            <
xsl:
with-param name="
dest">
              <
xsl:
value-of select="
$toc" />
            </
xsl:
with-param>
            <
xsl:
with-param name="
class">
              <
xsl:
value-of select="
$class_toc" />
              <
xsl:
text>
 </
xsl:
text>
              <
xsl:
value-of select="
concat($class_toc,'_',$depth)" />
            </
xsl:
with-param>
            <
xsl:
with-param name="
body">
              <
xsl:
choose>
                <
xsl:
when test="
$autoHead='true'">
                  <
xsl:
call-template name="
autoMakeHead" />
                </
xsl:
when>
                <
xsl:
otherwise>
                     <
xsl:
apply-templates mode="
plain" 
select="
tei:head" />
                </
xsl:
otherwise>
              </
xsl:
choose>
            </
xsl:
with-param>
          </
xsl:
call-template>
        </
xsl:
when>
        <
xsl:
when test="
$autoHead='true'">
          <
xsl:
call-template name="
autoMakeHead" />
        </
xsl:
when>
        <
xsl:
when test="
$display='plain'">
          <
xsl:
apply-templates mode="
plain" 
select="
tei:head" />
          <!---->
        </
xsl:
when>
        <
xsl:
when test="
$display='simple'">
          <
xsl:
apply-templates mode="
plain" 
select="
tei:head" />
          <!---->
        </
xsl:
when>
        <
xsl:
otherwise>
          <
xsl:
for-each select="
tei:head">
            <
xsl:
apply-templates />
            <
lb />
          </
xsl:
for-each>
        </
xsl:
otherwise>
      </
xsl:
choose>
    </
xsl:
if>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
[common] processing the number portion of a heading</
xd:
short>
    <
xd:
param name="
text" />
    <
xd:
detail>
By default, the text is printed as is. You may
    wish to colour it, align it, etc</
xd:
detail>
  </
xd:
doc>
  <
xsl:
template name="
formatHeadingNumber">
      <
xsl:
param name="
text" />
      <
xsl:
param name="
toc" />
      <
xsl:
copy-of select="
$text" />
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
[common] Making a heading for something, and making sure it has
      contents</
xd:
short>
    <
xd:
param name="
minimal">
false</
xd:
param>
    <
xd:
detail>
This is a wrapper around the "header" template which ensures that
      some text is returned; if all else fails, the element name is
    used.</
xd:
detail>
  </
xd:
doc>
  <
xsl:
template name="
headerLink">
    <
xsl:
param name="
minimal">
false</
xsl:
param>
    <
xsl:
variable name="
Text">
      <
xsl:
call-template name="
header">
        <
xsl:
with-param name="
minimal" 
select="
$minimalCrossRef" />
        <
xsl:
with-param name="
display">
plain</
xsl:
with-param>
      </
xsl:
call-template>
    </
xsl:
variable>
    <
xsl:
choose>
      <
xsl:
when test="
$Text=''">
        <
xsl:
text>
<</
xsl:
text>
        <
xsl:
value-of select="
local-name(.)" />
        <
xsl:
text>
></
xsl:
text>
      </
xsl:
when>
      <
xsl:
otherwise>
        <
xsl:
copy-of select="
$Text" />
      </
xsl:
otherwise>
    </
xsl:
choose>
  </
xsl:
template>
  
  <
xd:
doc>
    <
xd:
short>
[common] Make a hypertext link</
xd:
short>
    <
xd:
param name="
ptr">
ptr</
xd:
param>
    <
xd:
detail>
      <
p>
 cross-referencing </
p>
    </
xd:
detail>
  </
xd:
doc>
  <
xsl:
template name="
makeTEILink">
    <
xsl:
param name="
ptr" />
    <!---->
    <
xsl:
choose>
      <!---->
      <
xsl:
when test="
@target and starts-with(@target,'#')">
        <
xsl:
call-template name="
makeInternalLink">
          <
xsl:
with-param name="
target" 
select="
substring-after(@target,'#')" />
          <
xsl:
with-param name="
ptr" 
select="
$ptr" />
          <
xsl:
with-param name="
dest">
            <
xsl:
call-template name="
generateEndLink">
              <
xsl:
with-param name="
where">
                <
xsl:
value-of select="
substring-after(@target,'#')" />
              </
xsl:
with-param>
            </
xsl:
call-template>
          </
xsl:
with-param>
        </
xsl:
call-template>
      </
xsl:
when>
      <!---->
      <
xsl:
when test="
@target and $teiP4Compat='true'">
        <
xsl:
call-template name="
makeInternalLink">
          <
xsl:
with-param name="
target" 
select="
@target" />
          <
xsl:
with-param name="
ptr" 
select="
$ptr" />
          <
xsl:
with-param name="
dest">
            <
xsl:
call-template name="
generateEndLink">
              <
xsl:
with-param name="
where">
                <
xsl:
value-of select="
@target" />
              </
xsl:
with-param>
            </
xsl:
call-template>
          </
xsl:
with-param>
        </
xsl:
call-template>
      </
xsl:
when>
      <!---->
      <
xsl:
when test="
@target">
        <
xsl:
call-template name="
makeExternalLink">
          <
xsl:
with-param name="
ptr" 
select="
$ptr" />
          <
xsl:
with-param name="
dest">
            <
xsl:
value-of select="
@target" />
          </
xsl:
with-param>
        </
xsl:
call-template>
      </
xsl:
when>
      <!---->
      <
xsl:
when test="
@url and starts-with(@url,'#')">
        <
xsl:
call-template name="
makeInternalLink">
          <
xsl:
with-param name="
target" 
select="
substring-after(@url,'#')" />
          <
xsl:
with-param name="
ptr" 
select="
$ptr" />
          <
xsl:
with-param name="
dest">
            <
xsl:
call-template name="
generateEndLink">
              <
xsl:
with-param name="
where">
                <
xsl:
value-of select="
substring-after(@url,'#')" />
              </
xsl:
with-param>
            </
xsl:
call-template>
          </
xsl:
with-param>
        </
xsl:
call-template>
      </
xsl:
when>
      <!---->
      <
xsl:
when test="
@url">
        <
xsl:
call-template name="
makeExternalLink">
          <
xsl:
with-param name="
ptr" 
select="
$ptr" />
          <
xsl:
with-param name="
dest">
            <
xsl:
value-of select="
@url" />
          </
xsl:
with-param>
        </
xsl:
call-template>
      </
xsl:
when>
      <!---->
      <
xsl:
when test="
@doc">
        <
xsl:
call-template name="
makeExternalLink">
          <
xsl:
with-param name="
ptr" 
select="
$ptr" />
          <
xsl:
with-param name="
dest">
            <
xsl:
value-of select="
unparsed-entity-uri(@doc)" />
          </
xsl:
with-param>
        </
xsl:
call-template>
      </
xsl:
when>
      <
xsl:
otherwise>
        <!---->
        <
xsl:
apply-templates />
      </
xsl:
otherwise>
    </
xsl:
choose>
  </
xsl:
template>
</
xsl:
stylesheet>
 
v