Esempio n. 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);
        }