createName static method

String createName(
  1. String input
)

Implementation

static String createName(String input) {
  var out = StringBuffer();
  int cu(String n) => const Utf8Encoder().convert(n)[0];
  mainLoop:
  for (var i = 0; i < input.length; i++) {
    var char = input[i];

    if (char == '%' && (i + 1 < input.length)) {
      var hexA = input[i + 1].toUpperCase();
      if ((cu(hexA) >= cu('0') && cu(hexA) <= cu('9')) ||
          (cu(hexA) >= cu('A') && cu(hexA) <= cu('F'))) {
        if (i + 2 < input.length) {
          var hexB = input[i + 2].toUpperCase();
          if ((cu(hexB) > cu('0') && cu(hexB) <= cu('9')) ||
              (cu(hexB) >= cu('A') && cu(hexB) <= cu('F'))) {
            i += 2;
            out.write('%');
            out.write(hexA);
            out.write(hexB);
            continue;
          } else {
            ++i;
            out.write('%$hexA');
            continue;
          }
        }
      }
    }

    for (var bannedChar in BANNED_CHARS) {
      if (char == bannedChar) {
        var e = char.codeUnitAt(0).toRadixString(16);
        out.write('%$e'.toUpperCase());
        continue mainLoop;
      }
    }

    out.write(char);
  }
  return out.toString();
}