Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
XSL for TEI to EOATeX conversion
- Loading branch information
Klaus Thoden
committed
May 29, 2018
1 parent
60bee92
commit 4274de2
Showing
1 changed file
with
341 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Original file line | Diff line number | Diff line change |
---|---|---|---|
@@ -0,0 +1,341 @@ | |||
<?xml version="1.0"?> | |||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" | |||
xmlns:tei="http://www.tei-c.org/ns/1.0" | |||
xmlns:xs="http://www.w3.org/2001/XMLSchema" | |||
xmlns:xlink="http://www.w3.org/1999/xlink" | |||
exclude-result-prefixes="xs tei" | |||
version="2.0"> | |||
|
|||
<xsl:output method="text" encoding="UTF-8"/> | |||
<xsl:strip-space elements="*"/> | |||
<!-- | |||
make: | |||
- formatting of several authors | |||
- some fields could contain markup, this is currently ignored | |||
--> | |||
|
|||
<xsl:template match="*"> | |||
<!-- | |||
catchall template | |||
https://stackoverflow.com/questions/3360017/why-does-xslt-output-all-text-by-default | |||
--> | |||
<xsl:message terminate="no">WARNING: Unmatched element: <xsl:value-of select="name()"/></xsl:message> | |||
<xsl:apply-templates/> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:teiHeader/tei:fileDesc/tei:sourceDesc/tei:ab[@type='bibliography']/tei:ref"> | |||
<xsl:text>\EOAbibliographytype{</xsl:text> | |||
<xsl:value-of select="@type"/> | |||
<xsl:text>}
</xsl:text> | |||
<xsl:text>\EOAbibliographydatabase{</xsl:text> | |||
<xsl:value-of select="@target"/> | |||
<xsl:text>}
</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title[@level='s']"> | |||
<xsl:text>\input{preambel/pre_eoa}
</xsl:text> | |||
<xsl:text>\EOAseries{</xsl:text> | |||
<xsl:value-of select="."/> | |||
<xsl:text>}
</xsl:text> | |||
</xsl:template> | |||
|
|||
<!-- ignore some header fields --> | |||
<xsl:template match="//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:author|tei:editor|tei:resp|tei:persName"/> | |||
<xsl:template match="//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title[@type='main']"/> | |||
<xsl:template match="//tei:teiHeader/tei:fileDesc/tei:editionStmt|tei:publicationStmt"/> | |||
<xsl:template match="//tei:teiHeader/tei:fileDesc/tei:sourceDesc/tei:p"/> | |||
<xsl:template match="//tei:teiHeader/tei:encodingDesc|tei:profileDesc|tei:revisionDesc"/> | |||
|
|||
<xsl:template match="tei:body//tei:p[not(ancestor::tei:note)]"> | |||
<xsl:choose> | |||
<xsl:when test="@rend='Quote'"> | |||
<xsl:text>\begin{EOAquote}</xsl:text> | |||
<xsl:apply-templates/> | |||
<xsl:text>\end{EOAquote}</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>

