toRunes function

List<int> toRunes(
  1. String string
)

Implementation

List<int> toRunes(String string) {
  if (string == null) {
    throw ArgumentError('string: $string');
  }

  final length = string.length;
  if (length == 0) {
    return const <int>[];
  }

  final runes = List.filled(length, 0);
  var i = 0;
  var pos = 0;
  for ( ; i < length; pos++) {
    final start = string.codeUnitAt(i);
    i++;
    if ((start & 0xFC00) == 0xD800 && i < length) {
      final end = string.codeUnitAt(i);
      if ((end & 0xFC00) == 0xDC00) {
        runes[pos] = (0x10000 + ((start & 0x3FF) << 10) + (end & 0x3FF));
        i++;
      } else {
        runes[pos] = start;
      }
    } else {
      runes[pos] = start;
    }
  }

  return runes.sublist(0, pos);
}