glyphs method
Returns an iterator that traverses the glyphs in a line in visual order taking into account both the paragraph's runs bidi order and the individual glyphs bidi order within a run.
Implementation
Iterable<LineRunGlyph> glyphs(Paragraph paragraph) sync* {
  var displayRuns = <GlyphRun>[];
  var glyphRuns = paragraph.runs;
  for (int i = startRun; i < endRun + 1; i++) {
    displayRuns.add(glyphRuns[i]);
  }
  var startRunRef = displayRuns.first;
  var endRunRef = displayRuns.last;
  var visualRuns = orderVisually(displayRuns);
  for (final run in visualRuns) {
    int startGIndex = startRunRef == run ? startIndex : 0;
    int endGIndex = endRunRef == run ? endIndex : run.glyphCount;
    int j, end, inc;
    if (run.direction == TextDirection.rtl) {
      j = endGIndex - 1;
      end = startGIndex - 1;
      inc = -1;
    } else {
      j = startGIndex;
      end = endGIndex;
      inc = 1;
    }
    while (j != end) {
      yield LineRunGlyph(run, j);
      j += inc;
    }
  }
}