diff options
author | John Mark Bell <jmb@netsurf-browser.org> | 2009-02-10 00:39:18 +0000 |
---|---|---|
committer | John Mark Bell <jmb@netsurf-browser.org> | 2009-02-10 00:39:18 +0000 |
commit | 43b8d99a4caba7fe0557117c4cd9ae4554b8a79e (patch) | |
tree | ba2652fb45e789984e73e12c0ec9db14a5960b27 /src/parse/language.c | |
parent | 7d50c0354fbcf7d4721f19bdf88286b56484eddb (diff) | |
download | libcss-43b8d99a4caba7fe0557117c4cd9ae4554b8a79e.tar.gz libcss-43b8d99a4caba7fe0557117c4cd9ae4554b8a79e.tar.bz2 |
Distinguish between pseudo classes and pseudo elements
svn path=/trunk/libcss/; revision=6406
Diffstat (limited to 'src/parse/language.c')
-rw-r--r-- | src/parse/language.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/parse/language.c b/src/parse/language.c index 97b9f66..364192a 100644 --- a/src/parse/language.c +++ b/src/parse/language.c @@ -694,6 +694,7 @@ css_error parsePseudo(css_language *c, const parserutils_vector *vector, int *ctx, css_selector_detail *specific) { const css_token *token, *name, *value = NULL; + css_selector_type type; /* pseudo -> ':' [ IDENT | FUNCTION ws IDENT? ws ')' ] */ @@ -725,9 +726,28 @@ css_error parsePseudo(css_language *c, const parserutils_vector *vector, return CSS_INVALID; } + if (name->ilower == c->strings[FIRST_CHILD] || + name->ilower == c->strings[LINK] || + name->ilower == c->strings[VISITED] || + name->ilower == c->strings[HOVER] || + name->ilower == c->strings[ACTIVE] || + name->ilower == c->strings[FOCUS] || + name->ilower == c->strings[LANG] || + name->ilower == c->strings[LEFT] || + name->ilower == c->strings[RIGHT] || + name->ilower == c->strings[FIRST]) + type = CSS_SELECTOR_PSEUDO_CLASS; + else if (name->ilower == c->strings[FIRST_LINE] || + name->ilower == c->strings[FIRST_LETTER] || + name->ilower == c->strings[BEFORE] || + name->ilower == c->strings[AFTER]) + type = CSS_SELECTOR_PSEUDO_ELEMENT; + else + return CSS_INVALID; + return css_stylesheet_selector_detail_init(c->sheet, - CSS_SELECTOR_PSEUDO, name->idata, - value != NULL ? value->idata : NULL, specific); + type, name->idata, value != NULL ? value->idata : NULL, + specific); } css_error parseSpecific(css_language *c, |