LibHTML: Parse descendant relations in CSS selectors

"div p" now generates a Selector with two components where the second
component is a type=TagName, value="p", relation=Descendant.

We still don't handle matching of these, but at least we parse them.
This commit is contained in:
Andreas Kling 2019-10-06 11:05:57 +02:00
parent 847072c2b1
commit 2a266db05b
Notes: sideshowbarker 2024-07-19 11:48:09 +09:00
3 changed files with 9 additions and 1 deletions

View file

@ -18,6 +18,7 @@ public:
enum class Relation {
None,
ImmediateChild,
Descendant,
};
Relation relation { Relation::None };

View file

@ -155,6 +155,9 @@ void dump_rule(const StyleRule& rule)
case Selector::Component::Relation::ImmediateChild:
relation_description = "{ImmediateChild}";
break;
case Selector::Component::Relation::Descendant:
relation_description = "{Descendant}";
break;
}
dbgprintf(" %s:%s %s\n", type_description, component.value.characters(), relation_description);
}

View file

@ -88,7 +88,7 @@ public:
{
consume_whitespace();
Selector::Component::Type type;
Selector::Component::Relation relation = Selector::Component::Relation::None;
Selector::Component::Relation relation = Selector::Component::Relation::Descendant;
if (peek() == '{')
return {};
@ -149,6 +149,10 @@ public:
break;
}
if (components.is_empty())
return;
components.first().relation = Selector::Component::Relation::None;
current_rule.selectors.append(Selector(move(components)));
};