aboutsummaryrefslogtreecommitdiff
path: root/src/cssparser.cc
diff options
context:
space:
mode:
authorJeremy Henty <onepoint@starurchin.org>2010-12-18 17:18:13 +0000
committerJeremy Henty <onepoint@starurchin.org>2010-12-18 17:18:13 +0000
commitc35be8734a8fa8e80e247037530b9b7d39cf1a53 (patch)
tree2849fadcd0709b8c831ed28cd11086d8001732ad /src/cssparser.cc
parenta45f583b19df9a10c28717214851ae2447ab13b9 (diff)
CssParser::parseImport(): implement media-conditional @import rules.
Diffstat (limited to 'src/cssparser.cc')
-rw-r--r--src/cssparser.cc43
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);
}
}