HtmlToken
The abstract base class of any HTML token.
using System.Diagnostics;
namespace AngleSharp.Parser.Html
{
[DebuggerStepThrough]
internal abstract class HtmlToken
{
private static HtmlEndOfFileToken eof;
protected HtmlTokenType _type;
protected string _name;
public static HtmlEndOfFileToken EOF => eof ?? (eof = new HtmlEndOfFileToken());
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 bool IsHtmlCompatible {
get {
if (_type != HtmlTokenType.StartTag)
return _type == HtmlTokenType.Character;
return true;
}
}
public bool IsSvg => IsStartTag(Tags.Svg);
public bool IsEof => _type == HtmlTokenType.EOF;
public bool IsMathCompatible {
get {
if (IsStartTag("mglyph") || IsStartTag("malignmark"))
return _type == HtmlTokenType.Character;
return true;
}
}
public HtmlTokenType Type => _type;
[DebuggerStepThrough]
public static HtmlCharacterToken Character(string characters)
{
return new HtmlCharacterToken(characters);
}
[DebuggerStepThrough]
public static HtmlCommentToken Comment(string comment)
{
return new HtmlCommentToken(comment);
}
[DebuggerStepThrough]
public static HtmlDoctypeToken Doctype(bool quirksmode)
{
return new HtmlDoctypeToken(quirksmode);
}
[DebuggerStepThrough]
public static HtmlTagToken OpenTag()
{
HtmlTagToken htmlTagToken = new HtmlTagToken();
htmlTagToken._type = HtmlTokenType.StartTag;
return htmlTagToken;
}
[DebuggerStepThrough]
public static HtmlTagToken CloseTag()
{
HtmlTagToken htmlTagToken = new HtmlTagToken();
htmlTagToken._type = HtmlTokenType.EndTag;
return htmlTagToken;
}
[DebuggerStepThrough]
public static HtmlTagToken OpenTag(string name)
{
HtmlTagToken htmlTagToken = new HtmlTagToken(name);
htmlTagToken._type = HtmlTokenType.StartTag;
return htmlTagToken;
}
[DebuggerStepThrough]
public static HtmlTagToken CloseTag(string name)
{
HtmlTagToken htmlTagToken = new HtmlTagToken(name);
htmlTagToken._type = HtmlTokenType.EndTag;
return htmlTagToken;
}
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;
}
}
}