feature. See also
. The project being documented here (as the example) is the Zig library itself.
Parser.parseTableHeaderDelimiterCell
fn parseTableHeaderDelimiterCell(content: []const u8) ?Node.TableCellAlignment
File
Code
fn parseTableHeaderDelimiterCell(content: []const u8) ?Node.TableCellAlignment {
var state: enum {
before_rule,
after_left_anchor,
in_rule,
after_right_anchor,
after_rule,
} = .before_rule;
var left_anchor = false;
var right_anchor = false;
for (content) |c| {
switch (state) {
.before_rule => switch (c) {
' ' => {},
':' => {
left_anchor = true;
state = .after_left_anchor;
},
'-' => state = .in_rule,
else => return null,
},
.after_left_anchor => switch (c) {
'-' => state = .in_rule,
else => return null,
},
.in_rule => switch (c) {
'-' => {},
':' => {
right_anchor = true;
state = .after_right_anchor;
},
' ' => state = .after_rule,
else => return null,
},
.after_right_anchor => switch (c) {
' ' => state = .after_rule,
else => return null,
},
.after_rule => switch (c) {
' ' => {},
else => return null,
},
}
}
switch (state) {
.before_rule,
.after_left_anchor,
=> return null,
.in_rule,
.after_right_anchor,
.after_rule,
=> {},
}
return if (left_anchor and right_anchor)
.center
else if (left_anchor)
.left
else if (right_anchor)
.right
else
.unset;
}