public virtual IMarkdownToken TryMatch(IMarkdownParser parser, IMarkdownParsingContext context)
        {
            if (MarkdownInlineContext.GetIsInLink(parser.Context))
            {
                return(null);
            }
            var match = AutoLink.Match(context.CurrentMarkdown);

            if (match.Length == 0)
            {
                return(null);
            }
            var sourceInfo = context.Consume(match.Length);

            StringBuffer text;
            StringBuffer href;

            if (match.Groups[2].Value == "@")
            {
                text = match.Groups[1].Value[6] == ':'
                  ? Mangle(parser.Options.Mangle, match.Groups[1].Value.Substring(7))
                  : Mangle(parser.Options.Mangle, match.Groups[1].Value);
                href = Mangle(parser.Options.Mangle, "mailto:") + text;
            }
            else
            {
                text = StringHelper.Escape(match.Groups[1].Value);
                href = match.Groups[1].Value;
            }

            return(new MarkdownLinkInlineToken(
                       this,
                       parser.Context,
                       href,
                       null,
                       ImmutableArray.Create <IMarkdownToken>(
                           new MarkdownRawToken(this, parser.Context, sourceInfo.Copy(text))),
                       sourceInfo,
                       MarkdownLinkType.AutoLink,
                       null));
        }
Esempio n. 2
0
        public virtual StringBuffer Render(IMarkdownRenderer renderer, MarkdownLinkInlineToken token, MarkdownInlineContext context)
        {
            if (renderer.Options.Sanitize)
            {
                string prot = null;

                try
                {
                    prot = Regex.Replace(StringHelper.DecodeURIComponent(token.Href), @"[^\w:]", string.Empty).ToLower();
                }
                catch (Exception)
                {
                    return(string.Empty);
                }

                if (prot.IndexOf("javascript:") == 0 || prot.IndexOf("vbscript:") == 0)
                {
                    return(string.Empty);
                }
            }

            var result = (StringBuffer)"<a href=\"" + StringHelper.Escape(token.Href) + "\"";

            if (!string.IsNullOrEmpty(token.Title))
            {
                result = result + " title=\"" + StringHelper.Escape(token.Title) + "\"";
            }
            result  = AppendAttribute(result, "data-raw-source", token.SourceInfo.Markdown);
            result  = AppendSourceInfo(result, renderer, token);
            result += ">";

            foreach (var item in token.Content)
            {
                result += renderer.Render(item);
            }

            result += "</a>";
            return(result);
        }
Esempio n. 3
0
        public virtual IMarkdownToken TryMatch(MarkdownEngine engine, ref string source)
        {
            if ((bool)engine.Context.Variables[MarkdownInlineContext.IsInLink])
            {
                return(null);
            }
            var match = Url.Match(source);

            if (match.Length == 0)
            {
                return(null);
            }
            var text = StringHelper.Escape(match.Groups[1].Value);

            if (!Uri.IsWellFormedUriString(text, UriKind.RelativeOrAbsolute))
            {
                return(null);
            }

            source = source.Substring(match.Length);
            return(new MarkdownLinkInlineToken(this, text, null, text));
        }
Esempio n. 4
0
 public virtual StringBuffer Render(IMarkdownRenderer renderer, MarkdownCodeInlineToken token, MarkdownInlineContext context)
 {
     return((StringBuffer)"<code>" + StringHelper.Escape(token.Content, true) + "</code>");
 }
Esempio n. 5
0
        public virtual StringBuffer Render(IMarkdownRenderer renderer, MarkdownImageInlineToken token, MarkdownInlineContext context)
        {
            var result = (StringBuffer)"<img src=\"" + StringHelper.Escape(token.Href) + "\" alt=\"" + StringHelper.Escape(token.Text) + "\"";

            if (!string.IsNullOrEmpty(token.Title))
            {
                result = result + " title=\"" + StringHelper.Escape(token.Title) + "\"";
            }
            result = AppendSourceInfo(result, renderer, token);

            result += renderer.Options.XHtml ? "/>" : ">";
            return(result);
        }