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)); }
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); }
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)); }
public virtual StringBuffer Render(IMarkdownRenderer renderer, MarkdownCodeInlineToken token, MarkdownInlineContext context) { return((StringBuffer)"<code>" + StringHelper.Escape(token.Content, true) + "</code>"); }
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); }