From 6777ab9f3da494b65dbc509728a6abe3e1ef02db Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Thu, 29 Feb 2024 15:37:22 +0100 Subject: [PATCH] dump: handle void HTML elements --- src/browser/dump.zig | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/browser/dump.zig b/src/browser/dump.zig index a1c3c11d..f46faa54 100644 --- a/src/browser/dump.zig +++ b/src/browser/dump.zig @@ -40,6 +40,9 @@ pub fn writeNode(root: *parser.Node, writer: anytype) !void { try writer.writeAll(">"); + // void elements can't have any content. + if (try isVoid(parser.nodeToElement(next.?))) continue; + // write the children // TODO avoid recursion try writeNode(next.?, writer); @@ -83,6 +86,17 @@ pub fn writeNode(root: *parser.Node, writer: anytype) !void { } } +// area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr +// https://html.spec.whatwg.org/#void-elements +fn isVoid(elem: *parser.Element) !bool { + const tag = try parser.elementHTMLGetTagType(@as(*parser.ElementHTML, @ptrCast(elem))); + return switch (tag) { + .area, .base, .br, .col, .embed, .hr, .img, .input, .link => true, + .meta, .source, .track, .wbr => true, + else => false, + }; +} + test "dump.writeHTML" { const out = try std.fs.openFileAbsolute("/dev/null", .{ .mode = .write_only }); defer out.close();