From ca931a11be5015ef48df5e5a9b8edbf8becade7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Arrufat?= Date: Wed, 11 Mar 2026 10:45:07 +0900 Subject: [PATCH] AXNode: add spacing between concatenated text nodes When calculating accessible names for elements without explicit labels, multiple descendant text nodes were previously concatenated directly together. This adds a space between distinct text node contents to prevent words from sticking together. --- src/cdp/AXNode.zig | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/cdp/AXNode.zig b/src/cdp/AXNode.zig index b2cc236e..5fc633ec 100644 --- a/src/cdp/AXNode.zig +++ b/src/cdp/AXNode.zig @@ -777,7 +777,8 @@ pub fn getName(self: AXNode, page: *Page, allocator: std.mem.Allocator) !?[]cons const source = try self.writeName(w, page); if (source != null) { // Remove literal quotes inserted by writeString. - const raw_text = std.mem.trim(u8, aw.written(), "\""); + var raw_text = std.mem.trim(u8, aw.written(), "\""); + raw_text = std.mem.trim(u8, raw_text, &std.ascii.whitespace); return try allocator.dupe(u8, raw_text); } @@ -908,7 +909,13 @@ fn writeAccessibleNameFallback(node: *DOMNode, writer: *std.Io.Writer, page: *Pa while (it.next()) |child| { switch (child._type) { .cdata => |cd| switch (cd._type) { - .text => |*text| try writer.writeAll(text.getWholeText()), + .text => |*text| { + const content = std.mem.trim(u8, text.getWholeText(), &std.ascii.whitespace); + if (content.len > 0) { + try writer.writeAll(content); + try writer.writeByte(' '); + } + }, else => {}, }, .element => |el| {