void MediaQueryParser::processToken(const MediaQueryToken& token) { MediaQueryTokenType type = token.type(); handleBlocks(token); m_blockWatcher.handleToken(token); // Call the function that handles current state if (type != WhitespaceToken && type != CommentToken) ((this)->*(m_state))(type, token); }
void MediaQueryTokenizer::tokenize(String string, Vector<MediaQueryToken>& outTokens) { // According to the spec, we should perform preprocessing here. // See: http://dev.w3.org/csswg/css-syntax/#input-preprocessing // // However, we can skip this step since: // * We're using HTML spaces (which accept \r and \f as a valid white space) // * Do not count white spaces // * consumeEscape replaces NULLs for replacement characters if (string.isEmpty()) return; MediaQueryInputStream input(string); MediaQueryTokenizer tokenizer(input); while (true) { MediaQueryToken token = tokenizer.nextToken(); outTokens.append(token); if (token.type() == EOFToken) return; } }
void MediaQueryParser::handleBlocks(const MediaQueryToken& token) { if (token.blockType() == MediaQueryToken::BlockStart && (token.type() != LeftParenthesisToken || m_blockWatcher.blockLevel())) m_state = SkipUntilBlockEnd; }