summaryrefslogtreecommitdiff
path: root/src/css.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/css.cc')
-rw-r--r--src/css.cc13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/css.cc b/src/css.cc
index 8b3e5371..aa799002 100644
--- a/src/css.cc
+++ b/src/css.cc
@@ -104,6 +104,7 @@ CssSelector::CssSelector () {
cs = selectorList->getRef (selectorList->size () - 1);
cs->notMatchingBefore = -1;
+ cs->combinator = CHILD;
cs->selector = new CssSimpleSelector ();
};
@@ -133,6 +134,7 @@ bool CssSelector::match (Doctree *docTree, const DoctreeNode *node) {
switch (comb) {
case CHILD:
+ case ADJACENT_SIBLING:
if (!sel->match (node))
return false;
break;
@@ -148,7 +150,7 @@ bool CssSelector::match (Doctree *docTree, const DoctreeNode *node) {
if (sel->match (node))
break;
- node = docTree->parent (node);
+ node = node->parent;
}
break;
default:
@@ -156,7 +158,11 @@ bool CssSelector::match (Doctree *docTree, const DoctreeNode *node) {
}
comb = cs->combinator;
- node = docTree->parent (node);
+
+ if (comb == ADJACENT_SIBLING)
+ node = node->sibling;
+ else
+ node = node->parent;
}
return true;
@@ -200,6 +206,9 @@ void CssSelector::print () {
case DESCENDANT:
fprintf (stderr, "\" \" ");
break;
+ case ADJACENT_SIBLING:
+ fprintf (stderr, "+ ");
+ break;
default:
fprintf (stderr, "? ");
break;