Example #1
0
 public MarkdownNonParagraphBlockToken(IMarkdownRule rule, IMarkdownContext context, InlineContent content, SourceInfo sourceInfo)
 {
     Rule       = rule;
     Context    = context;
     Content    = content;
     SourceInfo = sourceInfo;
 }
 public MarkdownParagraphBlockToken(IMarkdownRule rule, IMarkdownContext context, InlineContent inlineTokens, SourceInfo sourceInfo)
 {
     Rule         = rule;
     Context      = context;
     InlineTokens = inlineTokens;
     SourceInfo   = sourceInfo;
 }
Example #3
0
 public MarkdownHeadingBlockToken(IMarkdownRule rule, IMarkdownContext context, InlineContent content, string id, int depth, SourceInfo sourceInfo)
 {
     Rule       = rule;
     Context    = context;
     Content    = content;
     Id         = id;
     Depth      = depth;
     SourceInfo = sourceInfo;
 }
 public MarkdownHeadingBlockToken(IMarkdownRule rule, IMarkdownContext context, InlineContent content, string id, int depth, string rawMarkdown)
 {
     Rule        = rule;
     Context     = context;
     Content     = content;
     Id          = id;
     Depth       = depth;
     RawMarkdown = rawMarkdown;
 }
        public virtual IMarkdownToken TryMatch(IMarkdownParser parser, IMarkdownParsingContext context)
        {
            if (context.IsInParagraph)
            {
                return(null);
            }
            if (Html != Regexes.Block.Html || parser.Options.LegacyMode)
            {
                return(TryMatchOld(parser, context));
            }
            var match = context.Match(HtmlMatcher);

            if (match?.Length > 0)
            {
                var sourceInfo = context.Consume(match.Length);

                var  elementName = match.GetGroup("element")?.GetValue();
                bool isPre       = parser.Options.Sanitizer == null &&
                                   ("pre".Equals(elementName, StringComparison.OrdinalIgnoreCase) || "script".Equals(elementName, StringComparison.OrdinalIgnoreCase) || "style".Equals(elementName, StringComparison.OrdinalIgnoreCase));
                if (parser.Options.Sanitize)
                {
                    return(new TwoPhaseBlockToken(
                               this,
                               parser.Context,
                               sourceInfo,
                               (p, t) => new MarkdownParagraphBlockToken(
                                   t.Rule,
                                   t.Context,
                                   p.TokenizeInline(t.SourceInfo),
                                   t.SourceInfo)));
                }
                else
                {
                    return(new TwoPhaseBlockToken(
                               this,
                               parser.Context,
                               sourceInfo,
                               (p, t) =>
                    {
                        InlineContent ic;
                        if (isPre)
                        {
                            ic = new InlineContent(
                                ImmutableArray.Create <IMarkdownToken>(
                                    new MarkdownRawToken(
                                        this,
                                        parser.Context,
                                        t.SourceInfo)));
                        }
                        else
                        {
                            var c = new MarkdownInlineContext(
                                ImmutableList.Create <IMarkdownRule>(
                                    new MarkdownPreElementInlineRule(),
                                    new MarkdownTagInlineRule(),
                                    new MarkdownTextInlineRule()));
                            p.SwitchContext(c);
                            ic = new InlineContent(p.Tokenize(t.SourceInfo));
                            p.SwitchContext(t.Context);
                        }
                        return new MarkdownHtmlBlockToken(
                            t.Rule,
                            t.Context,
                            ic,
                            t.SourceInfo);
                    }));
                }
            }
            return(null);
        }