CompactHTMLToken::CompactHTMLToken(const HTMLToken& token) : m_type(token.type()) { switch (m_type) { case HTMLTokenTypes::Uninitialized: ASSERT_NOT_REACHED(); break; case HTMLTokenTypes::DOCTYPE: m_data = String(token.name().data(), token.name().size()); m_publicIdentifier = String(token.publicIdentifier().data(), token.publicIdentifier().size()); m_systemIdentifier = String(token.systemIdentifier().data(), token.systemIdentifier().size()); break; case HTMLTokenTypes::EndOfFile: break; case HTMLTokenTypes::StartTag: m_attributes.reserveInitialCapacity(token.attributes().size()); for (Vector<AttributeBase>::const_iterator it = token.attributes().begin(); it != token.attributes().end(); ++it) m_attributes.append(CompactAttribute(String(it->m_name.data(), it->m_name.size()), String(it->m_value.data(), it->m_value.size()))); // Fall through! case HTMLTokenTypes::EndTag: m_selfClosing = token.selfClosing(); // Fall through! case HTMLTokenTypes::Comment: case HTMLTokenTypes::Character: if (token.isAll8BitData()) m_data = String::make8BitFrom16BitSource(token.data().data(), token.data().size()); else m_data = String(token.data().data(), token.data().size()); break; default: ASSERT_NOT_REACHED(); break; } }