#ifndef HTMLToken_h
#define HTMLToken_h
#include "MarkupTokenBase.h"
namespace WebCore {
class HTMLTokenTypes {
public:
enum Type {
Uninitialized,
DOCTYPE,
StartTag,
EndTag,
Comment,
Character,
EndOfFile,
};
class DoctypeData : public DoctypeDataBase {
WTF_MAKE_NONCOPYABLE(DoctypeData);
public:
DoctypeData()
: m_forceQuirks(false)
{
}
bool m_forceQuirks;
};
};
class HTMLToken : public MarkupTokenBase<HTMLTokenTypes, HTMLTokenTypes::DoctypeData> {
public:
void appendToName(UChar character)
{
ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag || m_type == HTMLTokenTypes::DOCTYPE);
MarkupTokenBase<HTMLTokenTypes, HTMLTokenTypes::DoctypeData>::appendToName(character);
}
const DataVector& name() const
{
ASSERT(m_type == HTMLTokenTypes::StartTag || m_type == HTMLTokenTypes::EndTag || m_type == HTMLTokenTypes::DOCTYPE);
return MarkupTokenBase<HTMLTokenTypes, HTMLTokenTypes::DoctypeData>::name();
}
bool forceQuirks() const
{
ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
return m_doctypeData->m_forceQuirks;
}
void setForceQuirks()
{
ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
m_doctypeData->m_forceQuirks = true;
}
};
class AtomicHTMLToken : public AtomicMarkupTokenBase<HTMLToken> {
WTF_MAKE_NONCOPYABLE(AtomicHTMLToken);
public:
AtomicHTMLToken(HTMLToken& token) : AtomicMarkupTokenBase<HTMLToken>(&token) { }
AtomicHTMLToken(HTMLTokenTypes::Type type, AtomicString name, const Vector<Attribute>& attributes = Vector<Attribute>())
: AtomicMarkupTokenBase<HTMLToken>(type, name, attributes)
{
}
bool forceQuirks() const
{
ASSERT(m_type == HTMLTokenTypes::DOCTYPE);
return m_doctypeData->m_forceQuirks;
}
};
}
#endif