diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2012-01-13 22:23:26 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2012-01-13 22:23:26 +0100 |
commit | a987a45a6d6bdf27aecf1ef0625801834ab27e44 (patch) | |
tree | 98723f8992c65ad81aae9f66f06d0f0bfda5ccd2 /src/cssparser.cc | |
parent | fe21a59c2c565d827147ac27f3398f2b3c2f22a4 (diff) |
fix descendant selector matching
When matching descendant selectors we need to test all
possibilities and not just the first one.
While at it refactor CssSelector::match ().
Testcase:
<html>
<head>
<style type=text/css> .a > .b .c { font-weight:bold }</style>
</head>
<body>
<div class=a>
<div class=b>
<div class=b>
<div class=c>should be bold</div>
</div>
</div>
</div>
</body>
</html>
Noticed-by: Sebastian Geerken <sgeerken@dillo.org>
Diffstat (limited to 'src/cssparser.cc')
-rw-r--r-- | src/cssparser.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/cssparser.cc b/src/cssparser.cc index 6d5b3768..306aa58c 100644 --- a/src/cssparser.cc +++ b/src/cssparser.cc @@ -1292,13 +1292,13 @@ CssSelector *CssParser::parseSelector() (tval[0] == ',' || tval[0] == '{')) { break; } else if (ttype == CSS_TK_CHAR && tval[0] == '>') { - selector->addSimpleSelector (CssSelector::CHILD); + selector->addSimpleSelector (CssSelector::COMB_CHILD); nextToken(); } else if (ttype == CSS_TK_CHAR && tval[0] == '+') { - selector->addSimpleSelector (CssSelector::ADJACENT_SIBLING); + selector->addSimpleSelector (CssSelector::COMB_ADJACENT_SIBLING); nextToken(); } else if (ttype != CSS_TK_END && spaceSeparated) { - selector->addSimpleSelector (CssSelector::DESCENDANT); + selector->addSimpleSelector (CssSelector::COMB_DESCENDANT); } else { delete selector; selector = NULL; |