summaryrefslogtreecommitdiff
path: root/src/parse/language.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2009-07-01 11:18:39 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2009-07-01 11:18:39 +0000
commit9168c67c5439783069fb29e9c0798ff9d149c0ec (patch)
tree3dbea43276f6d4ec2ff7e420d6eea79e184f0e57 /src/parse/language.c
parent94ff706d99220d915be8cedcda6b93ead998f5b8 (diff)
downloadlibcss-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.c20
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);