sliceSpans method
Spans covering [start, end) of text with their inline formatting intact.
Implementation
List<UEpubSpan> sliceSpans(int start, int end) {
final List<UEpubSpan> out = <UEpubSpan>[];
int cursor = 0;
for (final UEpubSpan span in spans) {
final int spanEnd = cursor + span.text.length;
if (spanEnd > start && cursor < end) {
final int from = max(start, cursor) - cursor;
final int to = min(end, spanEnd) - cursor;
out.add(from == 0 && to == span.text.length ? span : span.withText(span.text.substring(from, to)));
}
cursor = spanEnd;
if (cursor >= end) break;
}
return out;
}