AngleSharp by Florian Rappl

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

 HtmlParserExtensions

static class HtmlParserExtensions
Extensions to be used exclusively by the parser or the tokenizer.
using AngleSharp.Dom; using AngleSharp.Dom.Collections; using AngleSharp.Dom.Html; using AngleSharp.Extensions; using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.CompilerServices; namespace AngleSharp.Parser.Html { [DebuggerStepThrough] internal static class HtmlParserExtensions { public static void SetAttributes(this Element element, List<KeyValuePair<string, string>> attributes) { NamedNodeMap attributes2 = element.Attributes; for (int i = 0; i < attributes.Count; i++) { KeyValuePair<string, string> keyValuePair = attributes[i]; Attr attr = new Attr(keyValuePair.Key, keyValuePair.Value); attributes2.FastAddItem(attr); } } public static int GetCode(this HtmlParseError code) { return (int)code; } public static void SetUniqueAttributes(this Element element, List<KeyValuePair<string, string>> attributes) { for (int num = attributes.Count - 1; num >= 0; num--) { if (element.HasAttribute(attributes[num].Key)) attributes.RemoveAt(num); } element.SetAttributes(attributes); } public static void AddFormatting(this List<Element> formatting, Element element) { int num = 0; for (int num2 = formatting.Count - 1; num2 >= 0; num2--) { Element element2 = formatting[num2]; if (element2 == null) break; if (string.Equals(element2.NodeName, element.NodeName, StringComparison.Ordinal) && string.Equals(element2.NamespaceUri, element.NamespaceUri, StringComparison.Ordinal) && element2.Attributes.AreEqual(element.Attributes) && ++num == 3) { formatting.RemoveAt(num2); break; } } formatting.Add(element); } public static void ClearFormatting(this List<Element> formatting) { while (formatting.Count != 0) { int index = formatting.Count - 1; Element element = formatting[index]; formatting.RemoveAt(index); if (element == null) break; } } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void AddScopeMarker(this List<Element> formatting) { formatting.Add(null); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void AddComment(this Node parent, HtmlToken token) { parent.AddNode(new Comment(parent.Owner, token.Data)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsTableElement(this INode node) { if (!(node is IHtmlTableElement) && !(node is IHtmlTableSectionElement)) return node is IHtmlTableRowElement; return true; } } }