From f992fd5b73f968fb4da83900e019eca8d522f14f Mon Sep 17 00:00:00 2001 From: Guillaume Ayoub Date: Fri, 24 Jan 2025 11:49:46 +0100 Subject: [PATCH] Display warnings for unknown at-rules or parsing errors --- tests/css/test_errors.py | 3 +++ weasyprint/css/__init__.py | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/tests/css/test_errors.py b/tests/css/test_errors.py index b12659fed..ebdafd394 100644 --- a/tests/css/test_errors.py +++ b/tests/css/test_errors.py @@ -17,6 +17,9 @@ ['ERROR: Relative URI reference without a base URI']), ('@import "invalid-protocol://absolute-URL"', ['ERROR: Failed to load stylesheet at']), + ('test', ['WARNING: Parse error']), + ('@test', ['WARNING: Unknown empty rule']), + ('@test {}', ['WARNING: Unknown rule']), )) def test_warnings(source, messages): with capture_logs() as logs: diff --git a/weasyprint/css/__init__.py b/weasyprint/css/__init__.py index 9ed1c694b..227ebc756 100644 --- a/weasyprint/css/__init__.py +++ b/weasyprint/css/__init__.py @@ -888,9 +888,18 @@ def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules, url_fet ignore_imports=False): """Do what can be done early on stylesheet, before being in a document.""" for rule in stylesheet_rules: - if getattr(rule, 'content', None) is None and ( - rule.type != 'at-rule' or rule.lower_at_keyword != 'import'): - continue + if getattr(rule, 'content', None) is None: + if rule.type == 'error': + LOGGER.warning( + "Parse error at %d:%d: %s", + rule.source_line, rule.source_column, rule.message) + if rule.type != 'at-rule': + continue + if rule.lower_at_keyword != 'import': + LOGGER.warning( + "Unknown empty rule %s at %d:%d", + rule, rule.source_line, rule.source_column) + continue if rule.type == 'qualified-rule': try: @@ -1096,6 +1105,11 @@ def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules, url_fet counter_style[name] = counter + else: + LOGGER.warning( + "Unknown rule %s at %d:%d", + rule, rule.source_line, rule.source_column) + def get_all_computed_styles(html, user_stylesheets=None, presentational_hints=False, font_config=None, counter_style=None, page_rules=None,