SemanticTree: use StaticStringMap for structural role check

Improves performance and readability of isStructuralRole. Also includes minor syntax cleanup in AXNode.
This commit is contained in:
Adrià Arrufat committed 2026-03-11 16:37:24 +09:00
1 parent 1866e7141e
commit 37735b1caa
2 files changed
+17 -16

No files matched your search

+16 -15
View File
@@ -367,21 +367,22 @@ const JsonVisitor = struct {
};
fn isStructuralRole(role: []const u8) bool {
// zig fmt: off
return std.mem.eql(u8, role, "none") or
std.mem.eql(u8, role, "generic") or
std.mem.eql(u8, role, "InlineTextBox") or
std.mem.eql(u8, role, "banner") or
std.mem.eql(u8, role, "navigation") or
std.mem.eql(u8, role, "main") or
std.mem.eql(u8, role, "list") or
std.mem.eql(u8, role, "listitem") or
std.mem.eql(u8, role, "table") or
std.mem.eql(u8, role, "rowgroup") or
std.mem.eql(u8, role, "row") or
std.mem.eql(u8, role, "cell") or
std.mem.eql(u8, role, "region");
// zig fmt: on
const structural_roles = std.StaticStringMap(void).initComptime(.{
.{ "none", {} },
.{ "generic", {} },
.{ "InlineTextBox", {} },
.{ "banner", {} },
.{ "navigation", {} },
.{ "main", {} },
.{ "list", {} },
.{ "listitem", {} },
.{ "table", {} },
.{ "rowgroup", {} },
.{ "row", {} },
.{ "cell", {} },
.{ "region", {} },
});
return structural_roles.has(role);
}
const TextVisitor = struct {
+1 -1
View File
@@ -767,7 +767,7 @@ pub fn getName(self: AXNode, page: *Page, allocator: std.mem.Allocator) !?[]cons
pub fn endWriteRaw(_: @This()) void {}
};
const w = TextCaptureWriter{ .aw = &aw, .writer = &aw.writer };
const w: TextCaptureWriter = .{ .aw = &aw, .writer = &aw.writer };
const source = try self.writeName(w, page);
if (source != null) {