#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "third_party/blink/renderer/core/css/parser/css_tokenizer.h"
#include "third_party/blink/renderer/core/css/parser/css_parser_idioms.h"
#include "third_party/blink/renderer/core/css/parser/css_parser_token_range.h"
#include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h"
#include "third_party/blink/renderer/platform/wtf/text/character_names.h"
#ifdef __SSE2__
#include <immintrin.h>
#elif defined(__ARM_NEON__)
#include <arm_neon.h>
#endif
namespace blink {
namespace {
constexpr wtf_size_t kEstimatedCharactersPerToken = …;
}
CSSTokenizer::CSSTokenizer(const String& string, wtf_size_t offset)
: … { … }
CSSTokenizer::CSSTokenizer(StringView string, wtf_size_t offset)
: … { … }
Vector<CSSParserToken, 32> CSSTokenizer::TokenizeToEOF() { … }
std::pair<Vector<CSSParserToken, 32>, Vector<wtf_size_t, 32>>
CSSTokenizer::TokenizeToEOFWithOffsets() {
wtf_size_t estimated_tokens =
(input_.length() - Offset()) / kEstimatedCharactersPerToken;
Vector<CSSParserToken, 32> tokens;
tokens.ReserveInitialCapacity(estimated_tokens);
Vector<wtf_size_t, 32> offsets;
offsets.ReserveInitialCapacity(estimated_tokens + 1);
while (true) {
offsets.push_back(input_.Offset());
const CSSParserToken token =
NextToken<true, false>();
if (token.GetType() == kEOFToken) {
return {tokens, offsets};
} else {
tokens.push_back(token);
}
}
}
StringView CSSTokenizer::StringRangeFrom(wtf_size_t start) const { … }
StringView CSSTokenizer::StringRangeAt(wtf_size_t start,
wtf_size_t length) const { … }
CSSParserToken CSSTokenizer::TokenizeSingle() { … }
CSSParserToken CSSTokenizer::TokenizeSingleWithComments() { … }
wtf_size_t CSSTokenizer::TokenCount() { … }
void CSSTokenizer::Reconsume(UChar c) { … }
UChar CSSTokenizer::Consume() { … }
CSSParserToken CSSTokenizer::BlockStart(CSSParserTokenType type) { … }
CSSParserToken CSSTokenizer::BlockStart(CSSParserTokenType block_type,
CSSParserTokenType type,
StringView name) { … }
CSSParserToken CSSTokenizer::BlockEnd(CSSParserTokenType type,
CSSParserTokenType start_type) { … }
CSSParserToken CSSTokenizer::HyphenMinus(UChar cc) { … }
CSSParserToken CSSTokenizer::Hash(UChar cc) { … }
CSSParserToken CSSTokenizer::LetterU(UChar cc) { … }
template <bool SkipComments, bool StoreOffset>
CSSParserToken CSSTokenizer::NextToken() { … }
CSSParserToken CSSTokenizer::ConsumeNumber() { … }
CSSParserToken CSSTokenizer::ConsumeNumericToken() { … }
CSSParserToken CSSTokenizer::ConsumeIdentLikeToken() { … }
CSSParserToken CSSTokenizer::ConsumeStringTokenUntil(UChar ending_code_point) { … }
CSSParserToken CSSTokenizer::ConsumeUnicodeRange() { … }
static bool IsNonPrintableCodePoint(UChar cc) { … }
CSSParserToken CSSTokenizer::ConsumeUrlToken() { … }
void CSSTokenizer::ConsumeBadUrlRemnants() { … }
void CSSTokenizer::ConsumeSingleWhitespaceIfNext() { … }
void CSSTokenizer::ConsumeUntilCommentEndFound() { … }
bool CSSTokenizer::ConsumeIfNext(UChar character) { … }
StringView CSSTokenizer::ConsumeName() { … }
UChar32 CSSTokenizer::ConsumeEscape() { … }
bool CSSTokenizer::NextTwoCharsAreValidEscape() { … }
bool CSSTokenizer::NextCharsAreNumber(UChar first) { … }
bool CSSTokenizer::NextCharsAreNumber() { … }
bool CSSTokenizer::NextCharsAreIdentifier(UChar first) { … }
bool CSSTokenizer::NextCharsAreIdentifier() { … }
StringView CSSTokenizer::RegisterString(const String& string) { … }
}