From af1171902084340ca1bc068d9126a8a62681cd77 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 20 May 2021 16:57:49 +0530 Subject: [PATCH] Edit book: Fix ctrl-clicking on a class name jumping to the wrong CSS rule if the stylesheet contains top level comments This is because cssutils treats top level rules as comment rules in violation of the CSSOM --- src/calibre/gui2/tweak_book/jump_to_class.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/tweak_book/jump_to_class.py b/src/calibre/gui2/tweak_book/jump_to_class.py index 59fee96952..2f0205eab4 100644 --- a/src/calibre/gui2/tweak_book/jump_to_class.py +++ b/src/calibre/gui2/tweak_book/jump_to_class.py @@ -50,14 +50,17 @@ def find_first_rule_that_matches_elem( if recursion_level > 16: return None rule_address = rule_address or [] + num_comment_rules = 0 for i, rule in enumerate(rules): if rule.type == CSSRule.STYLE_RULE: if rule_matches_elem(rule, elem, select, class_name): - return RuleLocation(rule_address + [i], current_file_name) + return RuleLocation(rule_address + [i - num_comment_rules], current_file_name) + elif rule.type == CSSRule.COMMENT: + num_comment_rules += 1 elif rule.type == CSSRule.MEDIA_RULE: res = find_first_rule_that_matches_elem( container, elem, select, class_name, rule.cssRules, - current_file_name, recursion_level + 1, rule_address + [i] + current_file_name, recursion_level + 1, rule_address + [i - num_comment_rules] ) if res is not None: return res