textPrepareInsertedGraphemes function

List<String> textPrepareInsertedGraphemes(
  1. List<int> runes, {
  2. required bool multiline,
  3. int? maxGraphemes,
})

Implementation

List<String> textPrepareInsertedGraphemes(
  List<int> runes, {
  required bool multiline,
  int? maxGraphemes,
}) {
  if (maxGraphemes != null && maxGraphemes <= 0) {
    return const <String>[];
  }

  final maxOutputCodepoints = maxGraphemes;
  if (maxOutputCodepoints != null && runes.length > maxOutputCodepoints * 4) {
    final limitedRunes = textSanitizeRunesLimited(
      runes,
      multiline: multiline,
      maxOutputCodepoints: maxOutputCodepoints,
    );
    if (limitedRunes.isEmpty) return const <String>[];
    return limitedRunes.isEmpty
        ? const <String>[]
        : uni
              .graphemes(String.fromCharCodes(limitedRunes))
              .take(maxOutputCodepoints)
              .toList(growable: false);
  }

  final sanitizedRunes = textSanitizeRunes(runes, multiline: multiline);
  final graphemes = uni
      .graphemes(String.fromCharCodes(sanitizedRunes))
      .toList(growable: false);
  if (maxOutputCodepoints == null || graphemes.length <= maxOutputCodepoints) {
    return graphemes;
  }
  return graphemes.sublist(0, maxOutputCodepoints).toList(growable: false);
}