installTableHandlers method
void
installTableHandlers()
Implementation
void installTableHandlers() {
register(["hline"], (_, __, ___) => HLineNode());
register(["cline"], (cmd, ctx, stream) {
final arg = ctx.parseArgument() ?? TextNode("\\cline");
final rangeStr = switch (arg) {
TextNode() => arg.content,
GroupNode() => ParseUtils.extractText(arg.childrenNodes),
_ => "",
};
final parts = rangeStr.split("-");
final startColStr = parts.isNotEmpty ? parts[0].trim() : "";
final startCol = int.tryParse(startColStr) ?? 1;
final endColStr = parts.length > 1 ? parts[1].trim() : "";
final endCol = int.tryParse(endColStr) ?? startCol;
return CLineNode(startCol, endCol);
});
register(["multicolumn"], (cmd, ctx, stream) {
// First argument: column count
final numArg = ctx.parseArgument() ?? TextNode("\\multicolumn");
final numStr = switch (numArg) {
TextNode() => numArg.content,
GroupNode() => ParseUtils.extractText(numArg.childrenNodes),
_ => "1",
};
final columnCount = int.tryParse(numStr.trim()) ?? 1;
// Second argument: alignment
final alignArg = ctx.parseArgument() ?? TextNode("\\multicolumn");
final alignment = switch (alignArg) {
TextNode() => alignArg.content,
GroupNode() => ParseUtils.extractText(alignArg.childrenNodes),
_ => "c",
};
// Third argument: content
final contentArg = ctx.parseArgument();
if (contentArg == null) return TextNode("\\multicolumn");
final content = contentArg is GroupNode
? contentArg.childrenNodes
: [contentArg];
return MulticolumnNode(columnCount, alignment, content);
});
}