decompose function

String decompose(
  1. String source,
  2. List<Decomposer> decomposers
)

The simplest non-recursive decomposition algorithm.

For example, it can be used to decompose characters with a specified font variant.

Implementation

String decompose(String source, List<Decomposer> decomposers) {
  final list = <int>[];
  final runes = source.runes;
  for (final rune in runes) {
    var done = false;
    for (var i = 0; i < decomposers.length; i++) {
      final decomposer = decomposers[i];
      final characters = decomposer.decompose(rune);
      if (characters != null) {
        done = true;
        list.addAll(characters);
        break;
      }
    }

    if (!done) {
      list.add(rune);
    }
  }

  return String.fromCharCodes(list);
}