示例#1
0
        private void RenderText(TextLayout layout, IContentContainer container)
        {
            List <Verse> verses = layout.GetFormattedText();

            if (verses == null)
            {
                return;
            }
            if (verses.Count == 0)
            {
                return;
            }

            //	A text layout always starts a new paragraph. If the layout's text
            //	was generated from embedded HTML then the first verse will be a
            //	paragraph verse and that will start a new Word paragraph, but
            //	otherwise we must start the Word paragraph explicitly.
            IParagraph paragraph = null;

            if (!(verses[0] is ParagraphVerse))
            {
                paragraph = container.AddParagraph((s.TextStyle)layout.Style, layout.TrackingInfo);
            }

            foreach (Verse verse in verses)
            {
                if (verse is ParagraphVerse)
                {
                    paragraph = container.AddParagraph((s.TextStyle)layout.Style, layout.TrackingInfo);
                }
                else if (verse is LineBreakVerse)
                {
                    paragraph.AddLineBreak();
                }
                else
                {
                    paragraph.AddRun(verse.Text, verse.Format.Font, verse.Format.Color);
                }
            }
        }
示例#2
0
        private void RenderListItem(ListItemLayout layout, IContentContainer container)
        {
            //	A list item, which is based on a single design layout, can
            //	include any number of design paragraphs introduced by embedded
            //	HTML <p> tags. To render these as a single item in the Word
            //	list, they must all be rendered as a single Word paragraph.
            //	We achieve this by concatenating all the design paragraphs
            //	together, with double line break separators. The first line
            //	break starts a new line, and the second inserts some whitespace.
            //
            //	A nested list is introduced by a group layout, which is a single
            //	item in the current list and which contains its own list.
            //
            //	We only support text content in list items - no photos.
            //
            //	So the list item layout's content sublayout is always either
            //	a text layout or a group layout. And the list item is always
            //	a single Word paragraph.

            //	The item style is to be found in the item's list's style
            s.ListStyle listStyle           = (s.ListStyle)layout.Style;
            s.TextStyle itemStyle           = listStyle.ItemStyle;
            IParagraph  paragraph           = container.AddParagraph(itemStyle, layout.TrackingInfo);
            int         numberingInstanceId = _numberingInstances.Peek();     // stack guaranteed not to be empty

            paragraph.SetNumbering(numberingInstanceId, _numberingLevel);

            switch (layout.ContentLayout.LayoutType)
            {
            case LayoutType.Text:
            {
                TextLayout   contentLayout = (TextLayout)layout.ContentLayout;
                List <Verse> verses        = contentLayout.GetFormattedText();
                if (verses == null)
                {
                    break;
                }
                if (verses.Count == 0)
                {
                    break;
                }
                foreach (Verse verse in verses)
                {
                    if (verse is ParagraphVerse)
                    {
                        //	Two line breaks to look like a new paragraph without actually
                        //	being a new Word paragraph. But don't do this if it's the first
                        //	verse.
                        if (verse == verses[0])
                        {
                            continue;
                        }
                        paragraph.AddLineBreak();
                        paragraph.AddLineBreak();
                    }
                    else if (verse is LineBreakVerse)
                    {
                        paragraph.AddLineBreak();
                    }
                    else
                    {
                        paragraph.AddRun(verse.Text, verse.Format.Font, verse.Format.Color);
                    }
                }
                break;
            }

            case LayoutType.Group:
            {
                foreach (Layout sublayout in layout.ContentLayout.SubLayouts)
                {
                    Render(sublayout, container);
                }
                break;
            }

            default:
            {
                break;
            }
            }
        }