コード例 #1
0
        private static void PostMergeBlockquotes(MarkdownElementBase[] innerBlocks, MarkdownDocument root)
        {
            BlockquoteElement currentPreceBlockquote = null;

            for (int i = 0; i < innerBlocks.Length; i++)
            {
                MarkdownElementBase innerBlock = innerBlocks[i];
                if (innerBlock.Type == ElementType.Blockquote)
                {
                    BlockquoteElement currentBlockquote = innerBlock as BlockquoteElement;
                    if (currentPreceBlockquote == null || currentPreceBlockquote.QuoteLevel < currentBlockquote.QuoteLevel)
                    {
                        currentPreceBlockquote = currentBlockquote;
                        root.AddChildElement(currentPreceBlockquote);
                    }
                    else
                    {
                        currentPreceBlockquote.AddChildrenElements(currentBlockquote.Children);
                    }
                }
                else
                {
                    if (innerBlock.Type != ElementType.BlankLine)
                    {
                        root.AddChildElement(innerBlock);
                    }
                    else
                    {
                        currentPreceBlockquote = null;
                    }
                }
            }
        }
コード例 #2
0
        public void Blockquote(_GithubMarkdown_Memo _memo, int _index, _GithubMarkdown_Args _args)
        {
            _GithubMarkdown_Item symbol   = null;
            _GithubMarkdown_Item inner    = null;
            _GithubMarkdown_Item children = null;

            // AND 1
            int _start_i1 = _index;

            // AND 2
            int _start_i2 = _index;

            // CALLORVAR BlockquoteSymbol
            _GithubMarkdown_Item _r4;

            _r4 = _MemoCall(_memo, "BlockquoteSymbol", _index, BlockquoteSymbol, null);

            if (_r4 != null)
            {
                _index = _r4.NextIndex;
            }

            // BIND symbol
            symbol = _memo.Results.Peek();

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label2;
            }

            // STAR 6
            int _start_i6 = _index;
            var _res6     = Enumerable.Empty <MarkdownElementBase>();

label6:

            // OR 7
            int _start_i7 = _index;

            // CALLORVAR Head
            _GithubMarkdown_Item _r8;

            _r8 = _MemoCall(_memo, "Head", _index, Head, null);

            if (_r8 != null)
            {
                _index = _r8.NextIndex;
            }

            // OR shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _index = _start_i7;
            }
            else
            {
                goto label7;
            }

            // CALLORVAR InlineText
            _GithubMarkdown_Item _r9;

            _r9 = _MemoCall(_memo, "InlineText", _index, InlineText, null);

            if (_r9 != null)
            {
                _index = _r9.NextIndex;
            }

label7:                             // OR
            int _dummy_i7 = _index; // no-op for label

            // STAR 6
            var _r6 = _memo.Results.Pop();

            if (_r6 != null)
            {
                _res6 = _res6.Concat(_r6.Results);
                goto label6;
            }
            else
            {
                _memo.Results.Push(new _GithubMarkdown_Item(_start_i6, _index, _memo.InputEnumerable, _res6.Where(_NON_NULL), true));
            }

            // BIND inner
            inner = _memo.Results.Peek();

label2:     // AND
            var _r2_2 = _memo.Results.Pop();
            var _r2_1 = _memo.Results.Pop();

            if (_r2_1 != null && _r2_2 != null)
            {
                _memo.Results.Push(new _GithubMarkdown_Item(_start_i2, _index, _memo.InputEnumerable, _r2_1.Results.Concat(_r2_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i2;
            }

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label1;
            }

            // STAR 11
            int _start_i11 = _index;
            var _res11     = Enumerable.Empty <MarkdownElementBase>();

label11:

            // AND 12
            int _start_i12 = _index;

            // CALLORVAR LineBreak
            _GithubMarkdown_Item _r14;

            _r14 = _MemoCall(_memo, "LineBreak", _index, LineBreak, null);

            if (_r14 != null)
            {
                _index = _r14.NextIndex;
            }

            // QUES
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Pop(); _memo.Results.Push(new _GithubMarkdown_Item(_index, _memo.InputEnumerable));
            }

            // AND shortcut
            if (_memo.Results.Peek() == null)
            {
                _memo.Results.Push(null); goto label12;
            }

            // CALLORVAR InlineText
            _GithubMarkdown_Item _r15;

            _r15 = _MemoCall(_memo, "InlineText", _index, InlineText, null);

            if (_r15 != null)
            {
                _index = _r15.NextIndex;
            }

label12:    // AND
            var _r12_2 = _memo.Results.Pop();
            var _r12_1 = _memo.Results.Pop();

            if (_r12_1 != null && _r12_2 != null)
            {
                _memo.Results.Push(new _GithubMarkdown_Item(_start_i12, _index, _memo.InputEnumerable, _r12_1.Results.Concat(_r12_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i12;
            }

            // STAR 11
            var _r11 = _memo.Results.Pop();

            if (_r11 != null)
            {
                _res11 = _res11.Concat(_r11.Results);
                goto label11;
            }
            else
            {
                _memo.Results.Push(new _GithubMarkdown_Item(_start_i11, _index, _memo.InputEnumerable, _res11.Where(_NON_NULL), true));
            }

            // BIND children
            children = _memo.Results.Peek();

label1:     // AND
            var _r1_2 = _memo.Results.Pop();
            var _r1_1 = _memo.Results.Pop();

            if (_r1_1 != null && _r1_2 != null)
            {
                _memo.Results.Push(new _GithubMarkdown_Item(_start_i1, _index, _memo.InputEnumerable, _r1_1.Results.Concat(_r1_2.Results).Where(_NON_NULL), true));
            }
            else
            {
                _memo.Results.Push(null);
                _index = _start_i1;
            }

            // ACT
            var _r0 = _memo.Results.Peek();

            if (_r0 != null)
            {
                _memo.Results.Pop();
                _memo.Results.Push(new _GithubMarkdown_Item(_r0.StartIndex, _r0.NextIndex, _memo.InputEnumerable, _Thunk(_IM_Result => { BlockquoteElement block = new BlockquoteElement();
                                                                                                                                         block.QuoteLevel        = symbol.Results.First().TextContent.Length;
                                                                                                                                         block.AddChildrenElements(inner.Results.AsEnumerable <MarkdownElementBase>());
                                                                                                                                         block.AddChildrenElements(children.Results.AsEnumerable <MarkdownElementBase>());
                                                                                                                                         return(block); }, _r0), true));
            }
        }