mapOffsetsToListLengths function

List<LineData> mapOffsetsToListLengths(
  1. List<int> offsets,
  2. int length
)

Implementation

List<LineData> mapOffsetsToListLengths(List<int> offsets, int length) {
  if (offsets.isEmpty) return [];
  if (length < offsets.last) {
    throw StateError('Incorrect node length');
  }

  if (offsets.length == 1) {
    return [
      LineData(
        startOffset: 0,
        lineLength: length,
      )
    ];
  }

  final lengths = offsets.mapIndexed(
    (index, currentOffset) {
      final nextOffset = offsets.elementAtOrNull(index + 1) ?? length;
      return nextOffset - currentOffset;
    },
  );

  return lengths
      .mapIndexed(
        (index, lineLength) => LineData(
          startOffset: offsets[index],
          lineLength: lineLength,
        ),
      )
      .toList();
}