EPUB Output: Remove unnecessary CSS page breaks as they confuse the latest release of iBooks

This commit is contained in:
Kovid Goyal 2011-02-24 09:18:10 -07:00
parent 50ad3d9136
commit 2101dcf2b5
5 changed files with 15 additions and 9 deletions

View File

@ -391,11 +391,6 @@ noembed, param, link {
display: none; display: none;
} }
/* Page breaks at body tags, to help out with LIT-generation */
body {
page-break-before: always;
}
/* Explicit line-breaks are blocks, sure... */ /* Explicit line-breaks are blocks, sure... */
br { br {
display: block; display: block;

View File

@ -984,7 +984,9 @@ OptionRecommendation(name='sr3_replace',
flattener = CSSFlattener(fbase=fbase, fkey=fkey, flattener = CSSFlattener(fbase=fbase, fkey=fkey,
lineh=line_height, lineh=line_height,
untable=self.output_plugin.file_type in ('mobi','lit'), 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) flattener(self.oeb, self.opts)
self.opts.insert_blank_line = oibl self.opts.insert_blank_line = oibl
self.opts.remove_paragraph_spacing = orps self.opts.remove_paragraph_spacing = orps

View File

@ -22,7 +22,8 @@ class LITOutput(OutputFormatPlugin):
from calibre.ebooks.oeb.transforms.htmltoc import HTMLTOCAdder from calibre.ebooks.oeb.transforms.htmltoc import HTMLTOCAdder
from calibre.ebooks.lit.writer import LitWriter from calibre.ebooks.lit.writer import LitWriter
from calibre.ebooks.oeb.transforms.split import Split 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) split(self.oeb, self.opts)

View File

@ -100,12 +100,13 @@ def FontMapper(sbase=None, dbase=None, dkey=None):
class CSSFlattener(object): class CSSFlattener(object):
def __init__(self, fbase=None, fkey=None, lineh=None, unfloat=False, def __init__(self, fbase=None, fkey=None, lineh=None, unfloat=False,
untable=False): untable=False, page_break_on_body=False):
self.fbase = fbase self.fbase = fbase
self.fkey = fkey self.fkey = fkey
self.lineh = lineh self.lineh = lineh
self.unfloat = unfloat self.unfloat = unfloat
self.untable = untable self.untable = untable
self.page_break_on_body = page_break_on_body
@classmethod @classmethod
def config(cls, cfg): def config(cls, cfg):
@ -139,6 +140,8 @@ class CSSFlattener(object):
bs.append('margin-right : %fpt'%\ bs.append('margin-right : %fpt'%\
float(self.context.margin_right)) float(self.context.margin_right))
bs.extend(['padding-left: 0pt', 'padding-right: 0pt']) 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': if self.context.change_justification != 'original':
bs.append('text-align: '+ self.context.change_justification) bs.append('text-align: '+ self.context.change_justification)
body.set('style', '; '.join(bs)) body.set('style', '; '.join(bs))

View File

@ -38,11 +38,12 @@ class SplitError(ValueError):
class Split(object): class Split(object):
def __init__(self, split_on_page_breaks=True, page_breaks_xpath=None, 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.split_on_page_breaks = split_on_page_breaks
self.page_breaks_xpath = page_breaks_xpath self.page_breaks_xpath = page_breaks_xpath
self.max_flow_size = max_flow_size self.max_flow_size = max_flow_size
self.page_break_selectors = None self.page_break_selectors = None
self.remove_css_pagebreaks = remove_css_pagebreaks
if self.page_breaks_xpath is not None: if self.page_breaks_xpath is not None:
self.page_break_selectors = [(XPath(self.page_breaks_xpath), False)] self.page_break_selectors = [(XPath(self.page_breaks_xpath), False)]
@ -83,12 +84,16 @@ class Split(object):
if before and before != 'avoid': if before and before != 'avoid':
self.page_break_selectors.add((CSSSelector(rule.selectorText), self.page_break_selectors.add((CSSSelector(rule.selectorText),
True)) True))
if self.remove_css_pagebreaks:
rule.style.removeProperty('page-break-before')
except: except:
pass pass
try: try:
if after and after != 'avoid': if after and after != 'avoid':
self.page_break_selectors.add((CSSSelector(rule.selectorText), self.page_break_selectors.add((CSSSelector(rule.selectorText),
False)) False))
if self.remove_css_pagebreaks:
rule.style.removeProperty('page-break-after')
except: except:
pass pass
page_breaks = set([]) page_breaks = set([])