public IMarkdownToken Rewrite(IMarkdownRewriteEngine engine, IMarkdownToken token)
 {
     foreach (var validator in Validators)
     {
         validator.Validate(token);
     }
     return null;
 }
 public IMarkdownToken Rewrite(IMarkdownRewriteEngine engine, IMarkdownToken token)
 {
     IMarkdownToken newToken = token;
     for (int index = 0; index < Inner.Length; index++)
     {
         newToken = Inner[index].Rewrite(engine, newToken) ?? newToken;
     }
     return newToken;
 }
Esempio n. 3
0
 private IMarkdownToken RewriteToken(IMarkdownToken token)
 {
     var rewritedToken = token;
     var newToken = Rewriter.Rewrite(this, rewritedToken);
     if (newToken != null)
     {
         rewritedToken = newToken;
     }
     return rewritedToken;
 }
 public StringBuffer Render(IMarkdownToken token)
 {
     try
     {
         // double dispatch.
         return ((dynamic)Renderer).Render((dynamic)this, (dynamic)token, (dynamic)token.Context);
     }
     catch (RuntimeBinderException ex)
     {
         throw new InvalidOperationException($"Unable to handle token: {token.GetType().Name}, rule: {token.Rule.Name}", ex);
     }
 }
 public IMarkdownToken Rewrite(MarkdownEngine engine, IMarkdownToken token)
 {
     if (Rewriters.Count > 0)
     {
         foreach (var rewriter in Rewriters)
         {
             var newToken = rewriter.Rewrite(engine, token);
             if (newToken != null)
             {
                 return newToken;
             }
         }
     }
     return null;
 }
Esempio n. 6
0
 public IMarkdownToken Rewrite(IMarkdownRewriteEngine engine, IMarkdownToken token)
 {
     IMarkdownToken lastToken;
     IMarkdownToken newToken = token;
     for (int loopCount = 0; loopCount < MaxLoopCount; loopCount++)
     {
         lastToken = newToken;
         newToken = Inner.Rewrite(engine, lastToken);
         if (newToken == null)
         {
             return lastToken;
         }
     }
     throw new InvalidOperationException("Too many loops!");
 }
Esempio n. 7
0
        private StringBuffer RenderCore(IMarkdownRenderer render, IMarkdownToken token, IMarkdownContext context)
        {
            if (!CheckRuleEnabled(token))
            {
                return(token.SourceInfo.Markdown);
            }

            if (!NeedMigration(token))
            {
                return(token.SourceInfo.Markdown);
            }

            var migrated = _renderer.Render((dynamic)render, (dynamic)token, (dynamic)context);

            if (!string.Equals(token.SourceInfo.Markdown.ToString(), migrated.ToString()))
            {
                _renderer.UpdateReport(token, _renderer.GetTokenName(token));
            }

            return(migrated);
        }
Esempio n. 8
0
        private StringBuffer RenderRefLink(IMarkdownRenderer render, IMarkdownToken token, MarkdownInlineContext context)
        {
            StringBuffer content = StringBuffer.Empty;

            if (token is MarkdownImageInlineToken)
            {
                var realToken = token as MarkdownImageInlineToken;
                content += "![";
                if (render.Options.LegacyMode)
                {
                    content += StringHelper.LegacyEscapeMarkdown(realToken.Text);
                }
                else
                {
                    content += StringHelper.EscapeMarkdown(realToken.Text);
                }
                content += "][";
                content += realToken.RefId;
                content += "]";
            }
            else if (token is MarkdownLinkInlineToken)
            {
                var realToken = token as MarkdownLinkInlineToken;
                content += "[";
                foreach (var t in realToken.Content)
                {
                    content += render.Render(t);
                }
                content += "][";
                content += realToken.RefId;
                content += "]";
            }
            else
            {
                throw new NotSupportedException("Reference link token should be either link token or image token");
            }

            return(content);
        }
