EPUB output:Handle style attributes more robustly

This commit is contained in:
Kovid Goyal 2009-01-25 13:53:12 -08:00
parent e039e3c9bd
commit 705987c3fc

View File

@ -823,21 +823,28 @@ class Processor(Parser):
font.set('class', cn) font.set('class', cn)
font.tag = 'span' font.tag = 'span'
id_css, id_css_counter = {}, 0
for elem in self.root.xpath('//*[@style]'): for elem in self.root.xpath('//*[@style]'):
setting = elem.get('style') setting = elem.get('style')
classname = cache.get(setting, None) if elem.get('id', False) or elem.get('class', False):
if classname is None: elem.set('id', elem.get('id', 'calibre_css_id_%d'%id_css_counter))
classname = 'calibre_class_%d'%class_counter id_css_counter += 1
class_counter += 1 id_css[elem.tag+'#'+elem.get('id')] = setting
cache[setting] = classname else:
cn = elem.get('class', '') classname = cache.get(setting, None)
if cn: cn += ' ' if classname is None:
cn += classname classname = 'calibre_class_%d'%class_counter
elem.set('class', cn) class_counter += 1
cache[setting] = classname
cn = elem.get('class', '')
elem.set('class', cn)
elem.attrib.pop('style') elem.attrib.pop('style')
css = '\n'.join(['.%s {%s;}'%(cn, setting) for \ css = '\n'.join(['.%s {%s;}'%(cn, setting) for \
setting, cn in cache.items()]) 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(';;}', ';}'))) sheet = self.css_parser.parseString(self.preprocess_css(css.replace(';;}', ';}')))
for rule in sheet: for rule in sheet:
self.stylesheet.add(rule) self.stylesheet.add(rule)