diff --git a/src/md/html_renderer.zig b/src/md/html_renderer.zig
index 016f8ce94f..afeb22a05e 100644
--- a/src/md/html_renderer.zig
+++ b/src/md/html_renderer.zig
@@ -486,22 +486,27 @@ pub const HtmlRenderer = struct {
}
pub fn writeHtmlEscaped(self: *HtmlRenderer, txt: []const u8) void {
- var start: usize = 0;
- for (txt, 0..) |c, i| {
- const replacement: ?[]const u8 = switch (c) {
- '&' => "&",
- '<' => "<",
- '>' => ">",
- '"' => """,
- else => null,
+ var i: usize = 0;
+ const needle = "&<>\"";
+
+ while (true) {
+ const next = std.mem.indexOfAny(u8, txt[i..], needle) orelse {
+ self.write(txt[i..]);
+ return;
};
- if (replacement) |r| {
- if (i > start) self.write(txt[start..i]);
- self.write(r);
- start = i + 1;
+ const pos = i + next;
+ if (pos > i)
+ self.write(txt[i..pos]);
+ const c = txt[pos];
+ switch (c) {
+ '&' => self.write("&"),
+ '<' => self.write("<"),
+ '>' => self.write(">"),
+ '"' => self.write("""),
+ else => unreachable,
}
+ i = pos + 1;
}
- if (start < txt.len) self.write(txt[start..]);
}
fn writeUrlEscaped(self: *HtmlRenderer, txt: []const u8) void {