epub changes
[librarian.git] / librarian / epub.py
index 841b7c5..43eb295 100644 (file)
@@ -15,6 +15,7 @@ from lxml import etree
 import zipfile
 from tempfile import mkdtemp, NamedTemporaryFile
 from shutil import rmtree
+from mimetypes import guess_type
 
 from librarian import RDFNS, WLNS, NCXNS, OPFNS, XHTMLNS, OutputFile
 from librarian.cover import WLCover, FutureOfCopyrightCover
@@ -331,7 +332,8 @@ 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, resources=None):
+              sample=None, cover=None, flags=None, resources=None,
+              intro_file=None, cover_file=None):
     """ produces a EPUB file
 
     sample=n: generate sample e-book (with at least n paragraphs)
@@ -355,7 +357,7 @@ def transform(wldoc, verbose=False,
             zip.writestr('OPS/title.html',
                  etree.tostring(html_tree, method="html", pretty_print=True))
             # add a title page TOC entry
-            toc.add(u"Title", "title.html")
+            toc.add(u"Tytuł", "title.html")
         elif wldoc.book_info.parts:
             # write title page for every parent
             if sample is not None and sample <= 0:
@@ -448,6 +450,9 @@ def transform(wldoc, verbose=False,
                     fpath  = os.path.join(dp, fname)
                     if os.path.isfile(fpath):
                         zip.write(fpath, os.path.join('OPS', fname))
+                        manifest.append(etree.fromstring(
+                                '<item id="%s" href="%s" media-type="%s" />' % (os.path.splitext(fname)[0], fname, guess_type(fpath)[0])))
+
         else:
             print "resources path %s is not directory" % resources
                 
@@ -494,10 +499,20 @@ def transform(wldoc, verbose=False,
     nav_map = toc_file[-1]
 
     manifest.append(etree.fromstring(
-        '<item id="intro" href="intro.html" media-type="application/xhtml+xml" />'))
+        '<item id="first" href="first.html" media-type="application/xhtml+xml" />'))
     spine.append(etree.fromstring(
-        '<itemref idref="intro" />'))
-    zip.writestr('OPS/intro.html', open(get_resource('epub/intro.html')).read())
+        '<itemref idref="first" />'))
+    html_tree = xslt(document.edoc, get_resource('epub/xsltFirst.xsl'))
+#    chars.update(used_chars(html_tree.getroot()))
+    zip.writestr('OPS/first.html', etree.tostring(
+                        html_tree, method="html", pretty_print=True))
+
+    if intro_file:
+        manifest.append(etree.fromstring(
+                '<item id="intro" href="intro.html" media-type="application/xhtml+xml" />'))
+        spine.append(etree.fromstring(
+                '<itemref idref="intro" />'))
+        zip.writestr('OPS/intro.html', open(intro_file or get_resource('epub/intro.html')).read())
 
 
     if html_toc:
@@ -509,12 +524,14 @@ def transform(wldoc, verbose=False,
 
     toc, chunk_counter, chars, sample = transform_file(document, sample=sample)
 
+    toc.add("Informacje redakcyjne", "first.html", index=0)
+
     if len(toc.children) < 2:
-        toc.add(u"Beginning of the book", "part1.html")
+        toc.add(u"Początek książki", "part1.html")
 
     # Last modifications in container files and EPUB creation
     if len(annotations) > 0:
-        toc.add("Footnotes", "annotations.html")
+        toc.add("Przypisy", "annotations.html")
         manifest.append(etree.fromstring(
             '<item id="annotations" href="annotations.html" media-type="application/xhtml+xml" />'))
         spine.append(etree.fromstring(
@@ -534,7 +551,7 @@ def transform(wldoc, verbose=False,
     # chars.update(used_chars(etree.fromstring(html_string)))
     # zip.writestr('OPS/support.html', html_string)
 
-    toc.add("Editors", "last.html")
+    toc.add("Informacje redakcyjne", "last.html")
     manifest.append(etree.fromstring(
         '<item id="last" href="last.html" media-type="application/xhtml+xml" />'))
     spine.append(etree.fromstring(
@@ -582,7 +599,7 @@ def transform(wldoc, verbose=False,
 
     # write TOC
     if html_toc:
-        toc.add(u"Table of Contents", "toc.html", index=1)
+        toc.add(u"Spis treści", "toc.html", index=1)
         zip.writestr('OPS/toc.html', toc.html().encode('utf-8'))
     toc.write_to_xml(nav_map)
     zip.writestr('OPS/toc.ncx', etree.tostring(toc_file, pretty_print=True))