//--------------------------------------------------------------------------- private List <LineSegment> ParseToLines(List <TextSegment> segments, int maxWidth) { List <LineSegment> lines = new List <LineSegment>(); int lineIndex = 0; LineSegment line = new LineSegment(lineIndex); foreach (TextSegment segment in segments) { int wrapIndex = 0; do { int newWrapIndex = 0; if (Wrap(segment.Text.Substring(wrapIndex), maxWidth - line.Width, out newWrapIndex)) { TextSegment extractedSegment = segment.Extract(wrapIndex, newWrapIndex); if (!string.IsNullOrWhiteSpace(extractedSegment.Text)) { line.Add(extractedSegment, Font); } line.Trim(Font); lines.Add(line); line = new LineSegment(++lineIndex); } else { if (wrapIndex > 0) { line.Add(segment.Extract(wrapIndex, segment.Text.Length - wrapIndex), Font); } else { line.Add(segment, Font); } } wrapIndex += newWrapIndex; }while (wrapIndex < segment.Text.Length); } line.Trim(Font); lines.Add(line); return(lines); }