| Index: Source/core/css/parser/MediaQueryParser.cpp
|
| diff --git a/Source/core/css/parser/MediaQueryParser.cpp b/Source/core/css/parser/MediaQueryParser.cpp
|
| index 108a299ddb25fc80a79e74bf29be43080513b1b3..b90d155476965972ba2443654c25df52816d2482 100644
|
| --- a/Source/core/css/parser/MediaQueryParser.cpp
|
| +++ b/Source/core/css/parser/MediaQueryParser.cpp
|
| @@ -11,9 +11,18 @@
|
|
|
| namespace WebCore {
|
|
|
| -PassRefPtrWillBeRawPtr<MediaQuerySet> MediaQueryParser::parse(const String& queryString)
|
| +PassRefPtrWillBeRawPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(const String& queryString)
|
| {
|
| - return MediaQueryParser(queryString).parseImpl();
|
| + // FIXME: Replace the MediaQueryTokenizer with a generic CSSTokenizer, once there is one,
|
| + // or better yet, replace the MediaQueryParser with a generic thread-safe CSS parser.
|
| + Vector<MediaQueryToken> tokens;
|
| + MediaQueryTokenizer::tokenize(queryString, tokens);
|
| + return MediaQueryParser(MediaQuerySetParser).parseImpl(tokens.begin(), tokens.end());
|
| +}
|
| +
|
| +PassRefPtrWillBeRawPtr<MediaQuerySet> MediaQueryParser::parseMediaCondition(TokenIterator token, TokenIterator endToken)
|
| +{
|
| + return MediaQueryParser(MediaConditionParser).parseImpl(token, endToken);
|
| }
|
|
|
| const MediaQueryParser::State MediaQueryParser::ReadRestrictor = &MediaQueryParser::readRestrictor;
|
| @@ -28,15 +37,17 @@ const MediaQueryParser::State MediaQueryParser::SkipUntilComma = &MediaQueryPars
|
| const MediaQueryParser::State MediaQueryParser::SkipUntilBlockEnd = &MediaQueryParser::skipUntilBlockEnd;
|
| const MediaQueryParser::State MediaQueryParser::Done = &MediaQueryParser::done;
|
|
|
| -// FIXME: Replace the MediaQueryTokenizer with a generic CSSTokenizer, once there is one,
|
| -// or better yet, replace the MediaQueryParser with a generic thread-safe CSS parser.
|
| -MediaQueryParser::MediaQueryParser(const String& queryString)
|
| - : m_state(&MediaQueryParser::readRestrictor)
|
| - , m_querySet(MediaQuerySet::create())
|
| +MediaQueryParser::MediaQueryParser(ParserType parserType)
|
| + : m_querySet(MediaQuerySet::create())
|
| {
|
| - MediaQueryTokenizer::tokenize(queryString, m_tokens);
|
| + if (parserType == MediaQuerySetParser)
|
| + m_state = &MediaQueryParser::readRestrictor;
|
| + else // MediaConditionParser
|
| + m_state = &MediaQueryParser::readFeatureStart;
|
| }
|
|
|
| +MediaQueryParser::~MediaQueryParser() { };
|
| +
|
| void MediaQueryParser::setStateAndRestrict(State state, MediaQuery::Restrictor restrictor)
|
| {
|
| m_mediaQueryData.setRestrictor(restrictor);
|
| @@ -205,9 +216,9 @@ void MediaQueryParser::processToken(TokenIterator& token)
|
| }
|
|
|
| // The state machine loop
|
| -PassRefPtrWillBeRawPtr<MediaQuerySet> MediaQueryParser::parseImpl()
|
| +PassRefPtrWillBeRawPtr<MediaQuerySet> MediaQueryParser::parseImpl(TokenIterator token, TokenIterator endToken)
|
| {
|
| - for (Vector<MediaQueryToken>::iterator token = m_tokens.begin(); token != m_tokens.end(); ++token)
|
| + for (; token != endToken; ++token)
|
| processToken(token);
|
|
|
| if (m_state != ReadAnd && m_state != ReadRestrictor && m_state != Done)
|
|
|