sliceSpans method

List<UEpubSpan> sliceSpans(
  1. int start,
  2. int end
)

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