getText method

String getText([
  1. int? from,
  2. int? to
])

Implementation

String getText([int? from, int? to]) {
  if (from == null || from < 0) {
    from = 0;
  }

  if (to == null || to > _length) {
    to = _length;
  }

  if (from > 0 &&
      from < _length &&
      getWidth(from) == 0 &&
      getWidth(from - 1) == 2) {
    from--;
  }
  if (to > 0 && to < _length && getWidth(to) == 0 && getWidth(to - 1) == 2) {
    to++;
  }

  to = min(to, getTrimmedLength(to));
  final builder = StringBuffer();
  var tabPadding = false;
  for (var i = from; i < to; i++) {
    final codePoint = getCodePoint(i);
    final width = getWidth(i);
    if (codePoint == 0) {
      if (tabPadding) continue;
      if (i > 0 && getWidth(i - 1) == 2) continue;
      builder.writeCharCode(0x20);
    } else if (i + width <= to) {
      tabPadding = codePoint == 0x09;
      builder.writeCharCode(codePoint);
      final combining = _combiningCharacters?[i];
      if (combining != null) {
        builder.write(combining);
      }
    }
  }

  return builder.toString();
}