From 0c745e55f4f44784f48fbef881fd9b62e36640ba Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 23 Dec 2010 13:40:45 -0700 Subject: [PATCH] ... --- resources/images/edit-clear.png | Bin 0 -> 19046 bytes src/calibre/ebooks/oeb/transforms/margins.py | 56 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 resources/images/edit-clear.png create mode 100644 src/calibre/ebooks/oeb/transforms/margins.py diff --git a/resources/images/edit-clear.png b/resources/images/edit-clear.png new file mode 100644 index 0000000000000000000000000000000000000000..e0759cacb046a529c86536cc3a01371613fdfc4c GIT binary patch literal 19046 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 KMNUMnLSTaJi#aF& literal 0 HcmV?d00001 diff --git a/src/calibre/ebooks/oeb/transforms/margins.py b/src/calibre/ebooks/oeb/transforms/margins.py new file mode 100644 index 0000000000..fbdf2e63fd --- /dev/null +++ b/src/calibre/ebooks/oeb/transforms/margins.py @@ -0,0 +1,56 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + + +class RemoveFakeMargins(object): + ''' + Try to detect and remove fake margins inserted by asinine ebook creation + software on each paragraph/wrapper div. Can be used only after CSS + flattening. + ''' + + def __call__(self, oeb, opts, log): + self.oeb, self.opts, self.log = oeb, opts, log + + from calibre.ebooks.oeb.base import XPath, OEB_STYLES + + stylesheet = None + for item in self.oeb.manifest: + if item.media_type.lower() in OEB_STYLES: + stylesheet = item.data + break + + if stylesheet is None: + return + + + top_level_elements = {} + second_level_elements = {} + + for x in self.oeb.spine: + root = x.data + body = XPath('//h:body')(root) + if body: + body = body[0] + + if not hasattr(body, 'xpath'): + continue + + # Check for margins on top level elements + for lb in XPath('./h:div|./h:p|./*/h:div|./*/h:p')(body): + cls = lb.get('class', '') + level = top_level_elements if lb.getparent() is body else \ + second_level_elements + if cls not in level: + level[cls] = [] + top_level_elements[cls] = [] + level[cls].append(lb) + + + def get_margins(self, stylesheet, cls): + pass +