feature. See also
. The project being documented here (as the example) is the Zig library itself.
Parser.startTableRow
fn startTableRow(unindented_line: []const u8) ?TableRowStart
File
Code
fn startTableRow(unindented_line: []const u8) ?TableRowStart {
if (unindented_line.len < 2 or
!mem.startsWith(u8, unindented_line, "|") or
mem.endsWith(u8, unindented_line, "\\|") or
!mem.endsWith(u8, unindented_line, "|")) return null;
var cells_buffer: [max_table_columns][]const u8 = undefined;
var cells: ArrayList([]const u8) = .initBuffer(&cells_buffer);
const table_row_content = unindented_line[1 .. unindented_line.len - 1];
var cell_start: usize = 0;
var i: usize = 0;
while (i < table_row_content.len) : (i += 1) {
switch (table_row_content[i]) {
'\\' => i += 1,
'|' => {
cells.appendBounded(table_row_content[cell_start..i]) catch return null;
cell_start = i + 1;
},
'`' => {
// code using ||, for example.
const open_start = i;
i = mem.indexOfNonePos(u8, table_row_content, i, "`") orelse return null;
const open_len = i - open_start;
while (mem.indexOfScalarPos(u8, table_row_content, i, '`')) |close_start| {
i = mem.indexOfNonePos(u8, table_row_content, close_start, "`") orelse return null;
const close_len = i - close_start;
if (close_len == open_len) break;
} else return null;
},
else => {},
}
}
cells.appendBounded(table_row_content[cell_start..]) catch return null;
return .{ .cells_buffer = cells_buffer, .cells_len = cells.items.len };
}