/// <summary> /// Raises the <see cref="ImageParsed"/> event. /// </summary> /// <param name="e">The event data. </param> protected void OnImageParsed(ImageEventArgs e) { if (ImageParsed != null) { ImageParsed(this, e); } }
/// <summary> /// Adds the attachments folder as a prefix to all image URLs before the HTML <img> tag is written. /// </summary> private void ImageParsed(object sender, ImageEventArgs e) { if (!e.OriginalSrc.StartsWith("http://") && !e.OriginalSrc.StartsWith("https://") && !e.OriginalSrc.StartsWith("www.")) { string src = e.OriginalSrc; src = _imgFileRegex.Replace(src, ""); string attachmentsPath = _applicationSettings.AttachmentsUrlPath; string urlPath = attachmentsPath + (src.StartsWith("/") ? "" : "/") + src; e.Src = UrlResolver.ConvertToAbsolutePath(urlPath); } }
private void FixLinks(MarkdownDocument document) { foreach (var item in document.Descendants().OfType <LinkInline>()) { LinkInline link = (LinkInline)item; if (item.IsImage) { ImageEventArgs args = new ImageEventArgs(link.Url, link.Url, link.Label, link.Label); ImageParsed?.Invoke(this, args); link.Url = args.Src; } else { LinkEventArgs args = new LinkEventArgs(link.Url, link.Url, link.Label, ""); LinkParsed?.Invoke(this, args); link.Url = args.Href; } } }
/// <summary> /// Raises the <see cref="ImageParsed"/> event. /// </summary> /// <param name="e">The event data. </param> protected void OnImageParsed(ImageEventArgs e) { if (ImageParsed != null) ImageParsed(this, e); }
/// <summary> /// Process image creole into <img> </img> /// </summary> /// <param name="markup"></param> /// <returns></returns> protected virtual string _processImageCreole(string markup) { int sanityCheckMax = 5000; int sanityCheckCount = 0; int iPos = _indexOfWithSkip(markup, "{{", 0); while (iPos >= 0) { if (++sanityCheckCount > sanityCheckMax) break; int iEnd = _indexOfWithSkip(markup, "}}", iPos); if (iEnd > iPos) { iPos += 2; string innards = markup.Substring(iPos, iEnd - iPos); string href = innards; string text = href; ImageEventArgs.HorizontalAlignment align = ImageEventArgs.HorizontalAlignment.None; string[] splits = innards.Split('|'); if (innards.Count(x => x == '|') > 1) { if (Enum.TryParse(splits[1], true, out align) == false) align = ImageEventArgs.HorizontalAlignment.None; } if (splits.Count() > 0) { href = splits.First(); text = _processCreoleFragment(splits.Last()); } ImageEventArgs args = new ImageEventArgs(href, href, text, text, align); OnImageParsed(args); string imageHtml = String.Format("<img src=\"{0}\" alt=\"{1}\" title=\"{2}\" border=\"0\" />", args.Src, args.Alt, args.Title); string divHtml = "<div class=\"{0}\">{1}</div>"; string imageFrameContent = imageHtml; if (!args.Src.EndsWith(args.Alt)) imageFrameContent += String.Format(divHtml, "caption", args.Alt); string imageFrame = String.Format(divHtml, "image_frame", imageFrameContent); string replacement = markup.Substring(0, iPos - 2); switch (align) { case ImageEventArgs.HorizontalAlignment.Left: replacement += String.Format(divHtml, "floatleft", imageFrame); break; case ImageEventArgs.HorizontalAlignment.Right: replacement += String.Format(divHtml, "floatright", imageFrame); break; case ImageEventArgs.HorizontalAlignment.Center: replacement += String.Format(divHtml, "center", String.Format(divHtml, "floatnone", imageFrame)); break; default: replacement += String.Format(divHtml, "floatnone", imageFrame); break; } replacement += markup.Substring(iEnd + 2); markup = replacement; } else { break; } iPos = _indexOfWithSkip(markup, "{{", iPos); } return markup; }
private string ImageReferenceEvaluator(Match match) { string wholeMatch = match.Groups[1].Value; string altText = match.Groups[2].Value; string linkID = match.Groups[3].Value.ToLowerInvariant(); string result; // for shortcut links like ![this][]. if (linkID == "") linkID = altText.ToLowerInvariant(); altText = altText.Replace("\"", """); if (_urls.ContainsKey(linkID)) { string url = _urls[linkID]; url = EncodeProblemUrlChars(url); url = EscapeBoldItalic(url); ImageEventArgs args = new ImageEventArgs(url, url, altText, ""); OnImageParsed(args); result = string.Format("<img src=\"{0}\" border=\"0\" alt=\"{1}\"", args.Src, args.Alt); if (_titles.ContainsKey(linkID)) { string title = _titles[linkID]; title = EscapeBoldItalic(title); result += string.Format(" title=\"{0}\"", title); } result += _emptyElementSuffix; } else { // If there's no such link ID, leave intact: result = wholeMatch; } return result; }
private string ImageInlineEvaluator(Match match) { string alt = match.Groups[2].Value; string url = match.Groups[3].Value; string title = match.Groups[6].Value; string width = match.Groups[9].Value == String.Empty ? String.Empty : String.Format("{0}px", match.Groups[9].Value); string height = match.Groups[10].Value == String.Empty ? String.Empty : String.Format("{0}px", match.Groups[10].Value); string result; alt = alt.Replace("\"", """); title = title.Replace("\"", """); if (url.StartsWith("<") && url.EndsWith(">")) url = url.Substring(1, url.Length - 2); // Remove <>'s surrounding URL, if present url = EncodeProblemUrlChars(url); url = EscapeBoldItalic(url); ImageEventArgs args = new ImageEventArgs(url, url, alt, ""); OnImageParsed(args); result = string.Format("<img src=\"{0}\" border=\"0\" alt=\"{1}\" width=\"{2}\" height=\"{3}\"", args.Src, args.Alt, width, height); if (!String.IsNullOrEmpty(title)) { title = EscapeBoldItalic(title); result += string.Format(" title=\"{0}\"", title); } result += _emptyElementSuffix; return result; }
/// <summary> /// Process image creole into <img> </img> /// </summary> /// <param name="markup"></param> /// <returns></returns> protected virtual string _processImageCreole(string markup) { int sanityCheckMax = 5000; int sanityCheckCount = 0; int iPos = _indexOfWithSkip(markup, "{{", 0); while (iPos >= 0) { if (++sanityCheckCount > sanityCheckMax) { break; } int iEnd = _indexOfWithSkip(markup, "}}", iPos); if (iEnd > iPos) { iPos += 2; string innards = markup.Substring(iPos, iEnd - iPos); string href = innards; string text = href; ImageEventArgs.HorizontalAlignment align = ImageEventArgs.HorizontalAlignment.None; string[] splits = innards.Split('|'); if (innards.Count(x => x == '|') > 1) { if (Enum.TryParse(splits[1], true, out align) == false) { align = ImageEventArgs.HorizontalAlignment.None; } } if (splits.Count() > 0) { href = splits.First(); text = _processCreoleFragment(splits.Last()); } ImageEventArgs args = new ImageEventArgs(href, href, text, text, align); OnImageParsed(args); string imageHtml = String.Format("<img src=\"{0}\" alt=\"{1}\" title=\"{2}\" border=\"0\" />", args.Src, args.Alt, args.Title); string divHtml = "<div class=\"{0}\">{1}</div>"; string imageFrameContent = imageHtml; if (!args.Src.EndsWith(args.Alt)) { imageFrameContent += String.Format(divHtml, "caption", args.Alt); } string imageFrame = String.Format(divHtml, "image_frame", imageFrameContent); string replacement = markup.Substring(0, iPos - 2); switch (align) { case ImageEventArgs.HorizontalAlignment.Left: replacement += String.Format(divHtml, "floatleft", imageFrame); break; case ImageEventArgs.HorizontalAlignment.Right: replacement += String.Format(divHtml, "floatright", imageFrame); break; case ImageEventArgs.HorizontalAlignment.Center: replacement += String.Format(divHtml, "center", String.Format(divHtml, "floatnone", imageFrame)); break; default: replacement += String.Format(divHtml, "floatnone", imageFrame); break; } replacement += markup.Substring(iEnd + 2); markup = replacement; } else { break; } iPos = _indexOfWithSkip(markup, "{{", iPos); } return(markup); }