public static int EolIndex(this Paragraph para, int line) { if (para.Breaks.Count == 0) { return(para.Length - 1); } BreakList.Node n = para.Breaks.Head; n = n.Skip(line); if (n == null) { return(para.Length - 1); } return(n.Value - 1); }
public static int PositionAtLineIndex(this Paragraph para, int col, int line) { if (para.Breaks.Count == 0) { return(col.Clamp(0, para.Length - 1)); } BreakList.Node n = para.Breaks.Head; if (line == 0) { return(col.Clamp(0, n.Value - 1)); } n = n.Skip(line - 1); if (n == null) { return(para.Length - 1); } if (n.Next == null) { return(Math.Min(n.Value + col, para.Length - 1)); } return(Math.Min(n.Value + col, n.Next.Value - 1)); }