toCodePoints static method

Uint32List toCodePoints(
  1. String input
)

Convert provided string into an array of Unicode Code Points. Based on https://stackoverflow.com/a/21409165/1556249 and https://www.npmjs.com/package/code-point-at.

Implementation

static Uint32List toCodePoints(String input) {
  var codePoints = Uint32List(input.length);
  var sizeOffset = 0;
  var codePointIndex = 0;
  for (var i = 0; i < input.length; i++) {
    var before = input.codeUnitAt(i);

    if (before >= 0xd800 && before <= 0xdbff && input.length > i + 1) {
      var next = input.codeUnitAt(i + 1);

      if (next >= 0xdc00 && next <= 0xdfff) {
        codePoints[codePointIndex++] =
            ((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);
        i++;
        sizeOffset++;
        continue;
      }
    }
    codePoints[codePointIndex++] = (before);
  }
  codePoints = codePoints.sublist(0, codePoints.length - sizeOffset);
  return codePoints;
}