AngleSharp by Florian Rappl

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

 HtmlToken

class HtmlToken
The abstract base class of any HTML token.
using AngleSharp.Extensions; using AngleSharp.Html; namespace AngleSharp.Parser.Html { internal class HtmlToken { private readonly HtmlTokenType _type; private readonly TextPosition _position; private string _name; public bool IsEmpty => string.IsNullOrEmpty(_name); public bool HasContent { get { for (int i = 0; i < _name.Length; i++) { if (!_name[i].IsSpaceCharacter()) return true; } return false; } } public string Name { get { return _name; } set { _name = value; } } public string Data => _name; public TextPosition Position => _position; public bool IsHtmlCompatible { get { if (_type != HtmlTokenType.StartTag) return _type == HtmlTokenType.Character; return true; } } public bool IsSvg => IsStartTag(Tags.Svg); public bool IsMathCompatible { get { if (IsStartTag("mglyph") || IsStartTag("malignmark")) return _type == HtmlTokenType.Character; return true; } } public HtmlTokenType Type => _type; public HtmlToken(HtmlTokenType type, TextPosition position) : this(type, position, null) { } public HtmlToken(HtmlTokenType type, TextPosition position, string name) { _type = type; _position = position; _name = name; } public string TrimStart() { int num = 0; for (num = 0; num < _name.Length && _name[num].IsSpaceCharacter(); num++) { } string result = _name.Substring(0, num); _name = _name.Substring(num); return result; } public void RemoveNewLine() { if (!string.IsNullOrEmpty(_name) && _name[0] == '\n') _name = _name.Substring(1); } public HtmlTagToken AsTag() { return (HtmlTagToken)this; } public bool IsStartTag(string name) { if (_type == HtmlTokenType.StartTag) return _name.Equals(name); return false; } } }