From 4e61a50946d638915b204513c8ef4d0538c73eed Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Mon, 25 Mar 2024 17:45:19 +0100 Subject: [PATCH] css: add isEmptyText in node interface --- src/css/libdom.zig | 8 ++++++++ src/css/match_test.zig | 4 ++++ src/css/selector.zig | 6 ++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/css/libdom.zig b/src/css/libdom.zig index 93acb790..4166b216 100644 --- a/src/css/libdom.zig +++ b/src/css/libdom.zig @@ -61,6 +61,14 @@ pub const Node = struct { return t == .text; } + pub fn isEmptyText(n: Node) !bool { + const data = try parser.nodeTextContent(n.node); + if (data == null) return true; + if (data.?.len == 0) return true; + + return std.mem.trim(u8, data.?, &std.ascii.whitespace).len == 0; + } + pub fn tag(n: Node) ![]const u8 { return try parser.nodeName(n.node); } diff --git a/src/css/match_test.zig b/src/css/match_test.zig index 796ee7d7..f30f2e5b 100644 --- a/src/css/match_test.zig +++ b/src/css/match_test.zig @@ -48,6 +48,10 @@ pub const Node = struct { return false; } + pub fn isEmptyText(_: *const Node) !bool { + return false; + } + pub fn tag(n: *const Node) ![]const u8 { return n.name; } diff --git a/src/css/selector.zig b/src/css/selector.zig index e678fb1d..fbe782d3 100644 --- a/src/css/selector.zig +++ b/src/css/selector.zig @@ -383,8 +383,10 @@ pub const Selector = union(enum) { while (c != null) { if (c.?.isElement()) return false; - // TODO check text node content equals an empty - // string ("") + if (c.?.isText()) { + if (try c.?.isEmptyText()) continue; + return false; + } c = try c.?.nextSibling(); }