dump: handle void HTML elements

This commit is contained in:
Pierre Tachoire
2024-02-29 15:37:22 +01:00
parent 45172461c7
commit 6777ab9f3d

View File

@@ -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();