mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 12:48:10 +00:00
LibWeb: Implement a bit more of DOCTYPE tokenization
This commit is contained in:
parent
b5c0703e14
commit
e45c8b842c
1 changed files with 71 additions and 0 deletions
|
@ -58,6 +58,9 @@
|
||||||
#define ON_ASCII_ALPHA \
|
#define ON_ASCII_ALPHA \
|
||||||
if (current_input_character.has_value() && isalpha(current_input_character.value()))
|
if (current_input_character.has_value() && isalpha(current_input_character.value()))
|
||||||
|
|
||||||
|
#define ON_ASCII_UPPER_ALPHA \
|
||||||
|
if (current_input_character.has_value() && current_input_character.value() >= 'A' && current_input_character.value() <= 'Z')
|
||||||
|
|
||||||
#define ON_WHITESPACE \
|
#define ON_WHITESPACE \
|
||||||
if (current_input_character.has_value() && (current_input_character.value() == '\t' || current_input_character.value() == '\a' || current_input_character.value() == '\f' || current_input_character.value() == ' '))
|
if (current_input_character.has_value() && (current_input_character.value() == '\t' || current_input_character.value() == '\a' || current_input_character.value() == '\f' || current_input_character.value() == ' '))
|
||||||
|
|
||||||
|
@ -207,6 +210,18 @@ void HTMLTokenizer::run()
|
||||||
{
|
{
|
||||||
SWITCH_TO(BeforeDOCTYPEName);
|
SWITCH_TO(BeforeDOCTYPEName);
|
||||||
}
|
}
|
||||||
|
ON('>')
|
||||||
|
{
|
||||||
|
RECONSUME_IN(BeforeDOCTYPEName);
|
||||||
|
}
|
||||||
|
ON_EOF
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
|
ANYTHING_ELSE
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
END_STATE
|
END_STATE
|
||||||
|
|
||||||
|
@ -216,6 +231,24 @@ void HTMLTokenizer::run()
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
ON_ASCII_UPPER_ALPHA
|
||||||
|
{
|
||||||
|
create_new_token(HTMLToken::Type::DOCTYPE);
|
||||||
|
m_current_token.m_doctype.name.append(tolower(current_input_character.value()));
|
||||||
|
SWITCH_TO(DOCTYPEName);
|
||||||
|
}
|
||||||
|
ON(0)
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
|
ON('>')
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
|
ON_EOF
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
ANYTHING_ELSE
|
ANYTHING_ELSE
|
||||||
{
|
{
|
||||||
create_new_token(HTMLToken::Type::DOCTYPE);
|
create_new_token(HTMLToken::Type::DOCTYPE);
|
||||||
|
@ -227,11 +260,27 @@ void HTMLTokenizer::run()
|
||||||
|
|
||||||
BEGIN_STATE(DOCTYPEName)
|
BEGIN_STATE(DOCTYPEName)
|
||||||
{
|
{
|
||||||
|
ON_WHITESPACE
|
||||||
|
{
|
||||||
|
SWITCH_TO(AfterDOCTYPEName);
|
||||||
|
}
|
||||||
ON('>')
|
ON('>')
|
||||||
{
|
{
|
||||||
emit_current_token();
|
emit_current_token();
|
||||||
SWITCH_TO(Data);
|
SWITCH_TO(Data);
|
||||||
}
|
}
|
||||||
|
ON_ASCII_UPPER_ALPHA
|
||||||
|
{
|
||||||
|
m_current_token.m_doctype.name.append(tolower(current_input_character.value()));
|
||||||
|
}
|
||||||
|
ON(0)
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
|
ON_EOF
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
ANYTHING_ELSE
|
ANYTHING_ELSE
|
||||||
{
|
{
|
||||||
m_current_token.m_doctype.name.append(current_input_character.value());
|
m_current_token.m_doctype.name.append(current_input_character.value());
|
||||||
|
@ -240,6 +289,28 @@ void HTMLTokenizer::run()
|
||||||
}
|
}
|
||||||
END_STATE
|
END_STATE
|
||||||
|
|
||||||
|
BEGIN_STATE(AfterDOCTYPEName)
|
||||||
|
{
|
||||||
|
ON_WHITESPACE
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ON('>')
|
||||||
|
{
|
||||||
|
emit_current_token();
|
||||||
|
SWITCH_TO(Data);
|
||||||
|
}
|
||||||
|
ON_EOF
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
|
ANYTHING_ELSE
|
||||||
|
{
|
||||||
|
TODO();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
END_STATE
|
||||||
|
|
||||||
BEGIN_STATE(BeforeAttributeName)
|
BEGIN_STATE(BeforeAttributeName)
|
||||||
{
|
{
|
||||||
ON_WHITESPACE
|
ON_WHITESPACE
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue