From 2101dcf2b5e0925b42c8af00ddc64243a021e042 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 24 Feb 2011 09:18:10 -0700 Subject: [PATCH] EPUB Output: Remove unnecessary CSS page breaks as they confuse the latest release of iBooks --- resources/templates/html.css | 5 ----- src/calibre/ebooks/conversion/plumber.py | 4 +++- src/calibre/ebooks/lit/output.py | 3 ++- src/calibre/ebooks/oeb/transforms/flatcss.py | 5 ++++- src/calibre/ebooks/oeb/transforms/split.py | 7 ++++++- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/resources/templates/html.css b/resources/templates/html.css index e9b683ca34..79c80583bf 100644 --- a/resources/templates/html.css +++ b/resources/templates/html.css @@ -391,11 +391,6 @@ noembed, param, link { display: none; } -/* Page breaks at body tags, to help out with LIT-generation */ -body { - page-break-before: always; -} - /* Explicit line-breaks are blocks, sure... */ br { display: block; diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py index 1d263eb762..9a0c3f3c7f 100644 --- a/src/calibre/ebooks/conversion/plumber.py +++ b/src/calibre/ebooks/conversion/plumber.py @@ -984,7 +984,9 @@ OptionRecommendation(name='sr3_replace', flattener = CSSFlattener(fbase=fbase, fkey=fkey, lineh=line_height, untable=self.output_plugin.file_type in ('mobi','lit'), - unfloat=self.output_plugin.file_type in ('mobi', 'lit')) + unfloat=self.output_plugin.file_type in ('mobi', 'lit'), + page_break_on_body=self.output_plugin.file_type in ('mobi', + 'lit')) flattener(self.oeb, self.opts) self.opts.insert_blank_line = oibl self.opts.remove_paragraph_spacing = orps diff --git a/src/calibre/ebooks/lit/output.py b/src/calibre/ebooks/lit/output.py index 423fb9ce7c..0b07bc7705 100644 --- a/src/calibre/ebooks/lit/output.py +++ b/src/calibre/ebooks/lit/output.py @@ -22,7 +22,8 @@ class LITOutput(OutputFormatPlugin): from calibre.ebooks.oeb.transforms.htmltoc import HTMLTOCAdder from calibre.ebooks.lit.writer import LitWriter from calibre.ebooks.oeb.transforms.split import Split - split = Split(split_on_page_breaks=True, max_flow_size=0) + split = Split(split_on_page_breaks=True, max_flow_size=0, + remove_css_pagebreaks=False) split(self.oeb, self.opts) diff --git a/src/calibre/ebooks/oeb/transforms/flatcss.py b/src/calibre/ebooks/oeb/transforms/flatcss.py index db6bdf0a7a..368f5eb289 100644 --- a/src/calibre/ebooks/oeb/transforms/flatcss.py +++ b/src/calibre/ebooks/oeb/transforms/flatcss.py @@ -100,12 +100,13 @@ def FontMapper(sbase=None, dbase=None, dkey=None): class CSSFlattener(object): def __init__(self, fbase=None, fkey=None, lineh=None, unfloat=False, - untable=False): + untable=False, page_break_on_body=False): self.fbase = fbase self.fkey = fkey self.lineh = lineh self.unfloat = unfloat self.untable = untable + self.page_break_on_body = page_break_on_body @classmethod def config(cls, cfg): @@ -139,6 +140,8 @@ class CSSFlattener(object): bs.append('margin-right : %fpt'%\ float(self.context.margin_right)) bs.extend(['padding-left: 0pt', 'padding-right: 0pt']) + if self.page_break_on_body: + bs.extend(['page-break-before: always']) if self.context.change_justification != 'original': bs.append('text-align: '+ self.context.change_justification) body.set('style', '; '.join(bs)) diff --git a/src/calibre/ebooks/oeb/transforms/split.py b/src/calibre/ebooks/oeb/transforms/split.py index 4633131dc0..69de740ddc 100644 --- a/src/calibre/ebooks/oeb/transforms/split.py +++ b/src/calibre/ebooks/oeb/transforms/split.py @@ -38,11 +38,12 @@ class SplitError(ValueError): class Split(object): def __init__(self, split_on_page_breaks=True, page_breaks_xpath=None, - max_flow_size=0): + max_flow_size=0, remove_css_pagebreaks=True): self.split_on_page_breaks = split_on_page_breaks self.page_breaks_xpath = page_breaks_xpath self.max_flow_size = max_flow_size self.page_break_selectors = None + self.remove_css_pagebreaks = remove_css_pagebreaks if self.page_breaks_xpath is not None: self.page_break_selectors = [(XPath(self.page_breaks_xpath), False)] @@ -83,12 +84,16 @@ class Split(object): if before and before != 'avoid': self.page_break_selectors.add((CSSSelector(rule.selectorText), True)) + if self.remove_css_pagebreaks: + rule.style.removeProperty('page-break-before') except: pass try: if after and after != 'avoid': self.page_break_selectors.add((CSSSelector(rule.selectorText), False)) + if self.remove_css_pagebreaks: + rule.style.removeProperty('page-break-after') except: pass page_breaks = set([])