X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/4795d15d061b8ed6e4762be2c7787b355bbe3e63..25a7973a782b2fd0811fd6f8386302e430a53cb1:/librarian/epub.py diff --git a/librarian/epub.py b/librarian/epub.py index 831639b..cb2f2f4 100644 --- a/librarian/epub.py +++ b/librarian/epub.py @@ -11,6 +11,8 @@ import re import subprocess from StringIO import StringIO from copy import deepcopy +from mimetypes import guess_type + from lxml import etree import zipfile from tempfile import mkdtemp, NamedTemporaryFile @@ -51,19 +53,21 @@ def set_hyph_language(source_tree): def hyphenate_and_fix_conjunctions(source_tree, hyph): - if hyph is not None: - texts = etree.XPath('/utwor/*[2]//text()')(source_tree) - for t in texts: - parent = t.getparent() + texts = etree.XPath('/utwor/*[2]//text()')(source_tree) + for t in texts: + parent = t.getparent() + if hyph is not None: newt = '' wlist = re.compile(r'\w+|[^\w]', re.UNICODE).findall(t) for w in wlist: newt += hyph.inserted(w, u'\u00AD') - newt = re.sub(r'(?<=\s\w)\s+', u'\u00A0', newt) - if t.is_text: - parent.text = newt - elif t.is_tail: - parent.tail = newt + else: + newt = t + newt = re.sub(r'(?<=\s\w)\s+', u'\u00A0', newt) + if t.is_text: + parent.text = newt + elif t.is_tail: + parent.tail = newt def inner_xml(node): @@ -404,9 +408,8 @@ def transform_chunk(chunk_xml, chunk_no, annotations, empty=False, _empty_html_s return output_html, toc, chars -def transform(wldoc, verbose=False, - style=None, html_toc=False, - sample=None, cover=None, flags=None, hyphenate=False): +def transform(wldoc, verbose=False, style=None, html_toc=False, + sample=None, cover=None, flags=None, hyphenate=False, ilustr_path=''): """ produces a EPUB file sample=n: generate sample e-book (with at least n paragraphs) @@ -419,9 +422,8 @@ def transform(wldoc, verbose=False, replace_characters(wldoc.edoc.getroot()) - if hyphenate: - hyphenator = set_hyph_language(wldoc.edoc.getroot()) - hyphenate_and_fix_conjunctions(wldoc.edoc.getroot(), hyphenator) + hyphenator = set_hyph_language(wldoc.edoc.getroot()) if hyphenate else None + hyphenate_and_fix_conjunctions(wldoc.edoc.getroot(), hyphenator) # every input file will have a TOC entry, # pointing to starting chunk @@ -526,6 +528,14 @@ def transform(wldoc, verbose=False, functions.reg_mathml_epub(zip) + 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() mime.filename = 'mimetype'