Esempio n. 9
0
 private void ValidateOne(IMarkdownToken token, Match m, MarkdownTagValidationRule validator)
 {
     if (!string.IsNullOrEmpty(validator.CustomValidatorContractName))
     {
         if (Container == null)
         {
             Logger.LogWarning($"Unable to validate tag by contract({validator.CustomValidatorContractName}): CompositionHost is null.");
             return;
         }
         var customValidators = GetCustomMarkdownTagValidators(validator);
         if (customValidators.Count == 0)
         {
             Logger.LogWarning($"Cannot find custom markdown tag validator by contract name: {validator.CustomValidatorContractName}.");
             return;
         }
         if (customValidators.TrueForAll(av => av.Validate(token.SourceInfo.Markdown)))
         {
             return;
         }
     }
     ValidateOneCore(token, m, validator);
 }
        private bool CheckInlineRuleEnabled(IMarkdownToken token)
        {
            if (_rule == MigrationRule.All)
            {
                return(true);
            }

            if (token is DfmXrefInlineToken && _rule.HasFlag(MigrationRule.Xref))
            {
                return(true);
            }
            if (token is DfmIncludeInlineToken && _rule.HasFlag(MigrationRule.InclusionInline))
            {
                return(true);
            }
            if (token is MarkdownImageInlineToken && _rule.HasFlag(MigrationRule.Image))
            {
                return(true);
            }
            if (token is MarkdownLinkInlineToken link && _rule.HasFlag(MigrationRule.Link) &&
                link.LinkType == MarkdownLinkType.NormalLink)
            {
                return(true);
            }
            if (token is MarkdownStrongInlineToken && _rule.HasFlag(MigrationRule.Strong))
            {
                return(true);
            }
            if (token is MarkdownEmInlineToken && _rule.HasFlag(MigrationRule.Em))
            {
                return(true);
            }
            if (token is MarkdownTableBlockToken && _rule.HasFlag(MigrationRule.Table))
            {
                return(true);
            }

            return(false);
        }
Esempio n. 11
0
            public void Validate(IMarkdownToken token)
            {
                var text = GetTokenText(token);

                if (string.IsNullOrEmpty(text))
                {
                    return;
                }
                var  m            = OpeningTag.Match(text);
                bool isOpeningTag = true;

                if (m.Length == 0)
                {
                    m = ClosingTag.Match(text);
                    if (m.Length == 0)
                    {
                        return;
                    }
                    isOpeningTag = false;
                }

                ValidateCore(token, m, isOpeningTag);
            }
Esempio n. 12
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++;
            }
            context.AggregateTo(
                new DfmTabGroupBlockToken(
                    DfmTabGroupBlockRule.Instance,
                    headToken.Context,
                    Guid.NewGuid().ToString(),
                    items.ToImmutableArray(),
                    0,
                    headToken.SourceInfo.Copy(md.ToString())),
                offset);
        }
Esempio n. 13
0
 public StringBuffer Render(IMarkdownRenderer renderer, IMarkdownToken token, IMarkdownContext context)
 {
     return(BaseRender(renderer, token, context));
 }
Esempio n. 14
0
 private string ExposeTokenNameInDfm(IMarkdownToken token)
 {
     var tokenName = ExposeTokenName(token);
     tokenName = TrimStringStart(tokenName, "Dfm");
     return tokenName;
 }
Esempio n. 15
0
        private StringBuffer RenderNumberLink(IMarkdownRenderer render, IMarkdownToken token, MarkdownInlineContext context)
        {
            StringBuffer content = StringBuffer.Empty;
            if(token is MarkdownImageInlineToken)
            {
                var realToken = token as MarkdownImageInlineToken;
                content += "![";
                content += realToken.Text;
                content += "]";
            }
            else if(token is MarkdownLinkInlineToken)
            {
                var realToken = token as MarkdownLinkInlineToken;
                content += "[";
                foreach (var t in realToken.Content)
                {
                    content += render.Render(t);
                }
                content += "]";
            }
            else
            {
                throw new NotSupportedException("Number link token should be either link token or image token");
            }

            return content;
        }
Esempio n. 16
0
 public DfmSectionBlockSplitToken(IMarkdownToken token) : base(token)
 {
 }
Esempio n. 17
0
 public DfmNoteBlockSplitToken(IMarkdownToken token) : base(token)
 {
 }
Esempio n. 18
0
 protected static StringBuffer AppendSourceInfo(StringBuffer result, IMarkdownRenderer renderer, IMarkdownToken token)
 {
     if (renderer.Options.ShouldExportSourceInfo)
     {
         result = AppendSourceInfoCore(result, token);
     }
     return(result);
 }
