orderVisually function

List<GlyphRun> orderVisually(
  1. List<GlyphRun> glyphRuns
)

Implementation

List<GlyphRun> orderVisually(List<GlyphRun> glyphRuns) {
  final List<GlyphRun> orderedRuns = [];
  int maxLevel = 0;
  for (final run in glyphRuns) {
    if (run.level > maxLevel) {
      maxLevel = run.level;
    }
    orderedRuns.add(run);
  }

  for (int newLevel = maxLevel; newLevel > 0; newLevel--) {
    for (int start = orderedRuns.length - 1; start >= 0; start--) {
      if (orderedRuns[start].level >= newLevel) {
        int count = 1;
        for (; start > 0 && orderedRuns[start - 1].level >= newLevel; start--) {
          count++;
        }
        _reverseRuns(orderedRuns, start, count);
      }
    }
  }

  return orderedRuns;
}