algorithmSuggestion function

(String, List<String>) algorithmSuggestion(
  1. String latin
)

Implementation

(String, List<String>) algorithmSuggestion(String latin) {
  var correctedLatin = latin.replaceAll('ng', 'N');
  final List<String> menkStrings = [''];
  for (;;) {
    menkStrings.clear();
    menkStrings.add('');
    var shouldContine = false;
    for (int i = 0; i < correctedLatin.length; i++) {
      final currentLetter = correctedLatin[i];
      final length = menkStrings.length;
      var shouldBreak = false;
      for (var j = 0; j < length; j++) {
        final menkString = menkStrings[j];
        final converterContext = Context(
          index: i,
          latin: correctedLatin,
          previousCode: menkString.isNotEmpty
              ? menkString.codeUnitAt(menkString.length - 1)
              : null,
        );
        final codes = converters[currentLetter]?.call(converterContext);
        if (codes == null) {
          // current letter is not supported, delete the current letter
          if (i == 0) {
            correctedLatin = correctedLatin.substring(1);
          } else if (i >= correctedLatin.length) {
            correctedLatin = correctedLatin.substring(0, i - 1);
          } else {
            correctedLatin = correctedLatin.substring(0, i) +
                correctedLatin.substring(i + 1);
          }
          shouldContine = true;
          shouldBreak = true;
          break;
        }
        menkStrings[j] = menkString + String.fromCharCode(codes[0]);
        if (codes.length > 1) {
          for (var k = 1; k < codes.length; k++) {
            menkStrings.add(menkString + String.fromCharCode(codes[k]));
          }
        }
      }
      if (shouldBreak) break;
    }
    if (shouldContine) continue;
    break;
  }
  return (correctedLatin, menkStrings);
}