</xsl:text> | |||
<xsl:apply-templates /> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</xsl:template> | |||
|
|||
<xsl:template match="tei:body"> | |||
<xsl:text>
\begin{document}
\EOAtoc
\newpage
%beginning of chapter
</xsl:text> | |||
<xsl:apply-templates /> | |||
<xsl:text>% end of chapter
\end{document}
</xsl:text> | |||
</xsl:template> | |||
<!-- | |||
<xsl:template match="interview"> | |||
<xsl:text>\section{Interview mit </xsl:text> | |||
<xsl:value-of select="@pseudonym"/> | |||
<xsl:text>}
</xsl:text> | |||
<xsl:text>\begin{tabular}{l l}
\textbf{Pseudonym:} &</xsl:text> | |||
<xsl:value-of select="@pseudonym"/> | |||
<xsl:text>\\
\textbf{ID:} &</xsl:text> | |||
<xsl:value-of select="@code"/> | |||
<xsl:text>\\
\textbf{Datum:} &</xsl:text> | |||
<xsl:value-of select="@datum"/> | |||
<xsl:text>\\
\textbf{Zeit:} &</xsl:text> | |||
<xsl:value-of select="@anfang"/><xsl:text> – </xsl:text><xsl:value-of select="@ende"/> | |||
<xsl:text>\\
\textbf{Dauer:} &</xsl:text> | |||
<xsl:value-of select="@dauer"/> | |||
<xsl:choose> | |||
<xsl:when test="@bemerkungen=''"> | |||
<xsl:message>No Bemerkung</xsl:message> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>\\
\textbf{Bemerkungen:} &</xsl:text> | |||
<xsl:value-of select="@bemerkungen"/> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>
\end{tabular}
\begin{center}
\line(1,0){250}
\end{center}
</xsl:text> | |||
<xsl:text>\resetlinenumber
\begin{linenumbers}</xsl:text> | |||
<xsl:apply-templates /> | |||
<xsl:text>
\end{linenumbers}</xsl:text> | |||
</xsl:template> | |||
--> | |||
|
|||
<xsl:template match="//tei:hi[@rend='italic']"> | |||
<xsl:text>\EOAemph{</xsl:text> | |||
<xsl:apply-templates /> | |||
<xsl:text>}</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:div[@type='chapter']/tei:head"> | |||
<xsl:text>\EOAchapter</xsl:text> | |||
<xsl:choose> | |||
<xsl:when test="../@rend='nonumber'"> | |||
<xsl:text>nonumber</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:message>INFO: Section has number</xsl:message> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>{</xsl:text> | |||
<xsl:apply-templates /> | |||
<xsl:text>}</xsl:text> | |||
<xsl:text>{</xsl:text> | |||
<xsl:apply-templates /> | |||
<xsl:choose> | |||
<xsl:when test="not(../@resp)"> | |||
<xsl:message>INFO: No chapter author.</xsl:message> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<!-- needs formatting of several authors --> | |||
<xsl:variable name="authorid" select="substring-after(../@resp, '#')"/> | |||
<xsl:text>\EOAauthor{</xsl:text> | |||
<xsl:value-of select="concat(//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:respStmt[@xml:id=$authorid]/tei:persName/tei:forename, ' ', //tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:respStmt[@xml:id=$authorid]/tei:persName/tei:surname)"/> | |||
<xsl:text>}</xsl:text> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>}</xsl:text> | |||
|
|||
<xsl:choose> | |||
<xsl:when test="not(../@xml:id)"> | |||
<xsl:message>INFO: Chapter has not ID</xsl:message> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>\EOAlabel{</xsl:text> | |||
<xsl:value-of select="../@xml:id"/> | |||
<xsl:text>}
</xsl:text> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:div[not(@type='chapter')]/tei:head"> | |||
<xsl:choose> | |||
<xsl:when test="../@type='part'"> | |||
<xsl:text>\EOApart</xsl:text> | |||
</xsl:when> | |||
<xsl:when test="../@type='section'"> | |||
<xsl:text>

\EOAsection</xsl:text> | |||
</xsl:when> | |||
<xsl:when test="../@type='subsection'"> | |||
<xsl:text>

\EOAsubsection</xsl:text> | |||
</xsl:when> | |||
<xsl:when test="../@type='subsubsection'"> | |||
<xsl:text>

\EOAsubsubsection</xsl:text> | |||
</xsl:when> | |||
</xsl:choose> | |||
<xsl:choose> | |||
<xsl:when test="../@rend='nonumber'"> | |||
<xsl:text>nonumber</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:message>INFO: Section has number</xsl:message> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>{</xsl:text> | |||
<xsl:apply-templates /> | |||
<xsl:text>}</xsl:text> | |||
<xsl:choose> | |||
<xsl:when test="not(../@xml:id)"> | |||
<xsl:message>INFO: No ID for section</xsl:message> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>\EOAlabel{</xsl:text> | |||
<xsl:value-of select="../@xml:id"/> | |||
<xsl:text>}</xsl:text> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>
</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:bibl"> | |||
<xsl:choose> | |||
<xsl:when test="./tei:ref[@type='inline']"> | |||
<xsl:text>\EOAciteyear</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:text>\EOAciteauthoryear</xsl:text> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:choose> | |||
<xsl:when test="./tei:citedRange[not(@*)]"> | |||
<xsl:text>[</xsl:text> | |||
<xsl:apply-templates/> | |||
<xsl:text>]</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:choose> | |||
<xsl:when test="./tei:citedRange/@from"> | |||
<xsl:text>[</xsl:text> | |||
<xsl:value-of select="./tei:citedRange/@from"/> | |||
<xsl:choose> | |||
<xsl:when test="./tei:citedRange/@to"> | |||
<xsl:text>–</xsl:text> | |||
<xsl:value-of select="./tei:citedRange/@to"/> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:message>INFO: citation has no to value</xsl:message> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>]</xsl:text> | |||
</xsl:when> | |||
</xsl:choose> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
<xsl:text>{</xsl:text> | |||
<xsl:value-of select="substring-after(./tei:ref/@target, '#')"/> | |||
<xsl:text>}</xsl:text> | |||
</xsl:template> | |||
|
|||
<!-- | |||
<xsl:template match="//tei:note[@place='bottom']/tei:p[position() = last()]"> | |||
<xsl:message>last </xsl:message> | |||
</xsl:template> | |||
--> | |||
|
|||
<xsl:template match="//tei:note[@place='bottom']"> | |||
<xsl:text>\EOAfn{</xsl:text> | |||
<xsl:choose> | |||
<xsl:when test="count(./tei:p)=1"> | |||
<xsl:apply-templates/> | |||
</xsl:when> | |||
<xsl:when test="count(./tei:p)>1"> | |||
<xsl:message>INFO: Number of paragraphs in larger than 1 </xsl:message> | |||
<xsl:for-each select="./tei:p"> | |||
<xsl:choose> | |||
<xsl:when test="position() != last()"> | |||
<xsl:apply-templates /> | |||
<xsl:text>\EOAfnpar</xsl:text> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:apply-templates/> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</xsl:for-each> | |||
</xsl:when> | |||
</xsl:choose> | |||
<xsl:text>}</xsl:text> | |||
</xsl:template> | |||
|
|||
<!-- <figure><graphic url="images/Fig.1CarteDuCielPotsdam.jpg"/><head>Glass photographic plate from the Carte du Ciel survey, Potsdam Observatory, Plate 5, taken January 11, 1894. The plate is approximately 16 cm x 16 cm; each plate covered two square degrees of the sky. Courtesy of the Leibniz-Institut für Astrophysik, Potsdam</head></figure> | |||
\EOAfigure{images/1.jpg}{Ostafrikanische Arbeiter an einem der großen Knochengräben, die während der paläontologischen Expedition des \EOAemph{Berliner Naturkundemuseums} in die damalige Kolonie Deutsch-Ostafrika zwischen 1909 und 1913 angelegt wurden. (Koloriertes Glasdiapositiv, Museum für Naturkunde Berlin, Historische Bild- u. Schriftgutsammlungen, Bestand: Pal. Mus., Signatur: B V/177)}{sec2:image1a}{66}{H} | |||
--> | |||
|
|||
<xsl:template match="//tei:body//tei:ref[starts-with(@type, 'number')]"> | |||
<xsl:text>\EOAref{</xsl:text> | |||
<xsl:value-of select="substring-after(@target, '#')"/> | |||
<xsl:text>}</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:body//tei:ref[@type='url']"> | |||
<xsl:text>\EOAurl{</xsl:text> | |||
<xsl:value-of select="@target"/> | |||
<xsl:text>}</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:figure[@type='hionly']"> | |||
<xsl:text>
\refstepcounter{figure}%
</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template match="//tei:figure[not(@type='hionly')]"> | |||
<xsl:text>

