One page's text as a selection sees it: the glyphs of its hit-test index in reading order, each with its box and its logical
text (ActualText applied), and the word, line and paragraph boundaries between them. Positions (carets) are offsets
0 to Length between glyphs. Immutable, so safe to share between threads.
public sealed class SelectableText
ISO 32000-2 §9.4.4 (glyph positions), §14.8.2.5 (reading order), §14.9.4 (replacement text). Spec #33 viewer capability 4. Every query a pointer move makes (GetOffset(PathPoint), GetGlyphAt(PathPoint), GetQuads(Int32, Int32, Span<Quad>)) allocates nothing.
kind:method, kind:property, kind:ctor. Press Esc to clear.IndexGets the page's hit-test index, whose glyphs this text orders.LengthGets the number of selectable glyphs: the largest caret offset.PageGets the page.Create(PdfPage, HitTestIndex, IReadingOrderProvider?)Builds a page's selectable text.FindLink(PathPoint)Gets the link annotation under a point, for hover feedback and activation.GetGlyphAt(PathPoint)Gets the selectable glyph under a point, in default user space.GetGlyphIndex(Int32)Gets the hit-test glyph at a reading position.GetGlyphText(Int32)Gets the logical text of the glyph at a reading position (empty for a glyph whose sequence's replacement text another glyph carries).GetLineRange(Int32)Gets the line around a glyph: glyphs in reading order on one baseline.GetNearestGlyph(PathPoint)Gets the reading position of the glyph nearest a point (on it, or the nearest by GetOffset(PathPoint)'s rule).GetOffset(PathPoint)Gets the caret offset nearest a point: on a glyph, before or after it by which half the point falls in; elsewhere, by the nearest glyph, preferring the line level with the point (so a point past a line's end selects to its end).GetParagraphRange(Int32)Gets the paragraph around a glyph: lines up to a gap wider than a line, or a change of direction.GetPosition(Int32)Gets the reading position of a hit-test glyph.GetQuads(Int32, Int32, Span<Quad>)Gets the quadrilaterals that cover the glyphs from start to end: one per run of glyphs on a line, turned with the text (a rotated line gives a rotated quad), in default user space.GetText(Int32, Int32)Gets the text from start to end in reading order, for copying.GetWordRange(Int32)Gets the word around a glyph: a run of letters and digits, of punctuation, or of white space, on one line.