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); }
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); } }
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); }
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); }