formatRange method

EasyTextChange? formatRange(
  1. int index,
  2. int len,
  3. EasyAttributeStyles? style, {
  4. bool overrideStylesIfEmpty = true,
})

Applies formatting to a range of text starting at index for len characters.

Example:

final text = EasyText.fromStr(text: 'Hello World');
// Formats 'World' as bold
text.formatRange(6, 5, EasyAttributeStyles.fromAttribute(BoldAttribute()));

Implementation

EasyTextChange? formatRange(
  int index,
  int len,
  EasyAttributeStyles? style, {
  bool overrideStylesIfEmpty = true,
}) {
  if (style == null || len <= 0) {
    return null;
  }

  final int local = math.min<int>(length - index, len);
  final int remain = len - local;
  final EasyText part = extractAt(index, local);

  if (remain > 0 && part.next != null) {
    part.next?.formatRange(
      0,
      remain,
      style,
      overrideStylesIfEmpty: overrideStylesIfEmpty,
    );
  }
  part.format(
    style,
    overrideStylesIfEmpty,
  );

  return EasyTextChange(
    start: index,
    length: len,
    delta: Delta()
      ..retain(index)
      ..retain(len, style.toJson()),
    inverted: Delta()
      ..retain(index)
      ..retain(
        len,
        // return the equivalent style for remove
        style.invert().toJson(),
      ),
  );
}