mirror of
https://github.com/Kozea/WeasyPrint.git
synced 2024-10-05 08:27:22 +03:00
Ignore CSS imports after other types of declarations
This commit is contained in:
parent
dd7bf0b8a1
commit
fb649f22b3
@ -594,7 +594,7 @@ def computed_from_cascaded(element, cascaded, parent_style, pseudo_type=None,
|
|||||||
|
|
||||||
def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules,
|
def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules,
|
||||||
url_fetcher, matcher, page_rules, fonts,
|
url_fetcher, matcher, page_rules, fonts,
|
||||||
font_config):
|
font_config, ignore_imports=False):
|
||||||
"""Do the work that can be done early on stylesheet, before they are
|
"""Do the work that can be done early on stylesheet, before they are
|
||||||
in a document.
|
in a document.
|
||||||
|
|
||||||
@ -616,12 +616,22 @@ def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules,
|
|||||||
raise cssselect2.SelectorError(
|
raise cssselect2.SelectorError(
|
||||||
'Unknown pseudo-element: %s'
|
'Unknown pseudo-element: %s'
|
||||||
% selector.pseudo_element)
|
% selector.pseudo_element)
|
||||||
|
ignore_imports = True
|
||||||
except cssselect2.SelectorError as exc:
|
except cssselect2.SelectorError as exc:
|
||||||
LOGGER.warning("Invalid or unsupported selector '%s', %s",
|
LOGGER.warning("Invalid or unsupported selector '%s', %s",
|
||||||
tinycss2.serialize(rule.prelude), exc)
|
tinycss2.serialize(rule.prelude), exc)
|
||||||
continue
|
continue
|
||||||
|
else:
|
||||||
|
ignore_imports = True
|
||||||
|
|
||||||
elif rule.type == 'at-rule' and rule.at_keyword == 'import':
|
elif rule.type == 'at-rule' and rule.at_keyword == 'import':
|
||||||
|
if ignore_imports:
|
||||||
|
LOGGER.warning('@import rule "%s" not at the beginning of the '
|
||||||
|
'the whole rule was ignored at %s:%s.',
|
||||||
|
tinycss2.serialize(rule.prelude),
|
||||||
|
rule.source_line, rule.source_column)
|
||||||
|
continue
|
||||||
|
|
||||||
tokens = remove_whitespace(rule.prelude)
|
tokens = remove_whitespace(rule.prelude)
|
||||||
if tokens and tokens[0].type in ('url', 'string'):
|
if tokens and tokens[0].type in ('url', 'string'):
|
||||||
url = tokens[0].value
|
url = tokens[0].value
|
||||||
@ -658,12 +668,13 @@ def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules,
|
|||||||
tinycss2.serialize(rule.prelude),
|
tinycss2.serialize(rule.prelude),
|
||||||
rule.source_line, rule.source_column)
|
rule.source_line, rule.source_column)
|
||||||
continue
|
continue
|
||||||
|
ignore_imports = True
|
||||||
if not evaluate_media_query(media, device_media_type):
|
if not evaluate_media_query(media, device_media_type):
|
||||||
continue
|
continue
|
||||||
content_rules = tinycss2.parse_rule_list(rule.content)
|
content_rules = tinycss2.parse_rule_list(rule.content)
|
||||||
preprocess_stylesheet(
|
preprocess_stylesheet(
|
||||||
device_media_type, base_url, content_rules, url_fetcher,
|
device_media_type, base_url, content_rules, url_fetcher,
|
||||||
matcher, page_rules, fonts, font_config)
|
matcher, page_rules, fonts, font_config, ignore_imports=True)
|
||||||
|
|
||||||
elif rule.type == 'at-rule' and rule.at_keyword == 'page':
|
elif rule.type == 'at-rule' and rule.at_keyword == 'page':
|
||||||
tokens = remove_whitespace(rule.prelude)
|
tokens = remove_whitespace(rule.prelude)
|
||||||
@ -699,6 +710,7 @@ def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules,
|
|||||||
tinycss2.serialize(rule.prelude),
|
tinycss2.serialize(rule.prelude),
|
||||||
rule.source_line, rule.source_column)
|
rule.source_line, rule.source_column)
|
||||||
continue
|
continue
|
||||||
|
ignore_imports = True
|
||||||
page_type = PageType(**types)
|
page_type = PageType(**types)
|
||||||
# Use a double lambda to have a closure that holds page_types
|
# Use a double lambda to have a closure that holds page_types
|
||||||
match = (lambda page_type: lambda page_names: list(
|
match = (lambda page_type: lambda page_names: list(
|
||||||
@ -724,6 +736,7 @@ def preprocess_stylesheet(device_media_type, base_url, stylesheet_rules,
|
|||||||
(margin_rule, selector_list, declarations))
|
(margin_rule, selector_list, declarations))
|
||||||
|
|
||||||
elif rule.type == 'at-rule' and rule.at_keyword == 'font-face':
|
elif rule.type == 'at-rule' and rule.at_keyword == 'font-face':
|
||||||
|
ignore_imports = True
|
||||||
content = tinycss2.parse_declaration_list(rule.content)
|
content = tinycss2.parse_declaration_list(rule.content)
|
||||||
rule_descriptors = dict(preprocess_descriptors(base_url, content))
|
rule_descriptors = dict(preprocess_descriptors(base_url, content))
|
||||||
for key in ('src', 'font_family'):
|
for key in ('src', 'font_family'):
|
||||||
|
Loading…
Reference in New Issue
Block a user