"); try inlineMd(ww, p.items); try ww.writeAll("
\n"); p.clearRetainingCapacity(); } if (list.*) { try ww.writeAll("\n"); list.* = false; } } }.call; while (lines.next()) |line| { // pass raw");
while (lines.next()) |code| {
if (std.mem.startsWith(u8, code, "```")) break;
try escape(w, code);
try w.writeByte('\n');
}
try w.writeAll("\n");
continue;
}
const heading = headingLevel(line);
if (heading > 0) {
try flush(w, ¶, &in_list);
try w.print("");
try escape(w, text[i + 1 .. end]);
try w.writeAll("");
i = end + 1;
continue;
}
} else if (c == '[') {
if (parseLink(text[i..])) |lnk| {
try w.writeAll("");
try escape(w, lnk.text);
try w.writeAll("");
i += lnk.len;
continue;
}
}
try escapeByte(w, c);
i += 1;
}
}
const Link = struct { text: []const u8, url: []const u8, len: usize };
fn parseLink(s: []const u8) ?Link {
const close = std.mem.indexOfScalar(u8, s, ']') orelse return null;
if (close + 1 >= s.len or s[close + 1] != '(') return null;
const paren = std.mem.indexOfScalarPos(u8, s, close + 2, ')') orelse return null;
return .{ .text = s[1..close], .url = s[close + 2 .. paren], .len = paren + 1 };
}
/// lines that are a raw