Iterable validateZalgo()

in pkg/pub_package_reader/lib/pub_package_reader.dart [323:343]


Iterable<ArchiveIssue> validateZalgo(String field, String? text) sync* {
  if (text == null) return;
  // Checks if the code is in the combining character unicode ranges:
  // https://en.wikipedia.org/wiki/Combining_character
  bool isDiacritic(int code) =>
      (code >= 0x0300 && code <= 0x036F) ||
      (code >= 0x1AB0 && code <= 0x1AFF) ||
      (code >= 0x1DC0 && code <= 0x1DFF) ||
      (code >= 0x20D0 && code <= 0x20FF) ||
      (code >= 0xFE20 && code <= 0xFE2F) ||
      (code == 0x3099) ||
      (code == 0x309A);
  final codes = text.codeUnits;
  for (var i = 1; i < codes.length; i++) {
    // checks for consecutive diacritical marks
    if (isDiacritic(codes[i]) && isDiacritic(codes[i - 1])) {
      yield ArchiveIssue('`$field` contains too many diacritical marks.');
      break;
    }
  }
}