コード例 #1
0
        /// <summary>
        /// Generate list
        /// </summary>
        /// <param name="items">List of items</param>
        /// <param name="shape">Text shape</param>
        /// <param name="level">Indentation level</param>
        /// <param name="type">Type of list (bulleted/numbered)</param>
        /// <returns>true if completed; false if paused</returns>
        private bool GenerateList(List<Node> items, PowerPoint.Shape shape, int level, MsoBulletType type)
        {
            Stack<Node> nodes = new Stack<Node>();

            Node currentNode;

            // skip expanding of child nodes to stack
            bool skip;

            // show bullet in item
            bool show_bullet;

            int itemStartAt, realItemStartAt;
            int itemsCount = 0;
            int paragraphs;

            foreach (Node item in items)
            {
                show_bullet = true;
                realItemStartAt = itemStartAt = shape.TextFrame2.TextRange.Text.Length;
                paragraphs = 0;
                itemsCount++;
                _format.Invalidate();

                // copy content to stack
                foreach (Node node in item.Children.Reverse<Node>())
                {
                    nodes.Push(node);
                }

                // process nodes on stack
                while (nodes.Count != 0)
                {
                    currentNode = nodes.Pop();
                    skip = false;

                    // process node depending on its type
                    switch (currentNode.Type)
                    {
                        case "string":
                            paragraphs += (int) Misc.CountLinesInString(currentNode.Content as string);

                            _format.AppendText(shape, currentNode.Content as string);
                            break;
                        case "paragraph":
                            paragraphs++;
                            _format.AppendText(shape, "\r");
                            break;
                        case "pause":
                            if (Pause())
                            {
                                FormatListItem(shape, type, itemStartAt, level, paragraphs, itemsCount, show_bullet);
                                return false;
                            }
                            break;
                        case "today":
                            shape.TextFrame.TextRange.InsertDateTime(PowerPoint.PpDateTimeFormat.ppDateTimeFigureOut, MsoTriState.msoTrue);
                            break;
                        case "descriptionlist":
                        case "table":
                        case "image":
                            if (!Settings.Instance.NestedAsText)
                            {
                                skip = true;
                                _postProcessing.Enqueue(currentNode);
                            }
                            break;
                        case "bulletlist":
                        case "numberedlist":
                            skip = true;

                            FormatListItem(shape, type, itemStartAt, level, paragraphs, itemsCount, show_bullet);

                            _format.AppendText(shape, "\r");

                            if (!GenerateList(currentNode.Children, shape, level + 1, currentNode.Type == "bulletlist" ? MsoBulletType.msoBulletUnnumbered : MsoBulletType.msoBulletNumbered))
                                return false;

                            paragraphs = 0;
                            itemStartAt = shape.TextFrame2.TextRange.Text.Length;
                            show_bullet = false;

                            break;
                        default: // other -> check for simple formats
                            SimpleTextFormat(nodes, currentNode);
                            break;
                    }

                    if (currentNode.Children == null || skip)
                        continue;

                    // push child nodes to stack
                    foreach (Node node in currentNode.Children.Reverse<Node>())
                    {
                        nodes.Push(node);
                    }
                }

                FormatListItem(shape, type, itemStartAt, level, paragraphs, itemsCount, show_bullet);

                if (!Misc.ShowOverlay(_passNumber, item.OverlayList, ref _maxPass))
                {
                    int balancer = shape.TextFrame2.TextRange.Text.EndsWith(" ") ? 1 : 0;
                    shape.TextFrame2.TextRange.Characters[realItemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - realItemStartAt - balancer].Paragraphs.Font.Fill.Visible = MsoTriState.msoFalse;
                    shape.TextFrame2.TextRange.Characters[realItemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - realItemStartAt - balancer].Paragraphs.ParagraphFormat.Bullet.Visible = MsoTriState.msoFalse;
                }

                if(!Misc.EndsWithNewLine(shape.TextFrame2.TextRange.Text))
                    _format.AppendText(shape, "\r");
            }

            return true;
        }
コード例 #2
0
        /// <summary>
        /// Setup list item (even partial) type, indent etc.
        /// </summary>
        /// <param name="shape">List text shape</param>
        /// <param name="type">Type of bullets</param>
        /// <param name="itemStartAt">Item starts at character</param>
        /// <param name="level">Indent level</param>
        /// <param name="paragraphs">Number of paragraphs</param>
        /// <param name="itemsCount">Number of items</param>
        /// <param name="show_bullet">Show bullet</param>
        private void FormatListItem(PowerPoint.Shape shape, MsoBulletType type, int itemStartAt, int level, int paragraphs, int itemsCount, bool show_bullet)
        {
            if (shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1 <= 0)
                return;

            if (paragraphs == 0)
            {
                shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].ParagraphFormat.Bullet.StartValue = itemsCount;
                shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].ParagraphFormat.Bullet.Type = type;
                shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].ParagraphFormat.IndentLevel = level + 1;
                if (!show_bullet)
                {
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].ParagraphFormat.Bullet.Visible = MsoTriState.msoFalse;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].ParagraphFormat.IndentLevel = level + 2;
                }
            }
            else
            {
                shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs[1, 1].ParagraphFormat.Bullet.StartValue = itemsCount;
                if (show_bullet)
                {
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs[1, 1].ParagraphFormat.Bullet.Type = type;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs[1, 1].ParagraphFormat.IndentLevel = level + 1;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs[2, paragraphs].ParagraphFormat.Bullet.Type = type;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs[2, paragraphs].ParagraphFormat.Bullet.Visible = MsoTriState.msoFalse;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs[2, paragraphs].ParagraphFormat.IndentLevel = level + 2;
                }
                else
                {
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs.ParagraphFormat.Bullet.Type = type;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs.ParagraphFormat.Bullet.Visible = MsoTriState.msoFalse;
                    shape.TextFrame2.TextRange.Characters[itemStartAt + 1, shape.TextFrame2.TextRange.Text.Length - itemStartAt - 1].Paragraphs.ParagraphFormat.IndentLevel = level + 2;
                }
            }
        }