X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/50851315ec74af3cad225137935de36904c4c29b..0c0fdd2db2c1277108b03a1acf88ad63d140451a:/librarian/epub.py?ds=inline diff --git a/librarian/epub.py b/librarian/epub.py index 4677229..8d4e73f 100644 --- a/librarian/epub.py +++ b/librarian/epub.py @@ -19,7 +19,7 @@ from tempfile import mkdtemp, NamedTemporaryFile from shutil import rmtree from librarian import RDFNS, WLNS, NCXNS, OPFNS, XHTMLNS, DCNS, OutputFile -from librarian.cover import DefaultEbookCover +from librarian.cover import make_cover from librarian import functions, get_resource @@ -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): @@ -201,6 +203,8 @@ class Stanza(object): for i, verse_text in enumerate(re.split(r"/\s*\n", text)): if i: self.open_normal_verse() + if not verse_text.strip(): + continue verse = self.get_open_verse() if len(verse): verse[-1].tail = (verse[-1].tail or "") + verse_text @@ -409,7 +413,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 +435,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', @@ -528,12 +532,13 @@ def transform(wldoc, verbose=False, style=None, html_toc=False, functions.reg_mathml_epub(zip) - for i, filename in enumerate(os.listdir(ilustr_path)): - file_path = os.path.join(ilustr_path, filename) - zip.write(file_path, os.path.join('OPS', filename)) - image_id = 'image%s' % i - manifest.append(etree.fromstring( - '' % (image_id, filename, guess_type(file_path)[0]))) + if os.path.isdir(ilustr_path): + for i, filename in enumerate(os.listdir(ilustr_path)): + file_path = os.path.join(ilustr_path, filename) + zip.write(file_path, os.path.join('OPS', filename)) + image_id = 'image%s' % i + manifest.append(etree.fromstring( + '' % (image_id, filename, guess_type(file_path)[0]))) # write static elements mime = zipfile.ZipInfo() @@ -560,7 +565,7 @@ def transform(wldoc, verbose=False, style=None, html_toc=False, if cover: if cover is True: - cover = DefaultEbookCover + cover = make_cover cover_file = StringIO() bound_cover = cover(document.book_info) @@ -647,7 +652,7 @@ def transform(wldoc, verbose=False, style=None, html_toc=False, '')) spine.append(etree.fromstring( '')) - 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, @@ -674,7 +679,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( '' % (fname, fname)))