示例#1
0
        private void BuildParagraph(BuildingContext context, int paragraphIndex)
        {
            var para = context.Text.Paragraphs[paragraphIndex];

            ApplyMarginUp(context, para);

            var subspans = BuildParagraphSubspans(context, paragraphIndex);

            var flushedSubspanCount = 0;

            while (flushedSubspanCount < subspans.Count)
            {
                var minimalSubspans = new SubList <Subspan>(subspans, flushedSubspanCount, 0);

                for (var i = flushedSubspanCount; i < subspans.Count; i++)
                {
                    minimalSubspans = minimalSubspans.WithNext();
                    if (subspans[i].CanBreakAfter)
                    {
                        break;
                    }
                }

                if (!TryAllocateNewStrip(context, minimalSubspans))
                {
                    return;
                }

                var subspansToFlush = minimalSubspans;
                var subspansToTry   = subspansToFlush.WithNext();
                var tabOffset       = context.Text.Paragraphs[paragraphIndex].Style.TabCount * 80f;
                while (flushedSubspanCount + subspansToFlush.Count < subspans.Count && CanFitSubspans(context, subspansToTry, tabOffset))
                {
                    subspansToFlush = subspansToTry;
                    subspansToTry   = subspansToFlush.WithNext();
                }

                var isFirstStrip = flushedSubspanCount == 0;
                var isLastStrip  = flushedSubspanCount + subspansToFlush.Count == subspans.Count;
                FlushStrip(context, paragraphIndex, tabOffset, subspansToFlush, isFirstStrip, isLastStrip);
                flushedSubspanCount += subspansToFlush.Count;
            }
        }