<
xsl:
stylesheet xmlns:tei="
http://www.tei-c.org/ns/1.0"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
xmlns:edate="
http://exslt.org/dates-and-times"
xmlns:xd="
http://www.pnp-software.com/XSLTdoc"
extension-element-prefixes="
edate"
exclude-result-prefixes="
xd tei 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>
Sebastian Rahtz sebastian.rahtz@oucs.ox.ac.uk</
xd:
author>
<
xd:
cvsId>
$Id: linking.xsl,v 1.6 2005/11/15 14:32:44 rahtz Exp $</
xd:
cvsId>
<
xd:
copyright>
2005, 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" />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:anchor|tei:p</
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:biblStruct</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:biblStruct"
mode="
xref">
<
xsl:
choose>
<
xsl:
when test="
descendant::tei:author">
<
xsl:
apply-templates select="
descendant::tei:author[position()=1]"
mode="
first" />
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
apply-templates select="
descendant::tei:editor[position()=1]"
mode="
first" />
</
xsl:
otherwise>
</
xsl:
choose>
<
xsl:
choose>
<
xsl:
when test="
descendant::tei:title[@type='short']">
<
xsl:
apply-templates select="
descendant::tei:title[@type='short']" />
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
apply-templates select="
descendant::tei:title[@type='main'][1]" />
</
xsl:
otherwise>
</
xsl:
choose>
</
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:
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</
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">
false</
xd:
param>
<
xd:
param name="
toc">
toc</
xd:
param>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template name="
header">
<
xsl:
param name="
minimal">
false</
xsl:
param>
<
xsl:
param name="
toc" />
<
xsl:
variable name="
depth">
<
xsl:
apply-templates select="
."
mode="
depth" />
</
xsl:
variable>
<
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:
if test="
$minimal='false'">
<
xsl:
value-of select="
$numberSpacer" />
</
xsl:
if>
</
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:
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" />
</
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:
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:
otherwise>
<
xsl:
apply-templates mode="
plain"
select="
tei:head" />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
if>
</
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 of 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:
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