diff --git a/src/calibre/ebooks/epub/split.py b/src/calibre/ebooks/epub/split.py index ca95f4094d..6128af588e 100644 --- a/src/calibre/ebooks/epub/split.py +++ b/src/calibre/ebooks/epub/split.py @@ -50,6 +50,7 @@ class Splitter(LoggingInterface): self.split_size = 0 # Split on page breaks + self.splitting_on_page_breaks = True if not opts.dont_split_on_page_breaks: self.log_info('\tSplitting on page breaks...') if self.path in stylesheet_map: @@ -61,6 +62,7 @@ class Splitter(LoggingInterface): trees = list(self.trees) # Split any remaining over-sized trees + self.splitting_on_page_breaks = False if self.opts.profile.flow_size < sys.maxint: lt_found = False self.log_info('\tLooking for large trees...') @@ -203,7 +205,8 @@ class Splitter(LoggingInterface): elem.set('style', 'display:none') def fix_split_point(sp): - sp.set('style', sp.get('style', '')+'page-break-before:avoid;page-break-after:avoid') + if not self.splitting_on_page_breaks: + sp.set('style', sp.get('style', '')+'page-break-before:avoid;page-break-after:avoid') # Tree 1 hit_split_point = False diff --git a/src/calibre/ebooks/html.py b/src/calibre/ebooks/html.py index c853f62171..8e892f428c 100644 --- a/src/calibre/ebooks/html.py +++ b/src/calibre/ebooks/html.py @@ -823,21 +823,28 @@ class Processor(Parser): font.set('class', cn) font.tag = 'span' + id_css, id_css_counter = {}, 0 for elem in self.root.xpath('//*[@style]'): setting = elem.get('style') - classname = cache.get(setting, None) - if classname is None: - classname = 'calibre_class_%d'%class_counter - class_counter += 1 - cache[setting] = classname - cn = elem.get('class', '') - if cn: cn += ' ' - cn += classname - elem.set('class', cn) + if elem.get('id', False) or elem.get('class', False): + elem.set('id', elem.get('id', 'calibre_css_id_%d'%id_css_counter)) + id_css_counter += 1 + id_css[elem.tag+'#'+elem.get('id')] = setting + else: + classname = cache.get(setting, None) + if classname is None: + classname = 'calibre_class_%d'%class_counter + class_counter += 1 + cache[setting] = classname + cn = elem.get('class', '') + elem.set('class', cn) elem.attrib.pop('style') css = '\n'.join(['.%s {%s;}'%(cn, setting) for \ setting, cn in cache.items()]) + css += '\n\n' + css += '\n'.join(['%s {%s;}'%(selector, setting) for \ + selector, setting in cache.items()]) sheet = self.css_parser.parseString(self.preprocess_css(css.replace(';;}', ';}'))) for rule in sheet: self.stylesheet.add(rule)