From dcc7e51556f56738151624bc7f75beb25338718e Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Mon, 25 Mar 2024 17:09:11 +0100 Subject: [PATCH] css: implement ~, + and > combinators --- src/css/selector.zig | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/css/selector.zig b/src/css/selector.zig index ee637549..696203d5 100644 --- a/src/css/selector.zig +++ b/src/css/selector.zig @@ -264,7 +264,34 @@ pub const Selector = union(enum) { return false; }, - else => return Error.UnknownCombinedCombinator, + .child => { + const p = try n.parent(); + if (p == null) return false; + + return try v.second.match(n) and try v.first.match(p.?); + }, + .next_sibling => { + if (!try v.second.match(n)) return false; + var c = try n.prevSibling(); + while (c != null) { + if (!c.?.isElement()) { // TODO must check text node or comment node instead. + c = try c.?.prevSibling(); + continue; + } + return try v.first.match(c.?); + } + return false; + }, + .subsequent_sibling => { + if (!try v.second.match(n)) return false; + + var c = try n.prevSibling(); + while (c != null) { + if (try v.first.match(c.?)) return true; + c = try c.?.prevSibling(); + } + return false; + }, }; }, .attribute => |v| {