Пример #1
0
        void WriteText(HtmlWriter htmlWriter, string text)
        {
            var      callback   = HtmlTagCallback ?? DefaultHtmlTagCallback;
            var      content    = text.ToCharArray();
            int      endIndex   = content.Length;
            int      startIndex = 0;
            UrlMatch match;
            int      count;

            do
            {
                count = endIndex - startIndex;

                if (scanner.Scan(content, startIndex, count, out match))
                {
                    count = match.EndIndex - match.StartIndex;

                    if (match.StartIndex > startIndex)
                    {
                        // write everything up to the match
                        htmlWriter.WriteText(content, startIndex, match.StartIndex - startIndex);
                    }

                    var href = match.Prefix + new string (content, match.StartIndex, count);
                    var ctx  = new FlowedToHtmlTagContext(HtmlTagId.A, new HtmlAttribute(HtmlAttributeId.Href, href));
                    callback(ctx, htmlWriter);

                    if (!ctx.SuppressInnerContent)
                    {
                        htmlWriter.WriteText(content, match.StartIndex, count);
                    }

                    if (!ctx.DeleteEndTag)
                    {
                        ctx.SetIsEndTag(true);

                        if (ctx.InvokeCallbackForEndTag)
                        {
                            callback(ctx, htmlWriter);
                        }
                        else
                        {
                            ctx.WriteTag(htmlWriter);
                        }
                    }

                    startIndex = match.EndIndex;
                }
                else
                {
                    htmlWriter.WriteText(content, startIndex, count);
                    break;
                }
            } while (startIndex < endIndex);
        }
Пример #2
0
        void WriteParagraph(HtmlWriter htmlWriter, IList <FlowedToHtmlTagContext> stack, ref int currentQuoteDepth, StringBuilder para, int quoteDepth)
        {
            var callback = HtmlTagCallback ?? DefaultHtmlTagCallback;
            FlowedToHtmlTagContext ctx;

            while (currentQuoteDepth < quoteDepth)
            {
                ctx = new FlowedToHtmlTagContext(HtmlTagId.BlockQuote);
                callback(ctx, htmlWriter);
                currentQuoteDepth++;
                stack.Add(ctx);
            }

            while (quoteDepth < currentQuoteDepth)
            {
                ctx = stack[stack.Count - 1];
                stack.RemoveAt(stack.Count - 1);

                if (!SuppressContent(stack) && !ctx.DeleteEndTag)
                {
                    ctx.SetIsEndTag(true);

                    if (ctx.InvokeCallbackForEndTag)
                    {
                        callback(ctx, htmlWriter);
                    }
                    else
                    {
                        ctx.WriteTag(htmlWriter);
                    }
                }

                if (ctx.TagId == HtmlTagId.BlockQuote)
                {
                    currentQuoteDepth--;
                }
            }

            if (SuppressContent(stack))
            {
                return;
            }

            ctx = new FlowedToHtmlTagContext(para.Length == 0 ? HtmlTagId.Br : HtmlTagId.P);
            callback(ctx, htmlWriter);

            if (para.Length > 0)
            {
                if (!ctx.SuppressInnerContent)
                {
                    WriteText(htmlWriter, para.ToString());
                }

                if (!ctx.DeleteEndTag)
                {
                    ctx.SetIsEndTag(true);

                    if (ctx.InvokeCallbackForEndTag)
                    {
                        callback(ctx, htmlWriter);
                    }
                    else
                    {
                        ctx.WriteTag(htmlWriter);
                    }
                }
            }

            if (!ctx.DeleteTag)
            {
                htmlWriter.WriteMarkupText(Environment.NewLine);
            }
        }
Пример #3
0
		void WriteParagraph (HtmlWriter htmlWriter, IList<FlowedToHtmlTagContext> stack, ref int currentQuoteDepth, StringBuilder para, int quoteDepth)
		{
			var callback = HtmlTagCallback ?? DefaultHtmlTagCallback;
			FlowedToHtmlTagContext ctx;

			while (currentQuoteDepth < quoteDepth) {
				ctx = new FlowedToHtmlTagContext (HtmlTagId.BlockQuote);
				callback (ctx, htmlWriter);
				currentQuoteDepth++;
				stack.Add (ctx);
			}

			while (quoteDepth < currentQuoteDepth) {
				ctx = stack[stack.Count - 1];
				stack.RemoveAt (stack.Count - 1);

				if (!SuppressContent (stack) && !ctx.DeleteEndTag) {
					ctx.SetIsEndTag (true);

					if (ctx.InvokeCallbackForEndTag)
						callback (ctx, htmlWriter);
					else
						ctx.WriteTag (htmlWriter);
				}

				if (ctx.TagId == HtmlTagId.BlockQuote)
					currentQuoteDepth--;
			}

			if (SuppressContent (stack))
				return;

			ctx = new FlowedToHtmlTagContext (para.Length == 0 ? HtmlTagId.Br : HtmlTagId.P);
			callback (ctx, htmlWriter);

			if (para.Length > 0) {
				if (!ctx.SuppressInnerContent)
					WriteText (htmlWriter, para.ToString ());

				if (!ctx.DeleteEndTag) {
					ctx.SetIsEndTag (true);

					if (ctx.InvokeCallbackForEndTag)
						callback (ctx, htmlWriter);
					else
						ctx.WriteTag (htmlWriter);
				}
			}

			if (!ctx.DeleteTag)
				htmlWriter.WriteMarkupText (Environment.NewLine);
		}
Пример #4
0
		void WriteText (HtmlWriter htmlWriter, string text)
		{
			var callback = HtmlTagCallback ?? DefaultHtmlTagCallback;
			var content = text.ToCharArray ();
			int endIndex = content.Length;
			int startIndex = 0;
			UrlMatch match;
			int count;

			do {
				count = endIndex - startIndex;

				if (scanner.Scan (content, startIndex, count, out match)) {
					count = match.EndIndex - match.StartIndex;

					if (match.StartIndex > startIndex) {
						// write everything up to the match
						htmlWriter.WriteText (content, startIndex, match.StartIndex - startIndex);
					}

					var href = match.Prefix + new string (content, match.StartIndex, count);
					var ctx = new FlowedToHtmlTagContext (HtmlTagId.A, new HtmlAttribute (HtmlAttributeId.Href, href));
					callback (ctx, htmlWriter);

					if (!ctx.SuppressInnerContent)
						htmlWriter.WriteText (content, match.StartIndex, count);

					if (!ctx.DeleteEndTag) {
						ctx.SetIsEndTag (true);

						if (ctx.InvokeCallbackForEndTag)
							callback (ctx, htmlWriter);
						else
							ctx.WriteTag (htmlWriter);
					}

					startIndex = match.EndIndex;
				} else {
					htmlWriter.WriteText (content, startIndex, count);
					break;
				}
			} while (startIndex < endIndex);
		}