ISBN in epub/mobi
authorJan Szejko <janek37@gmail.com>
Tue, 16 May 2017 13:18:53 +0000 (15:18 +0200)
committerJan Szejko <janek37@gmail.com>
Tue, 16 May 2017 15:16:20 +0000 (17:16 +0200)
librarian/epub.py
librarian/epub/xsltLast.xsl
librarian/epub/xsltTitle.xsl
librarian/mobi.py

index cb2f2f4..3e9056c 100644 (file)
@@ -113,11 +113,13 @@ def node_name(node):
     return tempnode.text
 
 
-def xslt(xml, sheet):
+def xslt(xml, sheet, **kwargs):
     if isinstance(xml, etree._Element):
         xml = etree.ElementTree(xml)
     with open(sheet) as xsltf:
-        return xml.xslt(etree.parse(xsltf))
+        transform = etree.XSLT(etree.parse(xsltf))
+        params = dict((key, transform.strparam(value)) for key, value in kwargs.iteritems())
+        return transform(xml, **params)
 
 
 def replace_characters(node):
@@ -409,7 +411,7 @@ def transform_chunk(chunk_xml, chunk_no, annotations, empty=False, _empty_html_s
 
 
 def transform(wldoc, verbose=False, style=None, html_toc=False,
-              sample=None, cover=None, flags=None, hyphenate=False, ilustr_path=''):
+              sample=None, cover=None, flags=None, hyphenate=False, ilustr_path='', output_type='epub'):
     """ produces a EPUB file
 
     sample=n: generate sample e-book (with at least n paragraphs)
@@ -431,7 +433,7 @@ def transform(wldoc, verbose=False, style=None, html_toc=False,
         chars = set()
         if first:
             # write book title page
-            html_tree = xslt(wldoc.edoc, get_resource('epub/xsltTitle.xsl'))
+            html_tree = xslt(wldoc.edoc, get_resource('epub/xsltTitle.xsl'), outputtype=output_type)
             chars = used_chars(html_tree.getroot())
             zip.writestr(
                 'OPS/title.html',
@@ -648,7 +650,7 @@ def transform(wldoc, verbose=False, style=None, html_toc=False,
         '<item id="last" href="last.html" media-type="application/xhtml+xml" />'))
     spine.append(etree.fromstring(
         '<itemref idref="last" />'))
-    html_tree = xslt(document.edoc, get_resource('epub/xsltLast.xsl'))
+    html_tree = xslt(document.edoc, get_resource('epub/xsltLast.xsl'), outputtype=output_type)
     chars.update(used_chars(html_tree.getroot()))
     zip.writestr('OPS/last.html', etree.tostring(
         html_tree, pretty_print=True, xml_declaration=True,
@@ -675,7 +677,8 @@ def transform(wldoc, verbose=False, style=None, html_toc=False,
                 print "Running font-optimizer"
                 subprocess.check_call(optimizer_call)
             else:
-                subprocess.check_call(optimizer_call, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+                dev_null = open(os.devnull, 'w')
+                subprocess.check_call(optimizer_call, stdout=dev_null, stderr=dev_null)
             zip.write(os.path.join(tmpdir, fname), os.path.join('OPS', fname))
             manifest.append(etree.fromstring(
                 '<item id="%s" href="%s" media-type="application/x-font-truetype" />' % (fname, fname)))
index 6e64a0c..9c5463d 100644 (file)
@@ -8,6 +8,7 @@
   <xsl:output method="html" version="1.0" encoding="utf-8" />
   <xsl:output doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />
   <xsl:output doctype-public="-//W3C//DTD XHTML 1.1//EN" />
+  <xsl:param name="outputtype"/>
 
   <xsl:template match="utwor">
     <html>
             </p>
           </xsl:if>
 
+          <xsl:variable name="isbnId" select="concat($outputtype, '-id')"/>
+          <xsl:if test=".//meta[@id=$isbnId]">
+            <xsl:variable name="isbn" select=".//meta[@id=$isbnId]"/>
+            <p class="info">ISBN <xsl:value-of select="substring-after($isbn, 'ISBN-')"/></p>
+          </xsl:if>
+
           <p class="info">&#160;</p>
           <p class="minor-info">
               Plik wygenerowany dnia <span id="file_date"><xsl:value-of select="substring(date:date(), 1, 10)" /></span>.
index 3d734be..0a7279b 100644 (file)
@@ -7,6 +7,7 @@
   <xsl:output method="html" version="1.0" encoding="utf-8" />
   <xsl:output doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" />
   <xsl:output doctype-public="-//W3C//DTD XHTML 1.1//EN" />
+  <xsl:param name="outputtype"/>
 
   <xsl:template match="/">
     <html>
             Utwór opracowany został w&#160;ramach projektu<a href="http://www.wolnelektury.pl/"> Wolne Lektury</a> przez<a href="http://www.nowoczesnapolska.org.pl/"> fundację Nowoczesna Polska</a>.
           </p>
 
+          <xsl:variable name="isbnId" select="concat($outputtype, '-id')"/>
+          <xsl:if test=".//meta[@id=$isbnId]">
+            <xsl:variable name="isbn" select=".//meta[@id=$isbnId]"/>
+            <p class="info">ISBN <xsl:value-of select="substring-after($isbn, 'ISBN-')"/></p>
+          </xsl:if>
+
           <p class="footer info">
             <a href="http://www.wolnelektury.pl/"><img src="logo_wolnelektury.png" alt="WolneLektury.pl" /></a>
           </p>
index 65f2598..c3c8f28 100644 (file)
@@ -27,7 +27,7 @@ def transform(wldoc, verbose=False, sample=None, cover=None,
 
     epub = document.as_epub(verbose=verbose, sample=sample,
                             html_toc=True, cover=cover or True, flags=flags,
-                            hyphenate=hyphenate, ilustr_path=ilustr_path)
+                            hyphenate=hyphenate, ilustr_path=ilustr_path, output_type='mobi')
     if verbose:
         kwargs = {}
     else: