<
xsl:
stylesheet 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"
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
textstructure 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>
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:TEI</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:TEI">
<
xsl:
if test="
not($realFigures='true')">
<
xsl:
text>
%BEGINFIGMAP</
xsl:
text>
<
xsl:
if test="
not($latexLogo='')">
<
xsl:
text>
%FIGMAP </
xsl:
text>
<
xsl:
value-of select="
$latexLogo" />
<
xsl:
text>
FIG0 </
xsl:
text>
</
xsl:
if>
<
xsl:
for-each select="
//tei:figure">
<
xsl:
variable name="
c">
<
xsl:
number level="
any" />
</
xsl:
variable>
<
xsl:
text>
%FIGMAP </
xsl:
text>
<
xsl:
variable name="
f">
<
xsl:
choose>
<
xsl:
when test="
@url">
<
xsl:
value-of select="
@url" />
</
xsl:
when>
<
xsl:
when test="
@entity">
<
xsl:
value-of select="
unparsed-entity-uri(@entity)" />
</
xsl:
when>
<
xsl:
when test="
tei:graphic">
<
xsl:
value-of select="
tei:graphic/@url" />
</
xsl:
when>
</
xsl:
choose>
</
xsl:
variable>
<
xsl:
choose>
<
xsl:
when test="
contains($f,'.')">
<
xsl:
value-of select="
$f" />
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
value-of select="
concat($f,'.png')" />
</
xsl:
otherwise>
</
xsl:
choose>
<
xsl:
text>
FIG</
xsl:
text>
<
xsl:
value-of select="
$c + 1000" />
<
xsl:
text>
</
xsl:
text>
</
xsl:
for-each>
<
xsl:
text>
%ENDFIGMAP
</
xsl:
text>
</
xsl:
if>
<
xsl:
text>
\documentclass[</
xsl:
text>
<
xsl:
value-of select="
$classParameters" />
<
xsl:
text>
]{</
xsl:
text>
<
xsl:
value-of select="
$docClass" />
<
xsl:
text>
}</
xsl:
text>
<
xsl:
text>
\makeatletter
</
xsl:
text>
<
xsl:
call-template name="
latexSetup" />
<
xsl:
call-template name="
latexPackages" />
<
xsl:
call-template name="
latexLayout" />
<
xsl:
text>
\@ifundefined{chapter}{%
\def\DivI{\section}
\def\DivII{\subsection}
\def\DivIII{\subsubsection}
\def\DivIV{\paragraph}
\def\DivV{\subparagraph}
\def\DivIStar[#1]#2{\section*{#2}}
\def\DivIIStar[#1]#2{\subsection*{#2}}
\def\DivIIIStar[#1]#2{\subsubsection*{#2}}
\def\DivIVStar[#1]#2{\paragraph*{#2}}
\def\DivVStar[#1]#2{\subparagraph*{#2}}
}{%
\def\DivI{\chapter}
\def\DivII{\section}
\def\DivIII{\subsection}
\def\DivIV{\subsubsection}
\def\DivV{\paragraph}
\def\DivIStar[#1]#2{\chapter*{#2}}
\def\DivIIStar[#1]#2{\section*{#2}}
\def\DivIIIStar[#1]#2{\subsection*{#2}}
\def\DivIVStar[#1]#2{\subsubsection*{#2}}
\def\DivVStar[#1]#2{\paragraph*{#2}}
}
\makeatother
\def\TheFullDate{</
xsl:
text>
<
xsl:
call-template name="
generateDate" />
<
xsl:
variable name="
revdate">
<
xsl:
call-template name="
generateRevDate" />
</
xsl:
variable>
<
xsl:
if test="
not($revdate='')">
<
xsl:
text>
(</
xsl:
text>
<
xsl:
call-template name="
i18n">
<
xsl:
with-param name="
word">
revisedWord</
xsl:
with-param>
</
xsl:
call-template>
:
<
xsl:
value-of select="
$revdate" />
<
xsl:
text>
)</
xsl:
text>
</
xsl:
if>
<
xsl:
text>
}
\def\TheID{</
xsl:
text>
<
xsl:
choose>
<
xsl:
when test="
not($REQUEST='')">
<
xsl:
value-of select="
not($REQUEST='')" />
</
xsl:
when>
<
xsl:
when test="
ancestor-or-self::tei:TEI/tei:teiHeader/tei:fileDesc/tei:publicationStmt/tei:idno">
<
xsl:
value-of select="
ancestor-or-self::tei:TEI/tei:teiHeader/tei:fileDesc/tei:publicationStmt/tei:idno" />
</
xsl:
when>
</
xsl:
choose>
<
xsl:
text>
}
\def\TheDate{</
xsl:
text>
<
xsl:
call-template name="
generateDate" />
<
xsl:
text>
}
\title{</
xsl:
text>
<
xsl:
call-template name="
generateTitle" />
<
xsl:
text>
}
\author{</
xsl:
text>
<
xsl:
call-template name="
generateAuthor" />
<
xsl:
text>
}
\begin{document}
</
xsl:
text>
<
xsl:
call-template name="
latexBegin" />
<!---->
<
xsl:
text disable-output-escaping="
yes">
\catcode`\$=12\relax
\catcode`\^=12\relax
\catcode`\~=12\relax
\catcode`\#=12\relax
\catcode`\%=12\relax
</
xsl:
text>
<
xsl:
text disable-output-escaping="
yes">
\let\tabcellsep&
\catcode`\&=12\relax </
xsl:
text>
<
xsl:
apply-templates select="
tei:text" />
<
xsl:
call-template name="
latexEnd" />
<
xsl:
text>
\end{document}
</
xsl:
text>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:back</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:back">
<
xsl:
if test="
not(preceding::tei:back)">
<
xsl:
text>
\backmatter </
xsl:
text>
</
xsl:
if>
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:body</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:body">
<
xsl:
if test="
not(preceding::tei:body) and preceding::tei:front">
<
xsl:
text>
\mainmatter </
xsl:
text>
</
xsl:
if>
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:body in inner mode</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:body|tei:back|tei:front"
mode="
innertext">
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:closer</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:closer">
\begin{quote}<
xsl:
apply-templates />
\end{quote}
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:dateline</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:dateline">
\rightline{<
xsl:
apply-templates />
}
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process the tei:div elements</
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:
text>
\subsection*{</
xsl:
text>
<
xsl:
for-each select="
tei:head">
<
xsl:
apply-templates />
</
xsl:
for-each>
<
xsl:
text>
}</
xsl:
text>
<
xsl:
apply-templates />
</
xsl:
when>
<
xsl:
when test="
@type='bibliography'">
\begin{thebibliography}{1}
<
xsl:
call-template name="
bibliography" />
\end{thebibliography}
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
apply-templates />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:divGen[@type='toc']</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:divGen[@type='toc']">
\tableofcontents
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:front</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:front">
<
xsl:
if test="
not(preceding::tei:front)">
<
xsl:
text>
\frontmatter </
xsl:
text>
</
xsl:
if>
<
xsl:
apply-templates />
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:opener</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:opener">
\begin{quote}<
xsl:
apply-templates />
\end{quote}
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:l</
xd:
short>
<
xd:
detail>
If verseNumbering is requested,
counts all the verse lines since the last container (<
gi>
div1</
gi>
by
default) and labels every fifth verse using a LaTeX box 3 ems wide.
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:l">
<
xsl:
choose>
<
xsl:
when test="
$verseNumbering='true'">
<
xsl:
variable name="
id"
select="
generate-id()" />
<
xsl:
variable name="
pos">
<
xsl:
for-each select="
ancestor::*[name()=$resetVerseLineNumbering]//l">
<
xsl:
if test="
generate-id()=$id">
<
xsl:
value-of select="
position()" />
</
xsl:
if>
</
xsl:
for-each>
</
xsl:
variable>
<
xsl:
choose>
<
xsl:
when test="
$pos mod $everyHowManyLines = 0">
<
xsl:
text>
\leftline{\makebox[3em][r]{</
xsl:
text><
xsl:
value-of select="
$pos" /><
xsl:
text>
}\quad{}</
xsl:
text>
<
xsl:
apply-templates /><
xsl:
text>
}</
xsl:
text>
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
text>
\leftline{\makebox[3em][r]{}\quad{}</
xsl:
text>
<
xsl:
apply-templates /><
xsl:
text>
}</
xsl:
text>
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
when>
<
xsl:
when test="
ancestor::tei:quote">
<
xsl:
apply-templates />
\\
</
xsl:
when>
<
xsl:
otherwise>
\leftline{<
xsl:
apply-templates />
}
</
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>
\par
\hrule
\begin{quote}
\begin{small}
<
xsl:
apply-templates mode="
innertext" />
\end{small}
\end{quote}
\hrule
\par
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
Process elements tei:titlePage</
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template match="
tei:titlePage">
\begin{titlepage}
<
xsl:
apply-templates />
\maketitle
\end{titlepage}
\cleardoublepage
</
xsl:
template>
<
xd:
doc>
<
xd:
short>
[latex] </
xd:
short>
<
xd:
detail>
</
xd:
detail>
</
xd:
doc>
<
xsl:
template name="
generateSimpleTitle">
<
xsl:
choose>
<
xsl:
when test="
$useHeaderFrontMatter='true' and ancestor-or-self::tei:TEI/tei:text/tei:front//tei:docTitle">
<
xsl:
value-of select="
normalize-space(ancestor-or-self::tei:TEI/tei:text/tei:front//tei:docTitle)" />
</
xsl:
when>
<
xsl:
otherwise>
<
xsl:
value-of select="
normalize-space(ancestor-or-self::tei:TEI/tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title)" />
</
xsl:
otherwise>
</
xsl:
choose>
</
xsl:
template>
</
xsl:
stylesheet>
v