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