normalize method
void
normalize()
Merge touching/overlapping spans that share attr + value.
Implementation
void normalize() {
spans.removeWhere((UStyleSpan sp) => sp.end <= sp.start);
spans.sort((UStyleSpan a, UStyleSpan b) => a.attr.index != b.attr.index ? a.attr.index - b.attr.index : a.start - b.start);
final List<UStyleSpan> merged = <UStyleSpan>[];
for (final UStyleSpan sp in spans) {
if (merged.isNotEmpty) {
final UStyleSpan last = merged.last;
if (last.attr == sp.attr && last.value == sp.value && sp.start <= last.end) {
if (sp.end > last.end) last.end = sp.end;
continue;
}
}
merged.add(sp.copy());
}
spans
..clear()
..addAll(merged);
}