public IHtmlDocument BBCodeConversion(IHtmlDocument doc)
        {
            if (!BBIgnoringLinks)
            {
                foreach (var element in doc.All.OfType <IHtmlAnchorElement>())
                {
                    element.OuterHtml = $"[url={element.Href}]{element.InnerHtml}[/url]";
                }
            }


            if (!BBIgnoringImages)
            {
                foreach (var element in doc.All.OfType <IHtmlImageElement>())
                {
                    element.OuterHtml = $"[img]{element.Source}[/img]";
                }
            }

            if (!BBIgnoringLists)
            {
                foreach (var element in doc.All.OfType <IHtmlOrderedListElement>())
                {
                    element.OuterHtml = $"[olist]{element.InnerHtml}[/olist]";
                }

                foreach (var element in doc.All.OfType <IHtmlUnorderedListElement>())
                {
                    element.OuterHtml = $"[list]{element.InnerHtml}[/list]";
                }

                foreach (var element in doc.All.OfType <IHtmlListItemElement>())
                {
                    element.OuterHtml = $"[*]{element.InnerHtml}";
                }
            }

            if (!BBIgnoringHeaders)
            {
                foreach (var element in doc.All.OfType <IHtmlHeadingElement>())
                {
                    //Ugly placeholder for now.
                    var comparer = StringComparison.OrdinalIgnoreCase;
                    var text     = element.OuterHtml;
                    text = text.Replace("<h1>", "[h1]", comparer).Replace("<h2>", "[h2]", comparer).Replace("<h3>", "[h3]", comparer).Replace("<h4>", "[h4]", comparer).Replace("<h5>", "[h5]", comparer).Replace("<h6>", "[h6]", comparer);
                    text = text.Replace("</h1>", "[/h1]", comparer).Replace("</h2>", "[/h2]", comparer).Replace("</h3>", "[/h3]", comparer).Replace("</h4>", "[/h4]", comparer).Replace("</h5>", "[/h5]", comparer).Replace("</h6>", "[/h6]", comparer);
                    element.OuterHtml = text;
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.Strong) < 0)
            {
                foreach (var element in doc.GetElementsByTagName(TagNames.Strong))
                {
                    element.OuterHtml = $"[b]{element.InnerHtml}[/b]";
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.Em) < 0)
            {
                foreach (var element in doc.GetElementsByTagName(TagNames.Em))
                {
                    element.OuterHtml = $"[i]{element.InnerHtml}[/i]";
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.U) < 0)
            {
                foreach (var element in doc.GetElementsByTagName(TagNames.U))
                {
                    element.OuterHtml = $"[u]{element.InnerHtml}[/u]";
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.P) < 0 && BBIgnoredElements.IndexOf(typeof(IHtmlParagraphElement)) < 0)
            {
                foreach (var element in doc.All.OfType <IHtmlParagraphElement>())
                {
                    element.OuterHtml = element.InnerHtml + Environment.NewLine;
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.Code) < 0)
            {
                foreach (var element in doc.GetElementsByTagName(TagNames.Code))
                {
                    element.OuterHtml = $"[code]{element.InnerHtml}[/code]";
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.Pre) < 0)
            {
                foreach (var element in doc.GetElementsByTagName(TagNames.Pre))
                {
                    element.OuterHtml = $"[noparse]{element.InnerHtml}[/noparse]";
                }
            }

            if (BBIgnoredTags.IndexOf(TagNames.Strike) < 0)
            {
                foreach (var element in doc.GetElementsByTagName(TagNames.Strike))
                {
                    element.OuterHtml = $"[strike]{element.InnerHtml}[/strike]";
                }
            }

            /*
             * foreach (var element in doc.All)
             * {
             *      Log.Here().Activity($"Element | Type {element.GetType()} Content: {element.OuterHtml}");
             * }
             */

            return(doc);
        }
 public void AddTagToIgnoreList(params string[] tagNames)
 {
     BBIgnoredTags.AddRange(tagNames);
 }