public void Transform(Match match, MarkdownReplacementArgs args) { var html = match.Matches[0]; var text = html.Text; if (text.StartsWith("<script") || text.Contains("javascript:")) { args.Output.AppendUnixLine(MarkdownEncoding.Encode(text)); return; } int last = 0; var matches = html.Matches; for (int i = 0; i < matches.Count; i++) { var content = matches[i]; if (content.Index - match.Index > last) { args.Output.Append(text, last, content.Index - match.Index - last); } last = content.Index - match.Index + content.Length; args.Encoding.Transform(args, content); } if (last < text.Length) { args.Output.Append(text, last, text.Length - last); } }
public void Transform(Match match, MarkdownReplacementArgs args) { var text = match.Text; if (text.Contains("<script") || text.Contains("javascript:")) { args.Output.AppendUnixLine(MarkdownEncoding.Encode(text)); } else { args.Output.AppendUnixLine(text); } }
public MarkdownGrammar() : base("markdown") { EnableMatchEvents = false; indent = new RepeatParser(Terms.indent, 1, 1); prefix = new RepeatParser(Terms.indent, 0, 0); prefixsp = new RepeatParser(Terms.sporht, 0, 0); encoding = new MarkdownEncoding(); encoding.Initialize(this); replacementsOnly = new ReplacementParser(this); replacements = new ReplacementParser(this); var reps = GetReplacements().ToArray(); replacementsOnly.Add(reps, false); replacements.Add(reps, true); replacements.Add(Terminals.AnyChar); this.Inner = -replacements; SetError<Parser>(false); }
private static Encoding GetEncoding(MarkdownEncoding encoding) { switch (encoding) { case MarkdownEncoding.UTF7: return(Encoding.UTF7); case MarkdownEncoding.UTF8: return(Encoding.UTF8); case MarkdownEncoding.ASCII: return(Encoding.ASCII); case MarkdownEncoding.Unicode: return(Encoding.Unicode); case MarkdownEncoding.UTF32: return(Encoding.UTF32); default: return(new UTF8Encoding(false)); } }
public void Transform(Match match, MarkdownReplacementArgs args) { Match link; string linkValue, nameValue; var count = match.Matches.Count; if (count == 1) { link = match.Matches[0]; linkValue = nameValue = link.StringValue; } else { nameValue = match.Matches[0].Text; link = match.Matches[1]; linkValue = link.StringValue; } MarkdownReference reference; string url; string title; if (link.Name == "ref" || link.Name == "name") { if (string.IsNullOrEmpty(linkValue)) { linkValue = nameValue; } if (args.References.TryGetValue(linkValue, out reference)) { url = reference.Url; title = reference.Title; } else { url = title = null; } } else { url = linkValue; if (count > 2) { title = match.Matches[2].StringValue; } else { title = null; } } if (url != null) { var isImage = match.Scanner.Substring(match.Index, 1) == "!"; if (isImage) { args.Output.Append("<img src=\""); } else { args.Output.Append("<a href=\""); } args.Output.Append(MarkdownEncoding.EncodeAttribute(url)); args.Output.Append("\""); if (isImage) { var alt = nameValue; if (!string.IsNullOrEmpty(alt)) { args.Output.Append(" alt=\""); args.Output.Append(MarkdownEncoding.EncodeAttribute(alt)); args.Output.Append("\""); } } if (!string.IsNullOrEmpty(title)) { args.Output.Append(" title=\""); args.Output.Append(MarkdownEncoding.EncodeAttribute(title)); args.Output.Append("\""); } if (isImage) { args.Output.Append(" />"); } else { args.Output.Append(">"); args.Encoding.Transform(args, nameValue); args.Output.Append("</a>"); } } else { args.Output.Append(match.Text); } }