Esempio n. 19
0
 public static StringBuffer AppendSourceInfo(StringBuffer result, Options options, IMarkdownToken token)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     if (token == null)
     {
         throw new ArgumentNullException(nameof(token));
     }
     if (options.ShouldExportSourceInfo)
     {
         result = AppendSourceInfoCore(result, token);
     }
     return(result);
 }
 public IMarkdownToken Rewrite(IMarkdownRewriteEngine engine, IMarkdownToken token)
 {
     return null;
 }
Esempio n. 21
0
 public StringBuffer Render(IMarkdownToken token)
 {
     return(this.Render((dynamic)this, (dynamic)token, (dynamic)token.Context));
 }
 public DfmDefaultBlockQuoteBlockSplitToken(IMarkdownToken token) : base(token)
 {
 }
 internal void SetToken(int index, IMarkdownToken token)
 {
     EnsureWrite();
     _tokens[index] = token;
 }
 public MarkdownTokenAggregateContext(IMarkdownToken parentToken, ImmutableArray <IMarkdownToken> tokens)
 {
     ParentToken   = parentToken;
     _sourceTokens = tokens;
 }
Esempio n. 25
0
 public virtual StringBuffer Render(IMarkdownRenderer renderer, IMarkdownToken token, IMarkdownContext context)
 {
     return(StringBuffer.Empty);
 }
Esempio n. 26
0
 public StringBuffer BaseRender(IMarkdownRenderer renderer, IMarkdownToken token, IMarkdownContext context)
 {
     // double dispatch.
     return(((dynamic)_innerRenderer).Render((dynamic)renderer, (dynamic)token, (dynamic)context));
 }
Esempio n. 27
0
 public virtual StringBuffer Render(IMarkdownRenderer render, IMarkdownToken token, IMarkdownContext context)
 {
     return token.RawMarkdown;
 }
 public IMarkdownToken Rewrite(IMarkdownRewriteEngine engine, IMarkdownToken token)
 {
     return(null);
 }
 StringBuffer IDfmCustomizedRendererPart.Render(IMarkdownRenderer renderer, IMarkdownToken token, IMarkdownContext context)
 {
     return(Render((TRenderer)renderer, (TToken)token, (TContext)context));
 }
Esempio n. 30
0
 private static StringBuffer AppendSourceInfoCore(StringBuffer result, IMarkdownToken token)
 {
     return(result + " sourceFile=\"" + StringHelper.HtmlEncode(token.SourceInfo.File) + "\" sourceStartLineNumber=\"" + token.SourceInfo.LineNumber.ToString() + "\" sourceEndLineNumber=\"" + (token.SourceInfo.LineNumber + token.SourceInfo.ValidLineCount - 1).ToString() + "\"");
 }
Esempio n. 31
0
 public virtual StringBuffer Render(IMarkdownRenderer render, IMarkdownToken token, IMarkdownContext context)
 {
     return(token.RawMarkdown);
 }
Esempio n. 32
0
 public SplitToken(IMarkdownToken token)
 {
     Token       = token;
     InnerTokens = new List <IMarkdownToken>();
 }
Esempio n. 33
0
 protected string ExposeTokenName(IMarkdownToken token)
 {
     var tokenName = token.GetType().Name;
     tokenName = TrimStringStart(tokenName, "Markdown");
     tokenName = TrimStringStart(tokenName, "Gfm");
     tokenName = TrimStringEnd(tokenName, "Token");
     tokenName = TrimStringEnd(tokenName, "Block");
     tokenName = TrimStringEnd(tokenName, "Inline");
     return tokenName;
 }
 bool IDfmCustomizedRendererPart.Match(IMarkdownRenderer renderer, IMarkdownToken token, IMarkdownContext context)
 {
     return(Match((TRenderer)renderer, (TToken)token, (TContext)context));
 }
Esempio n. 35
0
 private StringBuffer MarkupInlineToken(IMarkdownRenderer render, IMarkdownToken token)
 {
     return(_dfmHtmlRender.Render((dynamic)render, (dynamic)token, (dynamic)token.Context));
 }
Esempio n. 36
0
 private static IEnumerable <IMarkdownToken> ChildrenCore(IMarkdownToken token) =>
 (token as IMarkdownExpression)?.GetChildren() ?? Enumerable.Empty <IMarkdownToken>();
