fix epub for weird corner case
[librarian.git] / librarian / xslt / book2txt.xslt
old mode 100755 (executable)
new mode 100644 (file)
index 15438a5..8589121
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
+
    This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
    Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
-  
+
 -->
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-    xmlns:wl="http://wolnelektury.pl/functions" >
+    xmlns:wl="http://wolnelektury.pl/functions"
+    xmlns:dc="http://purl.org/dc/elements/1.1/" >
 
 <xsl:output encoding="utf-8" method="text" />
 
 <!-- = (can contain block tags, paragraph tags, standalone tags and special tags) = -->
 <!-- ============================================================================== -->
 <xsl:template match="powiesc|opowiadanie|liryka_l|liryka_lp|dramat_wierszowany_l|dramat_wierszowany_lp|dramat_wspolczesny">
-<xsl:if test="nazwa_utworu"><xsl:apply-templates select="autor_utworu|dzielo_nadrzedne|nazwa_utworu|podtytul" mode="header" /></xsl:if>
+<xsl:if test="not (../@raw-text) and nazwa_utworu">
+    <xsl:apply-templates select="autor_utworu|dzielo_nadrzedne|nazwa_utworu|podtytul" mode="header" />
+    <xsl:call-template name="translators" />
+    <xsl:call-template name="isbn" />
+    <xsl:text>
+</xsl:text>
+</xsl:if>
+<xsl:apply-templates />
 <xsl:text>
 
 </xsl:text>
-<xsl:apply-templates />
 </xsl:template>
 
 
 <xsl:apply-templates />
 </xsl:template>
 
+<xsl:template match="ramka">
+<xsl:apply-templates />
+</xsl:template>
+
 <xsl:template match="lista_osob">
 <xsl:text>
 
 <!-- ========================================== -->
 <!-- Title page -->
 <xsl:template match="autor_utworu" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
 
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="nazwa_utworu" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
-
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="dzielo_nadrzedne" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
-    
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="podtytul" mode="header">
+<xsl:apply-templates mode="inline" />
 <xsl:text>
 </xsl:text>
-<xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <!-- Section headers (included in index)-->
     <xsl:apply-templates select="*|text()" mode="inline" />
 </xsl:variable>
 <xsl:text>
-    
+
 / </xsl:text><xsl:value-of select="wl:wrap_words(wl:strip($content), $wrapping)" /><xsl:text> /</xsl:text>
 </xsl:template>
 
 <xsl:text>
 </xsl:text>
     <xsl:choose>
-        <xsl:when test="count(br) > 0">     
+        <xsl:when test="count(br) > 0">
             <xsl:call-template name="verse">
                 <xsl:with-param name="verse-content" select="br[1]/preceding-sibling::text() | br[1]/preceding-sibling::node()" />
-                <xsl:with-param name="verse-type" select="br[1]/preceding-sibling::*[name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd'][1]" />
-            </xsl:call-template>    
+                <xsl:with-param name="verse-type" select="br[1]/preceding-sibling::*[name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd' or name() = 'wers_do_prawej'][1]" />
+            </xsl:call-template>
             <xsl:for-each select="br">         
                        <!-- Each BR tag "consumes" text after it -->
                 <xsl:variable name="lnum" select="count(preceding-sibling::br)" />
                 <xsl:call-template name="verse">
-                    <xsl:with-param name="verse-content" 
+                    <xsl:with-param name="verse-content"
                         select="following-sibling::text()[count(preceding-sibling::br) = $lnum+1] | following-sibling::node()[count(preceding-sibling::br) = $lnum+1]" />
-                    <xsl:with-param name="verse-type" select="following-sibling::*[count(preceding-sibling::br) = $lnum+1 and (name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd')][1]" />
+                    <xsl:with-param name="verse-type" select="following-sibling::*[count(preceding-sibling::br) = $lnum+1 and (name() = 'wers_wciety' or name() = 'wers_akap' or name() = 'wers_cd' or name() = 'wers_do_prawej')][1]" />
                 </xsl:call-template>
             </xsl:for-each>
         </xsl:when>
         <xsl:otherwise>
             <xsl:call-template name="verse">
                 <xsl:with-param name="verse-content" select="text() | node()" />
-                <xsl:with-param name="verse-type" select="wers_wciety|wers_akap|wers_cd[1]" />
-             </xsl:call-template>           
+                <xsl:with-param name="verse-type" select="wers_wciety|wers_akap|wers_cd|wers_do_prawej[1]" />
+             </xsl:call-template>
         </xsl:otherwise>
     </xsl:choose>
 </xsl:template>
         <xsl:when test="name($verse-type) = 'wers_cd'">
             <xsl:text>                        </xsl:text>
         </xsl:when>
+        <xsl:when test="name($verse-type) = 'wers_do_prawej'">
+            <xsl:text>                        </xsl:text>
+        </xsl:when>
     </xsl:choose>
 <xsl:value-of select="wl:strip($content)" />
 </xsl:template>
 <xsl:apply-templates mode="inline" />
 </xsl:template>
 
+<xsl:template match="tabela|tabelka">
+       <xsl:text>
+
+</xsl:text>
+<xsl:apply-templates/>
+<xsl:text>
+</xsl:text>
+</xsl:template>
+<xsl:template match="wiersz">
+       <xsl:apply-templates />
+       <xsl:text>
+</xsl:text>
+</xsl:template>
+<xsl:template match="kol">
+       <xsl:apply-templates mode="inline" />
+       <xsl:text>    </xsl:text>
+</xsl:template>
+
 
 <!-- ================================================ -->
 <!-- = INLINE TAGS                                  = -->
 <xsl:text>*</xsl:text><xsl:apply-templates mode="inline" /><xsl:text>*</xsl:text>
 </xsl:template>
 
+<xsl:template match="indeks_dolny" mode="inline">
+<xsl:apply-templates mode="inline" />
+</xsl:template>
+
+<xsl:template match="wieksze_odstepy" mode="inline">
+<xsl:apply-templates mode="inline" />
+</xsl:template>
+
 <xsl:template match="osoba" mode="inline">
 <xsl:apply-templates mode="inline" />
 </xsl:template>
 
 <xsl:template match="motyw" mode="inline" />
 
+<xsl:template name="translators">
+    <xsl:if test="//dc:contributor.translator">
+        <text>tłum. </text>
+        <xsl:for-each select="//dc:contributor.translator/text()">
+            <xsl:if test="position() != 1">
+                <xsl:text>, </xsl:text>
+            </xsl:if>
+            <xsl:value-of select="wl:person_name(.)" />
+        </xsl:for-each>
+        <xsl:text>
+</xsl:text>
+    </xsl:if>
+</xsl:template>
+
+<xsl:template name="isbn">
+    <xsl:if test="//meta[@id='txt-id']">
+        <xsl:variable name="isbn" select="//meta[@id='txt-id']"/>
+        <text>
+ISBN </text><xsl:value-of select="substring-after($isbn, 'ISBN-')"/>
+    </xsl:if>
+</xsl:template>
+
 
 <!-- ================ -->
 <!-- = IGNORED TAGS = -->
 <xsl:template match="extra|uwaga" mode="inline" />
 
 <xsl:template match="nota_red" />
+<xsl:template match="abstrakt" />
 
 <!-- ======== -->
 <!-- = TEXT = -->