feature. See also
. The project being documented here (as the example) is the Zig library itself.
Parser.startListItem
fn startListItem(unindented_line: []const u8) ?ListItemStart
File
Code
fn startListItem(unindented_line: []const u8) ?ListItemStart {
if (mem.startsWith(u8, unindented_line, "- ")) {
return .{
.marker = .@"-",
.number = undefined,
.marker_len = 2,
.rest = unindented_line[2..],
};
} else if (mem.startsWith(u8, unindented_line, "* ")) {
return .{
.marker = .@"*",
.number = undefined,
.marker_len = 2,
.rest = unindented_line[2..],
};
} else if (mem.startsWith(u8, unindented_line, "+ ")) {
return .{
.marker = .@"+",
.number = undefined,
.marker_len = 2,
.rest = unindented_line[2..],
};
}
const number_end = mem.indexOfNone(u8, unindented_line, "0123456789") orelse return null;
const after_number = unindented_line[number_end..];
const marker: Block.Data.ListMarker = if (mem.startsWith(u8, after_number, ". "))
.number_dot
else if (mem.startsWith(u8, after_number, ") "))
.number_paren
else
return null;
const number = std.fmt.parseInt(u30, unindented_line[0..number_end], 10) catch return null;
if (number > 999_999_999) return null;
return .{
.marker = marker,
.number = number,
.marker_len = number_end + 2,
.rest = after_number[2..],
};
}