From 825905a092689586fce5bdcea12fa7d015b24f6e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 12 Apr 2016 16:20:34 +0530 Subject: [PATCH] Add a flag to abort when a psedo element is missing --- src/calibre/ebooks/oeb/polish/cascade.py | 6 +++++- src/calibre/ebooks/oeb/polish/tests/cascade.py | 11 ++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/oeb/polish/cascade.py b/src/calibre/ebooks/oeb/polish/cascade.py index 89f654bce3..a2f2447417 100644 --- a/src/calibre/ebooks/oeb/polish/cascade.py +++ b/src/calibre/ebooks/oeb/polish/cascade.py @@ -237,10 +237,14 @@ def resolve_property(style_map, elem, name): q = q.getparent() if inheritable else None return defvals().get(name) -def resolve_pseudo_property(style_map, pseudo_style_map, elem, prop, name): +def resolve_pseudo_property(style_map, pseudo_style_map, elem, prop, name, abort_on_missing=False): sub_map = pseudo_style_map.get(elem) + if abort_on_missing and sub_map is None: + return None if sub_map is not None: prop_map = sub_map.get(prop) + if abort_on_missing and prop_map is None: + return None if prop_map is not None: val = prop_map.get(name) if val is not None: diff --git a/src/calibre/ebooks/oeb/polish/tests/cascade.py b/src/calibre/ebooks/oeb/polish/tests/cascade.py index 8ef285bef3..dd9167564e 100644 --- a/src/calibre/ebooks/oeb/polish/tests/cascade.py +++ b/src/calibre/ebooks/oeb/polish/tests/cascade.py @@ -72,9 +72,13 @@ class CascadeTest(BaseTest): val = type('')(DEFAULTS[name]) self.assertEqual(val, ans.cssText) - def test_pseudo_property(select, resolve_pseudo_property, selector, prop, name, val=None): + def test_pseudo_property(select, resolve_pseudo_property, selector, prop, name, val=None, abort_on_missing=False): elem = next(select(selector)) - ans = resolve_pseudo_property(elem, prop, name) + ans = resolve_pseudo_property(elem, prop, name, abort_on_missing=abort_on_missing) + if abort_on_missing: + if val is None: + self.assertTrue(ans is None) + return if val is None: val = type('')(DEFAULTS[name]) self.assertEqual(val, ans.cssText) @@ -125,4 +129,5 @@ class CascadeTest(BaseTest): t('p', 'before', 'content', 'xxx') t('p', 'before', 'margin-top', '0') t('p', 'before', 'font-weight', 'bold') - t('p', 'first-letter', 'content', 'normal') + t('p', 'first-letter', 'content') + t('p', 'first-letter', 'content', abort_on_missing=True)