diff --git a/src/calibre/ebooks/oeb/polish/cascade.py b/src/calibre/ebooks/oeb/polish/cascade.py index 0d6fa90713..78fad51f33 100644 --- a/src/calibre/ebooks/oeb/polish/cascade.py +++ b/src/calibre/ebooks/oeb/polish/cascade.py @@ -208,7 +208,7 @@ def resolve_styles(container, name, select=None, sheet_callback=None): style_map = {elem:resolve_declarations(x) for elem, x in style_map.iteritems()} pseudo_style_map = {elem:resolve_pseudo_declarations(x) for elem, x in pseudo_style_map.iteritems()} - return style_map, pseudo_style_map, select + return partial(resolve_property, style_map), partial(resolve_pseudo_property, pseudo_style_map), select _defvals = None @@ -219,7 +219,7 @@ def defvals(): _defvals = {k:Values(Property(k, u(val)).propertyValue) for k, val in DEFAULTS.iteritems()} return _defvals -def resolve_property(elem, name, style_map): +def resolve_property(style_map, elem, name): ''' Given a `style_map` previously generated by :func:`resolve_styles()` and a property `name`, returns the effective value of that property for the specified element. Handles inheritance and CSS cascading rules. Returns @@ -237,7 +237,7 @@ def resolve_property(elem, name, style_map): q = q.getparent() if inheritable else None return defvals().get(name) -def resolve_pseudo_property(elem, prop, name, pseudo_style_map): +def resolve_pseudo_property(pseudo_style_map, elem, prop, name): style_map = pseudo_style_map.get(elem) if style_map is not None: prop_map = style_map.get(prop) diff --git a/src/calibre/ebooks/oeb/polish/tests/cascade.py b/src/calibre/ebooks/oeb/polish/tests/cascade.py index 21924e4713..6622c78640 100644 --- a/src/calibre/ebooks/oeb/polish/tests/cascade.py +++ b/src/calibre/ebooks/oeb/polish/tests/cascade.py @@ -10,7 +10,7 @@ from functools import partial from calibre.constants import iswindows from calibre.ebooks.oeb.base import OEB_STYLES, OEB_DOCS -from calibre.ebooks.oeb.polish.cascade import iterrules, resolve_property, resolve_styles, DEFAULTS, resolve_pseudo_property +from calibre.ebooks.oeb.polish.cascade import iterrules, resolve_styles, DEFAULTS from calibre.ebooks.oeb.polish.container import ContainerBase, href_to_name from calibre.ebooks.oeb.polish.tests.base import BaseTest from calibre.utils.logging import Log, Stream @@ -65,16 +65,16 @@ class CascadeTest(BaseTest): def test_resolve_styles(self): - def test_property(select, style_map, selector, name, val=None): + def test_property(select, resolve_property, selector, name, val=None): elem = next(select(selector)) - ans = resolve_property(elem, name, style_map) + ans = resolve_property(elem, name) if val is None: val = type('')(DEFAULTS[name]) self.assertEqual(val, ans.cssText) - def test_pseudo_property(select, pseudo_style_map, selector, prop, name, val=None): + def test_pseudo_property(select, resolve_pseudo_property, selector, prop, name, val=None): elem = next(select(selector)) - ans = resolve_pseudo_property(elem, prop, name, pseudo_style_map) + ans = resolve_pseudo_property(elem, prop, name) if val is None: val = type('')(DEFAULTS[name]) self.assertEqual(val, ans.cssText) @@ -82,11 +82,11 @@ class CascadeTest(BaseTest): def get_maps(html, styles=None, pseudo=False): html = '{}'.format(html) c = VirtualContainer({'index.html':html, 'styles.css':styles or 'body { color: red; font-family: "Kovid Goyal", sans-serif }'}) - style_map, pseudo_style_map, select = resolve_styles(c, 'index.html') + resolve_property, resolve_pseudo_property, select = resolve_styles(c, 'index.html') if pseudo: - tp = partial(test_pseudo_property, select, pseudo_style_map) + tp = partial(test_pseudo_property, select, resolve_pseudo_property) else: - tp = partial(test_property, select, style_map) + tp = partial(test_property, select, resolve_property) return tp t = get_maps('

xxx

')