From d20900446be9506c189a7a8912d229e0f5690aa7 Mon Sep 17 00:00:00 2001 From: Meghan Denny Date: Fri, 13 Aug 2021 23:07:25 -0700 Subject: [PATCH] properly close void and non-void html tags --- src/lib.zig | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/lib.zig b/src/lib.zig index 6745d48ec33f9cc399f0674e863b11a06ebed92c..356072a6b304798e927b2e131f389865033db16c 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -39,7 +39,11 @@ fn do(writer: anytype, comptime value: astgen.Value, data: anytype, ctx: anytype } if (v.children.len == 0) { - try writer.writeAll(" />\n"); + if (contains(std.meta.fieldNames(HtmlVoidElements), v.name)) { + try writer.writeAll(" />\n"); + } else { + try writer.print(">\n", .{v.name}); + } } else { try writer.writeAll(">"); @@ -179,3 +183,29 @@ fn entityLookupBefore(in: []const u8) ?htmlentities.Entity { fn assertEqual(comptime a: usize, comptime b: usize) void { if (a != b) @compileError(std.fmt.comptimePrint("{d} != {d}", .{ a, b })); } + +const HtmlVoidElements = enum { + area, + base, + br, + col, + embed, + hr, + img, + input, + link, + meta, + param, + source, + track, + wbr, +}; + +fn contains(haystack: []const []const u8, needle: []const u8) bool { + for (haystack) |v| { + if (std.mem.eql(u8, v, needle)) { + return true; + } + } + return false; +} -- 2.54.0