mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
EPUB Output: Remove unnecessary CSS page breaks as they confuse the latest release of iBooks
This commit is contained in:
parent
50ad3d9136
commit
2101dcf2b5
@ -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;
|
||||||
|
@ -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
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
@ -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))
|
||||||
|
@ -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([])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user