<
xsl:
stylesheet xmlns:tei="
http://www.tei-c.org/ns/1.0"
xmlns:estr="
http://exslt.org/strings"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
xmlns:edate="
http://exslt.org/dates-and-times"
xmlns:a="
http://relaxng.org/ns/compatibility/annotations/1.0"
xmlns:xd="
http://www.pnp-software.com/XSLTdoc"
xmlns:rng="
http://relaxng.org/ns/structure/1.0"
xmlns:exsl="
http://exslt.org/common"
xmlns:teix="
http://www.tei-c.org/ns/Examples"
extension-element-prefixes="
exsl estr edate"
exclude-result-prefixes="
xd exsl estr edate a rng tei teix"
version="
1.0">
<
xd:
doc type="
stylesheet">
<
xd:
short>
TEI stylesheet
dealing with elements from the
core module, making LaTeX 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>
Sebastian Rahtz sebastian.rahtz@oucs.ox.ac.uk</
xd:
author>
<
xd:
cvsId>
$Id: core.xsl,v 1.6 2006/01/17 20:37:19 rahtz Exp $</
xd:
cvsId>
<
xd:
copyright>
2005, TEI Consortium</
xd:
copyright>
</
xd:
doc>
<
xd:
doc>
<
xd:
short>
Process elements tei:ab</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:ab">
<
xsl:
apply-templates />
<
xsl:
if test="
following-sibling::tei:ab">
\par
</
xsl:
if>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:bibl</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:bibl"
mode="
cite">
<
xsl:
apply-templates select="
text()[1]" />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:bibl/tei:title</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:bibl/tei:title">
<
xsl:
if test="
preceding-sibling::tei:title">
</
xsl:
if>
<
xsl:
choose>
<
xsl:
when test="
@level='a'">
<
xsl:
text>
`</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
'</
xsl:
text>
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
text>
\textit{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:code</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:code">
\texttt{<
xsl:
apply-templates />
}</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:eg|tei:q[@rend='eg']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:eg|tei:q[@rend='eg']">
<
xsl:
choose>
<
xsl:
when test="
@n">
\begin{Verbatim}[numbers=left,label={<
xsl:
value-of select="
@n" />
}]
<
xsl:
apply-templates mode="
eg" />
\end{Verbatim}
</
xsl:
when>
<
xsl:
otherwise>
\begin{Verbatim}[frame=single,fillcolor=\color{yellow}]
<
xsl:
apply-templates mode="
eg" />
\end{Verbatim}
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:emph</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:emph">
\textit{<
xsl:
apply-templates />
}</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:foreign</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:foreign">
<
xsl:
text>
\textit{</
xsl:
text><
xsl:
apply-templates /><
xsl:
text>
}</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:gi</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:gi">
\texttt{<<
xsl:
apply-templates />
>}</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:head</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:head">
<
xsl:
choose>
<
xsl:
when test="
parent::tei:castList" />
<
xsl:
when test="
parent::tei:figure" />
<
xsl:
when test="
parent::tei:list" />
<
xsl:
when test="
parent::tei:lg">
\subsection*{<
xsl:
apply-templates />
}
</
xsl:
when>
<
xsl:
when test="
parent::tei:table" />
<
xsl:
when test="
parent::tei:div1[@type='letter']" />
<
xsl:
when test="
parent::tei:div[@type='letter']" />
<
xsl:
when test="
parent::tei:div[@type='bibliography']" />
<
xsl:
otherwise>
<
xsl:
variable name="
depth">
<
xsl:
apply-templates select="
.."
mode="
depth" />
</
xsl:
variable>
<
xsl:
text>
\Div</
xsl:
text>
<
xsl:
choose>
<
xsl:
when test="
$depth=0">
I</
xsl:
when>
<
xsl:
when test="
$depth=1">
II</
xsl:
when>
<
xsl:
when test="
$depth=2">
III</
xsl:
when>
<
xsl:
when test="
$depth=3">
IV</
xsl:
when>
<
xsl:
when test="
$depth=4">
V</
xsl:
when>
</
xsl:
choose>
<
xsl:
choose>
<
xsl:
when test="
ancestor::tei:q">
Star</
xsl:
when>
<
xsl:
when test="
ancestor::tei:back and $numberBackHeadings='false'">
Star</
xsl:
when>
<
xsl:
when test="
ancestor::tei:front and $numberFrontHeadings='false'">
Star</
xsl:
when>
</
xsl:
choose>
<
xsl:
call-template name="
sectionhead" />
<
xsl:
call-template name="
labelme" />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:hi</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:hi">
<
xsl:
call-template name="
rendering" />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Rendering rules, turning @rend into LaTeX commands</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template name="
rendering">
<
xsl:
variable name="
cmd">
<
xsl:
choose>
<
xsl:
when test="
@rend='bold'">
textbf</
xsl:
when>
<
xsl:
when test="
@rend='center'">
centerline</
xsl:
when>
<
xsl:
when test="
@rend='code'">
texttt</
xsl:
when>
<
xsl:
when test="
@rend='ital'">
textit</
xsl:
when>
<
xsl:
when test="
@rend='italic'">
textit</
xsl:
when>
<
xsl:
when test="
@rend='it'">
textit</
xsl:
when>
<
xsl:
when test="
@rend='italics'">
textit</
xsl:
when>
<
xsl:
when test="
@rend='i'">
textit</
xsl:
when>
<
xsl:
when test="
@rend='sc'">
textsc</
xsl:
when>
<
xsl:
when test="
@rend='plain'">
textrm</
xsl:
when>
<
xsl:
when test="
@rend='quoted'">
textquoted</
xsl:
when>
<
xsl:
when test="
@rend='sup'">
textsuperscript</
xsl:
when>
<
xsl:
when test="
@rend='sub'">
textsubscript</
xsl:
when>
<
xsl:
when test="
@rend='important'">
textbf</
xsl:
when>
<
xsl:
when test="
@rend='ul'">
uline</
xsl:
when>
<
xsl:
when test="
@rend='overbar'">
textoverbar</
xsl:
when>
<
xsl:
when test="
@rend='expanded'">
textsc</
xsl:
when>
<
xsl:
when test="
@rend='strike'">
sout</
xsl:
when>
<
xsl:
when test="
@rend='small'">
textsmall</
xsl:
when>
<
xsl:
when test="
@rend='large'">
textlarge</
xsl:
when>
<
xsl:
when test="
@rend='smaller'">
textsmaller</
xsl:
when>
<
xsl:
when test="
@rend='larger'">
textlarger</
xsl:
when>
<
xsl:
when test="
@rend='calligraphic'">
textcal</
xsl:
when>
<
xsl:
when test="
@rend='gothic'">
textgothic</
xsl:
when>
<
xsl:
when test="
@rend='noindex'">
textrm</
xsl:
when>
<
xsl:
otherwise>
textbf</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
variable>
<
xsl:
text>
\</
xsl:
text>
<
xsl:
value-of select="
$cmd" />
<
xsl:
text>
{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:hr</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:hr">
\hline
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:ident</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:ident">
<
xsl:
text>
\textsf{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:item</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:item">
\item<
xsl:
if test="
@n">
[<
xsl:
value-of select="
@n" />
]</
xsl:
if>
<
xsl:
text>
</
xsl:
text>
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:item</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template mode="
gloss"
match="
tei:item">
\item[<
xsl:
apply-templates mode="
print"
select="
preceding-sibling::tei:*[1]" />
]
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:label</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:label" />
<
xd:
doc>
<
xd:
short>
Process elements tei:lb</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:lb">
<
xsl:
text>
{ }\newline </
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:list</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:list">
<
xsl:
if test="
tei:head">
\centerline{<
xsl:
for-each select="
tei:head"><
xsl:
apply-templates /></
xsl:
for-each>
}
</
xsl:
if>
<
xsl:
choose>
<
xsl:
when test="
not(tei:item)" />
<
xsl:
when test="
@type='gloss'">
\begin{description}<
xsl:
apply-templates mode="
gloss"
select="
tei:item" />
\end{description}
</
xsl:
when>
<
xsl:
when test="
@type='unordered'">
\begin{itemize}<
xsl:
apply-templates />
\end{itemize}
</
xsl:
when>
<
xsl:
when test="
@type='ordered'">
\begin{enumerate}<
xsl:
apply-templates />
\end{enumerate}
</
xsl:
when>
<
xsl:
when test="
@type='runin'">
<
xsl:
apply-templates select="
tei:item"
mode="
runin" />
</
xsl:
when>
<
xsl:
otherwise>
\begin{itemize}<
xsl:
apply-templates />
\end{itemize}
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:listBibl</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:listBibl">
\begin{bibitemlist}{1}
<
xsl:
apply-templates />
\end{bibitemlist}
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:listBibl/tei:bibl</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:listBibl/tei:bibl">
\bibitem {<
xsl:
choose><
xsl:
when test="
@xml:id">
<
xsl:
value-of select="
@xml:id" /></
xsl:
when>
<
xsl:
otherwise>
bibitem-<
xsl:
number /></
xsl:
otherwise>
</
xsl:
choose>
}
<
xsl:
apply-templates />
<
xsl:
text>
</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:mentioned</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:mentioned">
<
xsl:
text>
\emph{</
xsl:
text><
xsl:
apply-templates /><
xsl:
text>
}</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:note</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:note">
<
xsl:
if test="
@xml:id">
\hypertarget{<
xsl:
value-of select="
@xml:id" />
}{}</
xsl:
if>
<
xsl:
choose>
<
xsl:
when test="
@place='end'">
<
xsl:
text>
\endnote{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
when>
<
xsl:
when test="
@target">
<
xsl:
text>
\footnotetext{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
text>
\footnote{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:p</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:p">
\par
<
xsl:
apply-templates /></
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process element tei:pb</
xd:
short>
<
xd:
detail>
Indication of a page break. We make it an anchor if it has an ID.</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:pb">
<
xsl:
choose>
<
xsl:
when test="
$pagebreakStyle='active'">
<
xsl:
text>
\clearpage </
xsl:
text>
</
xsl:
when>
<
xsl:
when test="
$pagebreakStyle='visible'">
<
xsl:
text>
✁[</
xsl:
text>
<
xsl:
value-of select="
@unit" />
<
xsl:
text>
Page </
xsl:
text>
<
xsl:
value-of select="
@n" />
<
xsl:
text>
]✁</
xsl:
text>
</
xsl:
when>
<
xsl:
otherwise>
</
xsl:
otherwise>
</
xsl:
choose>
<
xsl:
if test="
@xml:id">
<
xsl:
text>
\hypertarget{</
xsl:
text>
<
xsl:
value-of select="
@xml:id" />
<
xsl:
text>
}{}</
xsl:
text>
</
xsl:
if>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:q</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:q">
<
xsl:
choose>
<
xsl:
when test="
tei:p">
\begin{quote}<
xsl:
apply-templates />
\end{quote}
</
xsl:
when>
<
xsl:
when test="
tei:text">
<
xsl:
apply-templates />
</
xsl:
when>
<
xsl:
when test="
tei:lg">
\begin{quote}<
xsl:
apply-templates />
\end{quote}
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
variable name="
pre">
<
xsl:
choose>
<
xsl:
when test="
contains(@rend,'PRE')">
<
xsl:
choose>
<
xsl:
when test="
contains(@rend,'POST')">
<
xsl:
call-template name="
getQuote">
<
xsl:
with-param name="
quote"
select="
normalize-space(substring-before(substring-after(@rend,'PRE'),'POST'))" />
</
xsl:
call-template>
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
call-template name="
getQuote">
<
xsl:
with-param name="
quote"
select="
normalize-space(substring-after(@rend,'PRE'))" />
</
xsl:
call-template>
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
value-of select="
$preQuote" />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
variable>
<
xsl:
variable name="
post">
<
xsl:
choose>
<
xsl:
when test="
contains(@rend,'POST')">
<
xsl:
call-template name="
getQuote">
<
xsl:
with-param name="
quote"
select="
normalize-space(substring-after(@rend,'POST'))" />
</
xsl:
call-template>
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
value-of select="
$postQuote" />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
variable>
<
xsl:
value-of select="
$pre" />
<
xsl:
apply-templates />
<
xsl:
value-of select="
$post" />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements p[@rend='display']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:p[@rend='display']">
\begin{quote}
<
xsl:
apply-templates />
\end{quote}
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements q[@rend='display']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:q[@rend='display']">
\begin{quote}
<
xsl:
apply-templates />
\end{quote}
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:soCalled</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:soCalled">
<
xsl:
text>
‘</
xsl:
text><
xsl:
apply-templates /><
xsl:
text>
’</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:titlePart</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:titlePart">
<
xsl:
if test="
ancestor::tei:group">
\part{<
xsl:
apply-templates />
}
</
xsl:
if>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:title[@level='a']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:title[@level='a']">
<
xsl:
text>
``</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
''</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:title[@level='m']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:title[@level='m']">
<
xsl:
text>
\textit{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:title[@level='s']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:title[@level='s']">
<
xsl:
text>
\textit{</
xsl:
text>
<
xsl:
apply-templates />
<
xsl:
text>
}</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:xref[@type='cite']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:xref[@type='cite']">
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process text(), escaping the LaTeX command characters.</
xd:
short>
<
xd:
detail>
We need the backslash and two curly braces to insert
LaTeX commands into the output, so these characters need to
replaced when they are found in running text. They are translated
to Unicode COMBINING REVERSE SOLIDUS OVERLAY, MEDIUM LEFT CURLY BRACKET
ORNAMENT and MEDIUM RIGHT CURLY BRACKET ORNAMENT; if these are
used in real text, the escape will have to be changed. They are
translated back to the correct characters by appropriate
definitions in the preamble (see the template for TEI in textstructure.xsl).</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
text()">
<
xsl:
value-of select="
translate(.,'\{}','⃥❴❵')" />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements text()</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
text()"
mode="
eg">
<
xsl:
choose>
<
xsl:
when test="
starts-with(.,' ')">
<
xsl:
value-of select="
substring-after(.,' ')" />
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
value-of select="
." />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
[latex] </
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template name="
bibliography">
<
xsl:
apply-templates select="
//tei:xref[@type='cite'] | //tei:xptr[@type='cite'] | //tei:ref[@type='cite'] | //tei:ptr[@type='cite']"
mode="
biblio" />
</
xsl:
template>
</
xsl:
stylesheet>
v