diff options
Diffstat (limited to 'src/parser')
| -rw-r--r-- | src/parser/html_lexer.cc | 6 | ||||
| -rw-r--r-- | src/parser/tree_builder.cc | 8 |
2 files changed, 7 insertions, 7 deletions
diff --git a/src/parser/html_lexer.cc b/src/parser/html_lexer.cc index 73591b3..2aa05b1 100644 --- a/src/parser/html_lexer.cc +++ b/src/parser/html_lexer.cc @@ -90,12 +90,8 @@ std::vector<HtmlToken> HtmlLexer::tokenize( // NOLINT(readability-convert-member tokens.emplace_back( TagOpenToken { buffer } ); buffer.clear(); state = LexerState::Data; - } else if ( std::isspace( static_cast<unsigned char>( c ) ) ) { - tokens.emplace_back( TagOpenToken { buffer } ); - buffer.clear(); - state = LexerState::SwallowAttributes; } else { - buffer += static_cast<char>( std::tolower( static_cast<unsigned char>( c ) ) ); + buffer += c; } break; case LexerState::ClosingTagName: diff --git a/src/parser/tree_builder.cc b/src/parser/tree_builder.cc index 4f7f87e..64f841b 100644 --- a/src/parser/tree_builder.cc +++ b/src/parser/tree_builder.cc @@ -36,10 +36,14 @@ struct TokenVisitor void operator()( const TagOpenToken& token ) const { + const std::size_t space_pos = token.name.find( ' ' ); + const std::string base_name + = ( space_pos == std::string::npos ) ? token.name : token.name.substr( 0, space_pos ); + DomNode new_node { .tag_name = token.name, .text_content = "", .children = {} }; - if ( token.name == "meta" || token.name == "link" || token.name == "img" || token.name == "br" - || token.name == "hr" || token.name == "input" || token.name == "base" || token.name == "col" ) { + if ( base_name == "meta" || base_name == "link" || base_name == "img" || base_name == "br" || base_name == "hr" + || base_name == "input" || base_name == "base" || base_name == "col" ) { stack->back().children.push_back( std::move( new_node ) ); } else { |