\EOAfigure{</xsl:text> | |||
<xsl:value-of select="./tei:graphic/@url"/> | |||
<xsl:text>}{</xsl:text> | |||
<xsl:apply-templates select="./tei:head"/> | |||
<xsl:text>}</xsl:text> | |||
<xsl:text>{</xsl:text> | |||
<xsl:value-of select="@xml:id"/> | |||
<xsl:text>}</xsl:text> | |||
<!-- need size! --> | |||
<xsl:text>{66}</xsl:text> | |||
<!-- place needs to be adjusted --> | |||
<xsl:text>{ht}</xsl:text> | |||
</xsl:template> | |||
|
|||
<xsl:template name="string-replace-all"> | |||
<xsl:param name="text" /> | |||
<xsl:param name="replace" /> | |||
<xsl:param name="by" /> | |||
<xsl:choose> | |||
<xsl:when test="contains($text, $replace)"> | |||
<xsl:value-of select="substring-before($text,$replace)" /> | |||
<xsl:value-of select="$by" /> | |||
<xsl:call-template name="string-replace-all"> | |||
<xsl:with-param name="text" | |||
select="substring-after($text,$replace)" /> | |||
<xsl:with-param name="replace" select="$replace" /> | |||
<xsl:with-param name="by" select="$by" /> | |||
</xsl:call-template> | |||
</xsl:when> | |||
<xsl:otherwise> | |||
<xsl:value-of select="$text" /> | |||
</xsl:otherwise> | |||
</xsl:choose> | |||
</xsl:template> | |||
|
|||
<xsl:template match="text()"> | |||
<xsl:call-template name="string-replace-all"> | |||
<xsl:with-param name="text" select="." /> | |||
<xsl:with-param name="replace" select="'&'" /> | |||
<xsl:with-param name="by" select="'\&'" /> | |||
</xsl:call-template> | |||
<!-- | |||
<xsl:call-template name="string-replace-all"> | |||
<xsl:with-param name="text" select="." /> | |||
<xsl:with-param name="replace" select="'&'" /> | |||
<xsl:with-param name="by" select="'\&'" /> | |||
</xsl:call-template> | |||
--> | |||
<xsl:apply-templates /> | |||
</xsl:template> | |||
|
|||
<!-- | |||
<xsl:template match="text()"> | |||
<xsl:call-template name="string-replace-all"> | |||
<xsl:with-param name="text" select="." /> | |||
<xsl:with-param name="replace" select="'#'" /> | |||
<xsl:with-param name="by" select="'\#'" /> | |||
</xsl:call-template> | |||
<xsl:apply-templates /> | |||
</xsl:template> | |||
--> | |||
|
|||
<xsl:template match="processing-instruction('eoa')"> | |||
<xsl:text>\EOAprintbibliography

</xsl:text> | |||
</xsl:template> | |||
</xsl:stylesheet> |