from librarian import OPFNS, NCXNS, XHTMLNS, DCNS
from librarian import core
from librarian.formats import Format
-from librarian.formats.cover.wolnelektury import WLCover
+from librarian.formats.cover.evens import EvensCover
from librarian.output import OutputFile
from librarian.renderers import Register, TreeRenderer, UnknownElement
from librarian.utils import Context, get_resource, extend_element
format_name = 'EPUB'
format_ext = 'epub'
- cover = WLCover
+ cover = EvensCover
renderers = Register()
def __init__(self, doc, cover=None, with_fonts=True):
if cover is not None:
self.cover = cover
+ def dc(self, tag):
+ return self.doc.meta.get_one(DCNS(tag))
+
def build(self, ctx=None):
def add_file(url, file_id):
guide = opf.find(OPFNS('guide'))
spine = opf.find(OPFNS('spine'))
- author = ", ". join(self.doc.meta.get(DCNS('creator')) or '')
+ author = ", ". join(self.doc.meta.get(DCNS('creator')) or [])
title = self.doc.meta.title()
opf.find('.//' + DCNS('creator')).text = author
opf.find('.//' + DCNS('title')).text = title
# nav_map = toc_file[-1]
if self.cover is not None:
- cover_image = self.doc.meta.get(DCNS('relation.coverimage.url'))[0]
+ # cover_image = self.doc.meta.get(DCNS('relation.coverimage.url'))[0]
cover = self.cover(self.doc)
+ cover.set_images(ctx)
cover_output = cover.build()
cover_name = 'cover.%s' % cover.format_ext
zip.writestr(os.path.join('OPS', cover_name), cover_output.get_string())
wrap_tmpl = etree.parse(get_resource('formats/epub/res/chapter.html'))
for e in self.render(self.doc.edoc.getroot(), ctx):
- if not len(e) and not e.text.strip():
+ if not len(e) and not (e.text and e.text.strip()):
continue
wrap = deepcopy(wrap_tmpl)
extend_element(wrap.find('//*[@id="book-text"]'), e)
zip.writestr('OPS/footnotes.html', etree.tostring(
wrap, method="html", pretty_print=True))
+ footer_text = [
+ 'Information about the resource',
+ 'Publisher: %s' % self.dc('publisher'),
+ 'Rights: %s' % self.dc('rights'),
+ 'Intended audience: %s' % self.dc('audience'),
+ self.dc('description'),
+ 'Resource prepared using MIL/PEER editing platform.',
+ 'Source available at %s' % ctx.source_url,
+ ]
+ footer_wrap = deepcopy(wrap_tmpl)
+ footer_body = footer_wrap.find('//*[@id="book-text"]')
+ for line in footer_text:
+ footer_line = etree.Element('p')
+ footer_line.text = line
+ footer_body.append(footer_line)
+ manifest.append(manifest.makeelement(OPFNS('item'), attrib={
+ 'id': 'footer',
+ 'href': "footer.html",
+ 'media-type': 'application/xhtml+xml',
+ }))
+ spine.append(spine.makeelement(OPFNS('itemref'), attrib={
+ 'idref': 'footer',
+ }))
+ zip.writestr('OPS/footer.html', etree.tostring(footer_wrap, method='html'))
+
zip.writestr('OPS/content.opf', etree.tostring(opf, pretty_print=True))
ctx.toc.render(toc_file[-1])
zip.writestr('OPS/toc.ncx', etree.tostring(toc_file, pretty_print=True))