コード例 #1
0
        private static void AggregateCore(
            MarkdownHeadingBlockToken headToken,
            IMarkdownTokenAggregateContext context,
            int offset,
            List <DfmTabItemBlockToken> items,
            IMarkdownToken terminator)
        {
            var md = items.Aggregate(StringBuffer.Empty, (s, t) => s + t.SourceInfo.Markdown);

            if (terminator != null)
            {
                md += terminator.SourceInfo.Markdown;
                offset++;
            }
            var groupId = HashUtility.GetSha256HashString(items[0].SourceInfo.File ?? string.Empty).Replace("/", "-").Remove(10);

            context.AggregateTo(
                new DfmTabGroupBlockToken(
                    DfmTabGroupBlockRule.Instance,
                    headToken.Context,
                    groupId,
                    items.ToImmutableArray(),
                    0,
                    headToken.SourceInfo.Copy(md.ToString())),
                offset);
        }
コード例 #2
0
 public bool Aggregate(IMarkdownTokenAggregateContext context)
 {
     if (context.CurrentToken is THeader token)
     {
         return(AggregateCore(token, context));
     }
     return(false);
 }
 public bool Aggregate(IMarkdownTokenAggregateContext context)
 {
     foreach (var agg in _aggregators)
     {
         if (agg.Aggregate(context))
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #4
0
        protected override bool AggregateCore(MarkdownHeadingBlockToken headToken, IMarkdownTokenAggregateContext context)
        {
            var info = ParseHeading(headToken);

            if (info == null)
            {
                return(false);
            }
            context.AggregateTo(
                new MarkdownHeadingBlockToken(
                    headToken.Rule,
                    headToken.Context,
                    new InlineContent(headToken.Content.Tokens.RemoveRange(0, 2)),
                    info,
                    headToken.Depth,
                    headToken.SourceInfo), 1);
            return(true);
        }
コード例 #5
0
ファイル: TabGroupAggregator.cs プロジェクト: roji/docfx
        protected override bool AggregateCore(MarkdownHeadingBlockToken headToken, IMarkdownTokenAggregateContext context)
        {
            var info = ParseHeading(headToken);

            if (info == null)
            {
                return(false);
            }
            int            offset     = 1;
            var            items      = new List <DfmTabItemBlockToken>();
            IMarkdownToken terminator = null;

            while (true)
            {
                var token = context.LookAhead(offset);
                switch (token)
                {
                case MarkdownHeadingBlockToken head:
                    var temp = ParseHeading(head);
                    if (temp == null)
                    {
                        goto default;
                    }
                    items.Add(CreateTabItem(info));
                    info = temp;
                    break;

                case MarkdownHrBlockToken hr:
                    terminator = hr;
                    goto case null;

                case null:
                    items.Add(CreateTabItem(info));
                    AggregateCore(headToken, context, offset, items, terminator);
                    return(true);

                default:
                    info.Content.Add(token);
                    break;
                }
                offset++;
            }
        }
コード例 #6
0
ファイル: TabGroupAggregator.cs プロジェクト: roji/docfx
        private static void AggregateCore(
            MarkdownHeadingBlockToken headToken,
            IMarkdownTokenAggregateContext context,
            int offset,
            List <DfmTabItemBlockToken> items,
            IMarkdownToken terminator)
        {
            var md = items.Aggregate(StringBuffer.Empty, (s, t) => s + t.SourceInfo.Markdown);

            if (terminator != null)
            {
                md += terminator.SourceInfo.Markdown;
                offset++;
            }
            context.AggregateTo(
                new DfmTabGroupBlockToken(
                    DfmTabGroupBlockRule.Instance,
                    headToken.Context,
                    Guid.NewGuid().ToString(),
                    items.ToImmutableArray(),
                    0,
                    headToken.SourceInfo.Copy(md.ToString())),
                offset);
        }
コード例 #7
0
            protected override bool AggregateCore(MarkdownParagraphBlockToken headToken, IMarkdownTokenAggregateContext context)
            {
                var next = context.LookAhead(1);

                if (next is MarkdownParagraphBlockToken nextPara)
                {
                    context.AggregateTo(
                        new MarkdownParagraphBlockToken(
                            headToken.Rule,
                            headToken.Context,
                            new InlineContent(
                                headToken.InlineTokens.Tokens
                                .Add(new MarkdownBrInlineToken(headToken.Rule, headToken.InlineTokens.Tokens[0].Context, headToken.SourceInfo))
                                .AddRange(nextPara.InlineTokens.Tokens)),
                            headToken.SourceInfo),
                        2);
                    return(true);
                }
                return(false);
            }
コード例 #8
0
 protected override bool AggregateCore(MarkdownHeadingBlockToken headToken, IMarkdownTokenAggregateContext context)
 {
     if (headToken.Depth == 1)
     {
         var next = context.LookAhead(1);
         if (next is MarkdownHrBlockToken)
         {
             context.AggregateTo(
                 new MarkdownHeadingBlockToken(
                     headToken.Rule,
                     headToken.Context,
                     headToken.Content,
                     headToken.Id,
                     2,
                     headToken.SourceInfo), 2);
             return(true);
         }
     }
     return(false);
 }
コード例 #9
0
 protected abstract bool AggregateCore(THeader headToken, IMarkdownTokenAggregateContext context);