mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
EPUB output:Handle style attributes more robustly
This commit is contained in:
parent
e039e3c9bd
commit
705987c3fc
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user