splitLines function
Splits multi-line content
Performance optimization: First checks if a NewLine node exists, and if not, returns a single-line wrapper directly to avoid list allocation
Implementation
List<List<LatexNode>> splitLines(List<LatexNode> nodes) {
// Short-circuit: return directly when there are no NewLine nodes, avoiding mutableList allocation
if (!nodes.any((node) => node is NewLineNode)) {
return [nodes];
}
final result = <List<LatexNode>>[];
var current = <LatexNode>[];
for (final node in nodes) {
if (node is NewLineNode) {
result.add(current);
current = <LatexNode>[];
} else {
current.add(node);
}
}
if (current.isNotEmpty || result.isEmpty) {
result.add(current);
}
return result;
}