Пример #1
0
        //---------------------------------------------------------------------------

        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);
        }