Esempio n. 37
0
        private bool CheckRuleEnabled(IMarkdownToken token)
        {
            if (_rule == MigrationRule.All)
            {
                return(true);
            }

            if (token is DfmXrefInlineToken && _rule.HasFlag(MigrationRule.Xref))
            {
                return(true);
            }
            if (token is DfmIncludeInlineToken && _rule.HasFlag(MigrationRule.InclusionInline))
            {
                return(true);
            }
            if (token is MarkdownImageInlineToken && _rule.HasFlag(MigrationRule.Image))
            {
                return(true);
            }
            if (token is MarkdownLinkInlineToken && _rule.HasFlag(MigrationRule.Link))
            {
                return(true);
            }
            if (token is MarkdownStrongInlineToken && _rule.HasFlag(MigrationRule.Strong))
            {
                return(true);
            }
            if (token is MarkdownEmInlineToken && _rule.HasFlag(MigrationRule.Em))
            {
                return(true);
            }
            if (token is MarkdownTableBlockToken && _rule.HasFlag(MigrationRule.Table))
            {
                return(true);
            }

            if (token is DfmNoteBlockToken && _rule.HasFlag(MigrationRule.Note))
            {
                return(true);
            }
            if (token is DfmIncludeBlockToken && _rule.HasFlag(MigrationRule.InclusionBlock))
            {
                return(true);
            }
            if (token is DfmFencesBlockToken && _rule.HasFlag(MigrationRule.Code))
            {
                return(true);
            }
            if (token is MarkdownHtmlBlockToken && _rule.HasFlag(MigrationRule.HtmlBlock))
            {
                return(true);
            }
            if (token is MarkdownHeadingBlockToken && _rule.HasFlag(MigrationRule.Heading))
            {
                return(true);
            }
            if (token is MarkdownListBlockToken && _rule.HasFlag(MigrationRule.List))
            {
                return(true);
            }
            if (token is MarkdownBlockquoteBlockToken && _rule.HasFlag(MigrationRule.BlockQuote))
            {
                return(true);
            }

            if (token is MarkdownParagraphBlockToken && (_rule & MigrationRule.Paragraph) != 0)
            {
                return(true);
            }
            if (token is MarkdownNonParagraphBlockToken && (_rule & MigrationRule.Paragraph) != 0)
            {
                return(true);
            }

            return(false);
        }
Esempio n. 38
0
 private static IEnumerable <IMarkdownToken> DescendantsCore(IMarkdownToken token) =>
 from child in ChildrenCore(token)
 from item in new[] { child }.Concat(DescendantsCore(child))
 select item;
 public override StringBuffer Render(IMarkdownRenderer render, IMarkdownToken token, IMarkdownContext context)
 {
     return(token.SourceInfo.Markdown);
 }
Esempio n. 40
0
 protected static StringBuffer AppendSourceInfo(StringBuffer result, IMarkdownRenderer renderer, IMarkdownToken token)
 {
     if (renderer.Options.ShouldExportSourceInfo)
     {
         result = result + " sourceFile=\"" + StringHelper.HtmlEncode(token.SourceInfo.File) + "\" sourceStartLineNumber=\"" + token.SourceInfo.LineNumber.ToString() + "\" sourceEndLineNumber=\"" + (token.SourceInfo.LineNumber + token.SourceInfo.ValidLineCount - 1).ToString() + "\"";
     }
     return(result);
 }
Esempio n. 41
0
 protected StringBuffer Insert(IMarkdownToken token, StringBuffer name, StringBuffer tokenContent = null)
 {
     // TODO: separate the name to extra properties
     int startLineNumber = token.SourceInfo.LineNumber;
     int endLineNumber = (token.SourceInfo.ValidLineCount > 0) ? (startLineNumber + token.SourceInfo.ValidLineCount - 1) : startLineNumber;
     return Insert(startLineNumber, endLineNumber, name, tokenContent);
 }
Esempio n. 42
0
 public SplitToken(IMarkdownToken token)
 {
     Token = token;
     InnerTokens = new List<IMarkdownToken>();
 }
Esempio n. 43
0
 public DfmVideoBlockSplitToken(IMarkdownToken token) : base(token)
 {
 }