Пример #1
0
        public static IEnumerable<TextRunLine> ToLines( Paragraph para, int maxwidth )
        {
            int length = para.Length;

            var start = new ParagraphIterator() { Paragraph = para };
            if ( !start.TryFindAdvance((ch)=>ch!=' ') ) yield break;

            var end = start;
            end.TryFindAdvance((ch)=>ch==' ');
            start.Rewind();

            for (;;) {
                bool createline = false;
                if ( end.Run >= para.Runs ) createline = true;

                if (!createline) {
                    var possibleend = end;
                    possibleend.TryFindAdvance((ch)=>ch!=' ');
                    possibleend.TryFindAdvance((ch)=>ch==' ');
                    if ( MeasureLine(start,possibleend).Bounds.Width > maxwidth ) {
                        createline = true;
                    } else {
                        end = possibleend;
                        continue;
                    }
                }

                if (createline) {
                    yield return new TextRunLine(start,end);
                    if ( end.Run >= para.Runs ) yield break;

                    start = end;
                    start.TryFindAdvance((ch)=>ch!=' ');
                    if ( start.Run >= para.Runs ) yield break;
                    end = start;
                    end.TryFindAdvance((ch)=>ch==' ');
                }
            }
        }