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