private void Aggregate(MarkdownTokenAggregateContext aggContext)
 {
     while (aggContext.NextToken())
     {
         _aggregator.Aggregate(aggContext);
     }
 }
        public ImmutableArray <IMarkdownToken> Rewrite(ImmutableArray <IMarkdownToken> tokens)
        {
            var context = new MarkdownTokenAggregateContext(_parents.Peek(), tokens);

            Aggregate(context);

            for (int i = 0; i < context.TokenLength; i++)
            {
                var token = context.GetToken(i);
                if (token is IMarkdownRewritable <IMarkdownToken> rewritable)
                {
                    _parents.Push(token);
                    var rewrittenToken = rewritable.Rewrite(this);
                    if (rewrittenToken != null &&
                        !object.ReferenceEquals(rewrittenToken, token))
                    {
                        context.SetToken(i, rewrittenToken);
                    }
                    _parents.Pop();
                    Aggregate(context);
                }
            }
            return(context.ImmutableTokens);
        }