orderVisually function 
 
    
    
    
  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;
}