collectAllIndividualStylesAndEmbed method

List<OffsetValue> collectAllIndividualStylesAndEmbed(
  1. int offset,
  2. int len, {
  3. int beg = 0,
})

Returns each node segment's offset in selection with its corresponding style or embed as a list

Implementation

List<OffsetValue> collectAllIndividualStylesAndEmbed(int offset, int len,
    {int beg = 0}) {
  final local = math.min(length - offset, len);
  final result = <OffsetValue>[];

  final data = queryChild(offset, true);
  var node = data.node as Leaf?;
  if (node != null) {
    var pos = math.min(local, node.length - data.offset);
    if (node is QuillText && node.style.isNotEmpty) {
      result.add(OffsetValue(beg, node.style, pos));
    } else if (node.value is Embeddable) {
      result.add(OffsetValue(beg, node.value as Embeddable, pos));
    }

    while (!node!.isLast && pos < local) {
      node = node.next as Leaf;
      final span = math.min(local - pos, node.length);
      if (node is QuillText && node.style.isNotEmpty) {
        result.add(OffsetValue(pos + beg, node.style, span));
      } else if (node.value is Embeddable) {
        result.add(OffsetValue(pos + beg, node.value as Embeddable, span));
      }
      pos += node.length;
    }

    if (style.isNotEmpty) {
      result.add(OffsetValue(beg, style, pos));
    }
  }

  final remaining = len - local;
  if (remaining > 0 && nextLine != null) {
    final rest = nextLine!
        .collectAllIndividualStylesAndEmbed(0, remaining, beg: local + beg);
    result.addAll(rest);
  }

  return result;
}