|
using System;
using System.Diagnostics;
namespace AngleSharp.Html
{
/// <summary>
/// The abstract base class of any token.
/// </summary>
[DebuggerStepThrough]
abstract class HtmlToken
{
#region Factory
/// <summary>
/// Gets the end of file token.
/// </summary>
public static HtmlEndOfFileToken EOF
{
get { return eof ?? (eof = new HtmlEndOfFileToken()); }
}
static HtmlCharacterToken buffer = new HtmlCharacterToken();
/// <summary>
/// Creates a new HTML character token based on the given character.
/// </summary>
/// <param name="character">The character to contain.</param>
/// <returns>The generated token.</returns>
[DebuggerStepThrough]
public static HtmlCharacterToken Character(Char character)
{
return new HtmlCharacterToken(character);
}
/// <summary>
/// Creates a new HTML characters token based on the given characters.
/// </summary>
/// <param name="character1">The first character to contain.</param>
/// <param name="character2">The second character to contain.</param>
/// <returns>The generated token.</returns>
[DebuggerStepThrough]
public static HtmlCharactersToken Characters(Char character1, Char character2)
{
return new HtmlCharactersToken(new Char[] { character1, character2 });
}
/// <summary>
/// Creates a new HTML characters token based on the given characters.
/// </summary>
/// <param name="characters">The characters to contain.</param>
/// <returns>The generated token.</returns>
[DebuggerStepThrough]
public static HtmlCharactersToken Characters(Char[] characters)
{
return new HtmlCharactersToken(characters);
}
/// <summary>
/// Creates a new HTML characters token based on the given characters.
/// </summary>
/// <param name="characters">The characters to contain.</param>
/// <returns>The generated token.</returns>
[DebuggerStepThrough]
public static HtmlCharactersToken Characters(String characters)
{
return new HtmlCharactersToken(characters);
}
/// <summary>
/// Creates a new HTML comment token based on the given string.
/// </summary>
/// <param name="comment">The comment to contain.</param>
/// <returns>The generated token.</returns>
[DebuggerStepThrough]
public static HtmlCommentToken Comment(String comment)
{
return new HtmlCommentToken(comment);
}
/// <summary>
/// Creates a new HTML doctype token.
/// </summary>
/// <param name="quirksmode">Determines if quirksmode will be forced.</param>
/// <returns>The generated token.</returns>
[DebuggerStepThrough]
public static HtmlDoctypeToken Doctype(Boolean quirksmode)
{
return new HtmlDoctypeToken(quirksmode);
}
/// <summary>
/// Creates a new opening HtmlTagToken.
/// </summary>
/// <returns>The new HTML tag token.</returns>
[DebuggerStepThrough]
public static HtmlTagToken OpenTag()
{
return new HtmlTagToken() { _type = HtmlTokenType.StartTag };
}
/// <summary>
/// Creates a new closing HtmlTagToken.
/// </summary>
/// <returns>The new HTML tag token.</returns>
[DebuggerStepThrough]
public static HtmlTagToken CloseTag()
{
return new HtmlTagToken() { _type = HtmlTokenType.EndTag };
}
/// <summary>
/// Creates a new opening HtmlTagToken for the given name.
/// </summary>
/// <param name="name">The name of the tag.</param>
/// <returns>The new HTML tag token.</returns>
[DebuggerStepThrough]
public static HtmlTagToken OpenTag(String name)
{
return new HtmlTagToken(name) { _type = HtmlTokenType.StartTag };
}
/// <summary>
/// Creates a new closing HtmlTagToken for the given name.
/// </summary>
/// <param name="name">The name of the tag.</param>
/// <returns>The new HTML tag token.</returns>
[DebuggerStepThrough]
public static HtmlTagToken CloseTag(String name)
{
return new HtmlTagToken(name) { _type = HtmlTokenType.EndTag };
}
#endregion
#region Members
static HtmlEndOfFileToken eof;
protected HtmlTokenType _type;
#endregion
#region Properties
/// <summary>
/// Gets the type of the token.
/// </summary>
public HtmlTokenType Type
{
get { return _type; }
}
/// <summary>
/// Gets if the character data is NULL.
/// </summary>
/// <returns>True if the character token is NULL, otherwise false.</returns>
public virtual bool IsNullChar
{
get { return false; }
}
/// <summary>
/// Gets if the character data is a new line.
/// </summary>
/// <returns>True if the character token is a new line, otherwise false.</returns>
public virtual bool IsNewLine
{
get { return false; }
}
/// <summary>
/// Gets if the character data is actually a space character.
/// </summary>
/// <returns>True if the character data is a space character.</returns>
public virtual bool IsIgnoreable
{
get { return false; }
}
#endregion
#region Methods
/// <summary>
/// Finds out if the current token is a start tag token with the given name.
/// </summary>
/// <param name="name">The name of the tag.</param>
/// <returns>True if the token is indeed a start tag token with the given name, otherwise false.</returns>
public virtual Boolean IsStartTag(String name)
{
return false;
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Florian lives in Munich, Germany. He started his programming career with Perl. After programming C/C++ for some years he discovered his favorite programming language C#. He did work at Siemens as a programmer until he decided to study Physics.
During his studies he worked as an IT consultant for various companies. After graduating with a PhD in theoretical particle Physics he is working as a senior technical consultant in the field of home automation and IoT.
Florian has been giving lectures in C#, HTML5 with CSS3 and JavaScript, software design, and other topics. He is regularly giving talks at user groups, conferences, and companies. He is actively contributing to open-source projects. Florian is the maintainer of AngleSharp, a completely managed browser engine.