From 94433308d1d4e650795139aab49a44de75abdfbf Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sun, 31 Jul 2005 22:06:03 +0000 Subject: [project @ 2005-07-31 22:06:03 by jmb] Ignore @import rules which occur after a valid rule. svn path=/import/netsurf/; revision=1835 --- css/css.c | 4 ++-- css/css.h | 1 + css/parser.y | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/css/css.c b/css/css.c index b6d872e09..0fea19c92 100644 --- a/css/css.c +++ b/css/css.c @@ -388,7 +388,7 @@ bool css_convert(struct content *c, int width, int height) unsigned int i; int token; void *parser; - struct css_parser_params param = {false, c, 0, false, false}; + struct css_parser_params param = {false, c, 0, false, false, false}; struct css_parser_token token_data; union content_msg_data msg_data; @@ -1478,7 +1478,7 @@ void css_parse_property_list(struct content *c, struct css_style * style, unsigned int i; int token; void *parser; - struct css_parser_params param = {true, c, 0, false, false}; + struct css_parser_params param = {true, c, 0, false, false, false}; struct css_parser_token token_data; const struct css_parser_token token_start = { "{", 1 }; const struct css_parser_token token_end = { "}", 1 }; diff --git a/css/css.h b/css/css.h index adddbf987..b420c11f6 100644 --- a/css/css.h +++ b/css/css.h @@ -588,6 +588,7 @@ struct css_parser_params { struct css_node *declaration; bool syntax_error; bool memory_error; + bool had_ruleset; }; /** Token type for the CSS parser. */ diff --git a/css/parser.y b/css/parser.y index 34aefabf1..2ede0ec25 100644 --- a/css/parser.y +++ b/css/parser.y @@ -47,7 +47,7 @@ statement ::= at_rule. at_rule ::= ATKEYWORD ws any_list block. at_rule ::= ATKEYWORD(A) ws any_list(B) SEMI ws. { if ((A.length == 7) && (strncasecmp(A.text, "@import", 7) == 0) - && B) + && B && !param->had_ruleset) css_atimport(param->stylesheet, B); css_free_node(B); } @@ -59,8 +59,10 @@ block_body ::= block_body ATKEYWORD ws. block_body ::= block_body SEMI ws. ruleset ::= selector_list(A) LBRACE ws declaration_list(B) RBRACE ws. - { if (A && B) + { if (A && B) { + param->had_ruleset = true; css_add_ruleset(param->stylesheet, A, B); + } else css_free_selector(A); css_free_node(B); } -- cgit v1.2.3