From 389d433d51cd40c39c8e3c8589b58b38501ceb82 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 14 May 2015 14:05:31 +0530 Subject: [PATCH] Fix various small bugs that could cause conversion to DOCX to error out --- src/calibre/ebooks/docx/writer/from_html.py | 10 +++++----- src/calibre/ebooks/docx/writer/images.py | 5 ++++- src/calibre/ebooks/docx/writer/styles.py | 5 ++++- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/calibre/ebooks/docx/writer/from_html.py b/src/calibre/ebooks/docx/writer/from_html.py index 233040de8b..7454cbb6bf 100644 --- a/src/calibre/ebooks/docx/writer/from_html.py +++ b/src/calibre/ebooks/docx/writer/from_html.py @@ -372,11 +372,11 @@ class Blocks(object): count[run.lang] += 1 if count: block.block_lang = bl = count.most_common(1)[0][0] - for run in block.runs: - if run.lang == bl: - run.lang = None - if bl == default_lang: - block.block_lang = None + for run in block.runs: + if run.lang == bl: + run.lang = None + if bl == default_lang: + block.block_lang = None def __repr__(self): return 'Block(%r)' % self.runs diff --git a/src/calibre/ebooks/docx/writer/images.py b/src/calibre/ebooks/docx/writer/images.py index 02208e4910..3aaf809297 100644 --- a/src/calibre/ebooks/docx/writer/images.py +++ b/src/calibre/ebooks/docx/writer/images.py @@ -61,7 +61,10 @@ class ImagesManager(object): if not src: return href = self.abshref(src) - rid = self.read_image(href).rid + try: + rid = self.read_image(href).rid + except AttributeError: + return drawing = self.create_image_markup(img, stylizer, href, as_block=as_block) block.add_image(drawing, bookmark=bookmark) return rid diff --git a/src/calibre/ebooks/docx/writer/styles.py b/src/calibre/ebooks/docx/writer/styles.py index f2c854de20..b78e601206 100644 --- a/src/calibre/ebooks/docx/writer/styles.py +++ b/src/calibre/ebooks/docx/writer/styles.py @@ -400,7 +400,10 @@ class BlockStyle(DOCXStyle): else: self.text_indent = int(css['text-indent'] * 20) self.css_text_indent = css._get('text-indent') - self.line_height = max(0, int(css.lineHeight * 20)) + try: + self.line_height = max(0, int(css.lineHeight * 20)) + except (TypeError, ValueError): + self.line_height = max(0, int(1.2 * css.fontSize * 20)) self.background_color = None if is_table_cell else convert_color(css['background-color']) self.text_align = {'start':'left', 'left':'left', 'end':'right', 'right':'right', 'center':'center', 'justify':'both', 'centre':'center'}.get( css['text-align'].lower(), 'left')