splitLines function

List<List<LatexNode>> splitLines(
  1. List<LatexNode> nodes
)

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;
}