X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/18a72965fc7b90155130e87d4f1a4dd4aa354549..1e0f8d82649a23f695333d5ef4588e8b60afbe99:/librarian/epub.py diff --git a/librarian/epub.py b/librarian/epub.py index 666bcc9..ad84ab0 100644 --- a/librarian/epub.py +++ b/librarian/epub.py @@ -8,6 +8,7 @@ from __future__ import with_statement import os import os.path import subprocess +from StringIO import StringIO from copy import deepcopy from lxml import etree import zipfile @@ -105,7 +106,7 @@ def find_annotations(annotations, source, part_no): child.clear() child.tail = tail child.text = number - if child.tag not in ('extra', 'podtytul'): + if child.tag not in ('extra',): find_annotations(annotations, child, part_no) @@ -264,7 +265,7 @@ def transform_chunk(chunk_xml, chunk_no, annotations, empty=False, _empty_html_s return output_html, toc, chars -def transform(provider, slug=None, file_path=None, output_file=None, output_dir=None, make_dir=False, verbose=False, sample=None): +def transform(provider, slug=None, file_path=None, output_file=None, output_dir=None, make_dir=False, verbose=False, sample=None, cover_fn=None): """ produces a EPUB file provider: a DocProvider @@ -273,6 +274,7 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir= output_dir: path to directory to save output file to; either this or output_file must be present make_dir: writes output to //.epub instead of /.epub sample=n: generate sample e-book (with at least n paragraphs) + cover_fn: function(author, title) -> cover image """ def transform_file(input_xml, chunk_counter=1, first=True, sample=None): @@ -393,6 +395,21 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir= manifest = opf.find('.//' + OPFNS('manifest')) spine = opf.find('.//' + OPFNS('spine')) + if cover_fn: + cover = StringIO() + cover_fn(book_info.author.readable(), book_info.title).save(cover, format='JPEG') + zip.writestr(os.path.join('OPS', 'cover.jpg'), cover.getvalue()) + del cover + zip.writestr('OPS/cover.html', open(get_resource('epub/cover.html')).read()) + manifest.append(etree.fromstring( + '')) + manifest.append(etree.fromstring( + '')) + spine.insert(0, etree.fromstring('')) + opf.getroot()[0].append(etree.fromstring('')) + opf.getroot().append(etree.fromstring('')) + + annotations = etree.Element('annotations') toc_file = etree.fromstring('Przypisy'\ '' % {'i': toc_counter})) + toc_counter += 1 manifest.append(etree.fromstring( '')) spine.append(etree.fromstring( @@ -425,6 +443,18 @@ def transform(provider, slug=None, file_path=None, output_file=None, output_dir= zip.writestr('OPS/annotations.html', etree.tostring( html_tree, method="html", pretty_print=True)) + nav_map.append(etree.fromstring( + 'Strona redakcyjna'\ + '' % {'i': toc_counter})) + manifest.append(etree.fromstring( + '')) + spine.append(etree.fromstring( + '')) + html_tree = xslt(input_xml, get_resource('epub/xsltLast.xsl')) + chars.update(used_chars(html_tree.getroot())) + zip.writestr('OPS/last.html', etree.tostring( + html_tree, method="html", pretty_print=True)) + # strip fonts tmpdir = mkdtemp('-librarian-epub') cwd = os.getcwd()