AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.10.0" />

 PrettyMarkupFormatter

Represents the an HTML5 markup formatter with inserted indents.
using AngleSharp.Dom; using AngleSharp.Text; using System; using System.Linq; namespace AngleSharp.Html { public class PrettyMarkupFormatter : IMarkupFormatter { private string _indentString; private string _newLineString; private int _indentCount; public string Indentation { get { return _indentString; } set { _indentString = value; } } public string NewLine { get { return _newLineString; } set { _newLineString = value; } } public PrettyMarkupFormatter() { _indentCount = 0; _indentString = "\t"; _newLineString = "\n"; } string IMarkupFormatter.Comment(IComment comment) { return IndentBefore() + HtmlMarkupFormatter.Instance.Comment(comment); } string IMarkupFormatter.Doctype(IDocumentType doctype) { string str = string.Empty; if (doctype.ParentElement != null) str = IndentBefore(); return str + HtmlMarkupFormatter.Instance.Doctype(doctype); } string IMarkupFormatter.Processing(IProcessingInstruction processing) { return IndentBefore() + HtmlMarkupFormatter.Instance.Processing(processing); } string IMarkupFormatter.Text(ICharacterData text) { string data = text.Data; string str = string.Empty; string text2 = data.Replace('\n', ' ').TrimEnd(Array.Empty<char>()); if (text2.Length > 0 && text2[0].IsSpaceCharacter()) { text2 = text2.TrimStart(Array.Empty<char>()); str = IndentBefore(); } return str + HtmlMarkupFormatter.EscapeText(text2); } string IMarkupFormatter.OpenTag(IElement element, bool selfClosing) { string str = string.Empty; IText text = element.PreviousSibling as IText; if (element.ParentElement != null && (text == null || EndsWithSpace(text))) str = IndentBefore(); _indentCount++; return str + HtmlMarkupFormatter.Instance.OpenTag(element, selfClosing); } string IMarkupFormatter.CloseTag(IElement element, bool selfClosing) { _indentCount--; string str = string.Empty; IText text = element.LastChild as IText; if (element.HasChildNodes && (text == null || EndsWithSpace(text))) str = IndentBefore(); return str + HtmlMarkupFormatter.Instance.CloseTag(element, selfClosing); } string IMarkupFormatter.Attribute(IAttr attribute) { return HtmlMarkupFormatter.Instance.Attribute(attribute); } private static bool EndsWithSpace(ICharacterData text) { string data = text.Data; if (data.Length > 0) return data[data.Length - 1].IsSpaceCharacter(); return false; } private string IndentBefore() { return _newLineString + string.Join(string.Empty, Enumerable.Repeat(_indentString, _indentCount)); } } }