From c3cffa07fe2ecb41921b6d1a1c59ad9b8c9a60ba Mon Sep 17 00:00:00 2001 From: "Marshall T. Vandegrift" Date: Mon, 26 Jan 2009 23:32:43 -0500 Subject: [PATCH 1/2] Fix #1702. Use the "cover" guide item when locating a cover image. --- src/calibre/ebooks/oeb/base.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/calibre/ebooks/oeb/base.py b/src/calibre/ebooks/oeb/base.py index f61b88c4d4..282bb03a30 100644 --- a/src/calibre/ebooks/oeb/base.py +++ b/src/calibre/ebooks/oeb/base.py @@ -1039,9 +1039,19 @@ class OEBBook(object): def _ensure_cover_image(self): cover = None - spine0 = self.spine[0] - html = spine0.data - if self.metadata.cover: + hcover = self.spine[0] + if 'cover' in self.guide: + href = self.guide['cover'].href + item = self.manifest.hrefs[href] + media_type = item.media_type + if media_type in OEB_RASTER_IMAGES: + cover = item + elif media_type in OEB_DOCS: + hcover = item + html = hcover.data + if cover is not None: + pass + elif self.metadata.cover: id = str(self.metadata.cover[0]) cover = self.manifest.ids[id] elif MS_COVER_TYPE in self.guide: @@ -1049,16 +1059,16 @@ class OEBBook(object): cover = self.manifest.hrefs[href] elif xpath(html, '//h:img[position()=1]'): img = xpath(html, '//h:img[position()=1]')[0] - href = spine0.abshref(img.get('src')) + href = hcover.abshref(img.get('src')) cover = self.manifest.hrefs[href] elif xpath(html, '//h:object[position()=1]'): object = xpath(html, '//h:object[position()=1]')[0] - href = spine0.abshref(object.get('data')) + href = hcover.abshref(object.get('data')) cover = self.manifest.hrefs[href] elif xpath(html, '//svg:svg[position()=1]'): svg = copy.deepcopy(xpath(html, '//svg:svg[position()=1]')[0]) - href = os.path.splitext(spine0.href)[0] + '.svg' - id, href = self.manifest.generate(spine0.id, href) + href = os.path.splitext(hcover.href)[0] + '.svg' + id, href = self.manifest.generate(hcover.id, href) cover = self.manifest.add(id, href, SVG_MIME, data=svg) if cover and not self.metadata.cover: self.metadata.add('cover', cover.id) From a3bc14fcfa7484420bfc96963c13ec3747714cd5 Mon Sep 17 00:00:00 2001 From: "Marshall T. Vandegrift" Date: Mon, 26 Jan 2009 23:59:00 -0500 Subject: [PATCH 2/2] Fix #1657. Implement "--ignore-tables" option for oeb2mobi. --- src/calibre/ebooks/mobi/mobiml.py | 5 +++++ src/calibre/ebooks/mobi/writer.py | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/mobiml.py b/src/calibre/ebooks/mobi/mobiml.py index eee86754cd..ed4465c8be 100644 --- a/src/calibre/ebooks/mobi/mobiml.py +++ b/src/calibre/ebooks/mobi/mobiml.py @@ -79,6 +79,9 @@ class FormatState(object): class MobiMLizer(object): + def __init__(self, ignore_tables=False): + self.ignore_tables = ignore_tables + def transform(self, oeb, context): oeb.logger.info('Converting XHTML to Mobipocket markup...') self.oeb = oeb @@ -341,6 +344,8 @@ class MobiMLizer(object): tag = 'tr' elif display == 'table-cell': tag = 'td' + if tag in TABLE_TAGS and self.ignore_tables: + tag = 'span' if tag == 'td' else 'div' if tag in TABLE_TAGS: for attr in ('rowspan', 'colspan'): if attr in elem.attrib: diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index f1810d2f28..3c5a39ebd2 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -524,6 +524,10 @@ def config(defaults=None): help=_('Modify images to meet Palm device size limitations.')) mobi('toc_title', ['--toc-title'], default=None, help=_('Title for any generated in-line table of contents.')) + mobi('ignore_tables', ['--ignore-tables'], default=False, + help=_('Render HTML tables as blocks of text instead of actual ' + 'tables. This is neccessary if the HTML contains very large ' + 'or complex tables.')) profiles = c.add_group('profiles', _('Device renderer profiles. ' 'Affects conversion of font sizes, image rescaling and rasterization ' 'of tables. Valid profiles are: %s.') % ', '.join(_profiles)) @@ -581,7 +585,7 @@ def oeb2mobi(opts, inpath): rasterizer.transform(oeb, context) trimmer = ManifestTrimmer() trimmer.transform(oeb, context) - mobimlizer = MobiMLizer() + mobimlizer = MobiMLizer(ignore_tables=opts.ignore_tables) mobimlizer.transform(oeb, context) writer = MobiWriter(compression=compression, imagemax=imagemax) writer.dump(oeb, outpath)