X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/b6ec0976a383cc1823f4a199bc3e6dc40880b049..cbe81ee35b07783b4f52c3d3dda83db7aaf82d34:/librarian/epub.py
diff --git a/librarian/epub.py b/librarian/epub.py
index b063380..bbeb3d7 100644
--- a/librarian/epub.py
+++ b/librarian/epub.py
@@ -16,6 +16,7 @@ from tempfile import mkdtemp, NamedTemporaryFile
from shutil import rmtree
from librarian import RDFNS, WLNS, NCXNS, OPFNS, XHTMLNS, OutputFile
+from librarian.cover import WLCover
from librarian import functions, get_resource
@@ -290,8 +291,8 @@ def transform(wldoc, verbose=False,
""" produces a EPUB file
sample=n: generate sample e-book (with at least n paragraphs)
- cover: a cover.Cover object
- flags: less-advertising, without-fonts
+ cover: a cover.Cover factory or True for default
+ flags: less-advertising, without-fonts, working-copy
"""
def transform_file(wldoc, chunk_counter=1, first=True, sample=None):
@@ -367,6 +368,10 @@ def transform(wldoc, verbose=False,
for flag in flags:
document.edoc.getroot().set(flag, 'yes')
+ # add editors info
+ document.edoc.getroot().set('editors', u', '.join(sorted(
+ editor.readable() for editor in document.editors())))
+
opf = xslt(document.book_info.to_etree(), get_resource('epub/xsltContent.xsl'))
manifest = opf.find('.//' + OPFNS('manifest'))
guide = opf.find('.//' + OPFNS('guide'))
@@ -392,24 +397,32 @@ def transform(wldoc, verbose=False,
style = get_resource('epub/style.css')
zip.write(style, os.path.join('OPS', 'style.css'))
-
if cover:
+ if cover is True:
+ cover = WLCover
+
cover_file = StringIO()
- c = cover(document.book_info.author.readable(), document.book_info.title)
- c.save(cover_file)
- c_name = 'cover.%s' % c.ext()
- zip.writestr(os.path.join('OPS', c_name), cover_file.getvalue())
+ bound_cover = cover(document.book_info)
+ bound_cover.save(cover_file)
+ cover_name = 'cover.%s' % bound_cover.ext()
+ zip.writestr(os.path.join('OPS', cover_name), cover_file.getvalue())
del cover_file
cover_tree = etree.parse(get_resource('epub/cover.html'))
- cover_tree.find('//' + XHTMLNS('img')).set('src', c_name)
+ cover_tree.find('//' + XHTMLNS('img')).set('src', cover_name)
zip.writestr('OPS/cover.html', etree.tostring(
cover_tree, method="html", pretty_print=True))
+ if bound_cover.uses_dc_cover:
+ if document.book_info.cover_by:
+ document.edoc.getroot().set('data-cover-by', document.book_info.cover_by)
+ if document.book_info.cover_source:
+ document.edoc.getroot().set('data-cover-source', document.book_info.cover_source)
+
manifest.append(etree.fromstring(
' '))
manifest.append(etree.fromstring(
- ' ' % (c_name, c.mime_type())))
+ ' ' % (cover_name, bound_cover.mime_type())))
spine.insert(0, etree.fromstring(''))
opf.getroot()[0].append(etree.fromstring(''))
guide.append(etree.fromstring(''))
@@ -462,7 +475,10 @@ def transform(wldoc, verbose=False,
if not flags or not 'without-fonts' in flags:
# strip fonts
tmpdir = mkdtemp('-librarian-epub')
- cwd = os.getcwd()
+ try:
+ cwd = os.getcwd()
+ except OSError:
+ cwd = None
os.chdir(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'font-optimizer'))
for fname in 'DejaVuSerif.ttf', 'DejaVuSerif-Bold.ttf', 'DejaVuSerif-Italic.ttf', 'DejaVuSerif-BoldItalic.ttf':
@@ -477,7 +493,8 @@ def transform(wldoc, verbose=False,
manifest.append(etree.fromstring(
' ' % (fname, fname)))
rmtree(tmpdir)
- os.chdir(cwd)
+ if cwd is not None:
+ os.chdir(cwd)
zip.writestr('OPS/content.opf', etree.tostring(opf, pretty_print=True))
title = document.book_info.title