diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-01 11:18:39 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-07-01 11:18:39 +0000 |
commit | 9168c67c5439783069fb29e9c0798ff9d149c0ec (patch) | |
tree | 3dbea43276f6d4ec2ff7e420d6eea79e184f0e57 /src/parse/language.c | |
parent | 94ff706d99220d915be8cedcda6b93ead998f5b8 (diff) | |
download | libcss-9168c67c5439783069fb29e9c0798ff9d149c0ec.tar.gz libcss-9168c67c5439783069fb29e9c0798ff9d149c0ec.tar.bz2 |
It probably helps to remember that @import also contains URL data.
svn path=/trunk/libcss/; revision=8229
Diffstat (limited to 'src/parse/language.c')
-rw-r--r-- | src/parse/language.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/parse/language.c b/src/parse/language.c index 191b779..27dd03e 100644 --- a/src/parse/language.c +++ b/src/parse/language.c @@ -407,6 +407,7 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector *vector) } } else if (atkeyword->ilower == c->strings[IMPORT]) { if (c->state != HAD_RULE) { + lwc_string *url; uint64_t media = 0; /* any0 = (STRING | URI) ws @@ -424,18 +425,35 @@ css_error handleStartAtRule(css_language *c, const parserutils_vector *vector) if (error != CSS_OK) return error; + /* Create rule */ error = css_stylesheet_rule_create(c->sheet, CSS_RULE_IMPORT, &rule); if (error != CSS_OK) return error; + /* Resolve import URI */ + error = c->sheet->resolve(c->sheet->resolve_pw, + c->sheet->dictionary, c->sheet->url, + uri->idata, &url); + if (error != CSS_OK) { + css_stylesheet_rule_destroy(c->sheet, rule); + return error; + } + + /* Inform rule of it */ error = css_stylesheet_rule_set_nascent_import(c->sheet, - rule, uri->idata, media); + rule, url, media); if (error != CSS_OK) { + lwc_context_string_unref(c->sheet->dictionary, + url); css_stylesheet_rule_destroy(c->sheet, rule); return error; } + /* No longer care about url */ + lwc_context_string_unref(c->sheet->dictionary, url); + + /* Add rule to sheet */ error = css_stylesheet_add_rule(c->sheet, rule, NULL); if (error != CSS_OK) { css_stylesheet_rule_destroy(c->sheet, rule); |