Ejemplo n.º 1
0
 /// <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);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Adds the attachments folder as a prefix to all image URLs before the HTML &lt;img&gt; 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);
            }
        }
Ejemplo n.º 3
0
 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;
         }
     }
 }
Ejemplo n.º 4
0
		/// <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);
		}
Ejemplo n.º 5
0
		/// <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;
		}
Ejemplo n.º 6
0
        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("\"", "&quot;");

            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;
        }
Ejemplo n.º 7
0
        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("\"", "&quot;");
            title = title.Replace("\"", "&quot;");

            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;
        }
Ejemplo n.º 8
0
		/// <summary>
		/// Adds the attachments folder as a prefix to all image URLs before the HTML &lt;img&gt; 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);
			}
		}
Ejemplo n.º 9
0
        /// <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);
        }