diff options
author | Jeremy Henty <onepoint@starurchin.org> | 2010-12-18 17:18:13 +0000 |
---|---|---|
committer | Jeremy Henty <onepoint@starurchin.org> | 2010-12-18 17:18:13 +0000 |
commit | c35be8734a8fa8e80e247037530b9b7d39cf1a53 (patch) | |
tree | 2849fadcd0709b8c831ed28cd11086d8001732ad /src/cssparser.cc | |
parent | a45f583b19df9a10c28717214851ae2447ab13b9 (diff) |
CssParser::parseImport(): implement media-conditional @import rules.
Diffstat (limited to 'src/cssparser.cc')
-rw-r--r-- | src/cssparser.cc | 43 |
1 files changed, 37 insertions, 6 deletions
diff --git a/src/cssparser.cc b/src/cssparser.cc index 16fcdf03..aa4cea56 100644 --- a/src/cssparser.cc +++ b/src/cssparser.cc @@ -1423,6 +1423,9 @@ char * CssParser::parseUrl() void CssParser::parseImport(DilloHtml *html, DilloUrl *baseUrl) { char *urlStr = NULL; + bool importSyntaxIsOK = false; + bool mediaSyntaxIsOK = true; + bool mediaIsSelected = true; nextToken(); @@ -1432,14 +1435,42 @@ void CssParser::parseImport(DilloHtml *html, DilloUrl *baseUrl) else if (ttype == CSS_TK_STRING) urlStr = dStrdup (tval); - ignoreStatement(); + nextToken(); + + /* parse a comma-separated list of media */ + if (ttype == CSS_TK_SYMBOL) { + mediaSyntaxIsOK = false; + mediaIsSelected = false; + while (ttype == CSS_TK_SYMBOL) { + if (dStrcasecmp(tval, "all") == 0 || + dStrcasecmp(tval, "screen") == 0) + mediaIsSelected = true; + nextToken(); + if (ttype == CSS_TK_CHAR && tval[0] == ',') { + nextToken(); + } else { + mediaSyntaxIsOK = true; + break; + } + } + } + + if (mediaSyntaxIsOK && + ttype == CSS_TK_CHAR && + tval[0] == ';') { + importSyntaxIsOK = true; + nextToken(); + } else + ignoreStatement(); if (urlStr) { - MSG("CssParser::parseImport(): @import %s\n", urlStr); - DilloUrl *url = a_Html_url_new (html, urlStr, a_Url_str(baseUrl), - baseUrl ? 1 : 0); - a_Html_load_stylesheet(html, url); - a_Url_free(url); + if (importSyntaxIsOK && mediaIsSelected) { + MSG("CssParser::parseImport(): @import %s\n", urlStr); + DilloUrl *url = a_Html_url_new (html, urlStr, a_Url_str(baseUrl), + baseUrl ? 1 : 0); + a_Html_load_stylesheet(html, url); + a_Url_free(url); + } dFree (urlStr); } } |