toRunes function
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);
}