OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/css/parser/MediaQueryParser.h" | 5 #include "core/css/parser/MediaQueryParser.h" |
6 | 6 |
7 #include "core/MediaTypeNames.h" | 7 #include "core/MediaTypeNames.h" |
8 #include "core/css/parser/CSSPropertyParser.h" | 8 #include "core/css/parser/CSSPropertyParser.h" |
9 #include "core/css/parser/CSSTokenizer.h" | 9 #include "core/css/parser/CSSTokenizer.h" |
10 #include "wtf/Vector.h" | 10 #include "wtf/Vector.h" |
11 | 11 |
12 namespace blink { | 12 namespace blink { |
13 | 13 |
14 RawPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(const String& querySt
ring) | 14 MediaQuerySet* MediaQueryParser::parseMediaQuerySet(const String& queryString) |
15 { | 15 { |
16 return parseMediaQuerySet(CSSTokenizer::Scope(queryString).tokenRange()); | 16 return parseMediaQuerySet(CSSTokenizer::Scope(queryString).tokenRange()); |
17 } | 17 } |
18 | 18 |
19 RawPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(CSSParserTokenRange r
ange) | 19 MediaQuerySet* MediaQueryParser::parseMediaQuerySet(CSSParserTokenRange range) |
20 { | 20 { |
21 return MediaQueryParser(MediaQuerySetParser).parseImpl(range); | 21 return MediaQueryParser(MediaQuerySetParser).parseImpl(range); |
22 } | 22 } |
23 | 23 |
24 RawPtr<MediaQuerySet> MediaQueryParser::parseMediaCondition(CSSParserTokenRange
range) | 24 MediaQuerySet* MediaQueryParser::parseMediaCondition(CSSParserTokenRange range) |
25 { | 25 { |
26 return MediaQueryParser(MediaConditionParser).parseImpl(range); | 26 return MediaQueryParser(MediaConditionParser).parseImpl(range); |
27 } | 27 } |
28 | 28 |
29 const MediaQueryParser::State MediaQueryParser::ReadRestrictor = &MediaQueryPars
er::readRestrictor; | 29 const MediaQueryParser::State MediaQueryParser::ReadRestrictor = &MediaQueryPars
er::readRestrictor; |
30 const MediaQueryParser::State MediaQueryParser::ReadMediaNot = &MediaQueryParser
::readMediaNot; | 30 const MediaQueryParser::State MediaQueryParser::ReadMediaNot = &MediaQueryParser
::readMediaNot; |
31 const MediaQueryParser::State MediaQueryParser::ReadMediaType = &MediaQueryParse
r::readMediaType; | 31 const MediaQueryParser::State MediaQueryParser::ReadMediaType = &MediaQueryParse
r::readMediaType; |
32 const MediaQueryParser::State MediaQueryParser::ReadAnd = &MediaQueryParser::rea
dAnd; | 32 const MediaQueryParser::State MediaQueryParser::ReadAnd = &MediaQueryParser::rea
dAnd; |
33 const MediaQueryParser::State MediaQueryParser::ReadFeatureStart = &MediaQueryPa
rser::readFeatureStart; | 33 const MediaQueryParser::State MediaQueryParser::ReadFeatureStart = &MediaQueryPa
rser::readFeatureStart; |
34 const MediaQueryParser::State MediaQueryParser::ReadFeature = &MediaQueryParser:
:readFeature; | 34 const MediaQueryParser::State MediaQueryParser::ReadFeature = &MediaQueryParser:
:readFeature; |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 | 207 |
208 handleBlocks(token); | 208 handleBlocks(token); |
209 m_blockWatcher.handleToken(token); | 209 m_blockWatcher.handleToken(token); |
210 | 210 |
211 // Call the function that handles current state | 211 // Call the function that handles current state |
212 if (type != WhitespaceToken) | 212 if (type != WhitespaceToken) |
213 ((this)->*(m_state))(type, token); | 213 ((this)->*(m_state))(type, token); |
214 } | 214 } |
215 | 215 |
216 // The state machine loop | 216 // The state machine loop |
217 RawPtr<MediaQuerySet> MediaQueryParser::parseImpl(CSSParserTokenRange range) | 217 MediaQuerySet* MediaQueryParser::parseImpl(CSSParserTokenRange range) |
218 { | 218 { |
219 while (!range.atEnd()) | 219 while (!range.atEnd()) |
220 processToken(range.consume()); | 220 processToken(range.consume()); |
221 | 221 |
222 // FIXME: Can we get rid of this special case? | 222 // FIXME: Can we get rid of this special case? |
223 if (m_parserType == MediaQuerySetParser) | 223 if (m_parserType == MediaQuerySetParser) |
224 processToken(CSSParserToken(EOFToken)); | 224 processToken(CSSParserToken(EOFToken)); |
225 | 225 |
226 if (m_state != ReadAnd && m_state != ReadRestrictor && m_state != Done && m_
state != ReadMediaNot) | 226 if (m_state != ReadAnd && m_state != ReadRestrictor && m_state != Done && m_
state != ReadMediaNot) |
227 m_querySet->addMediaQuery(MediaQuery::createNotAll()); | 227 m_querySet->addMediaQuery(MediaQuery::createNotAll()); |
(...skipping 13 matching lines...) Expand all Loading... |
241 void MediaQueryData::clear() | 241 void MediaQueryData::clear() |
242 { | 242 { |
243 m_restrictor = MediaQuery::None; | 243 m_restrictor = MediaQuery::None; |
244 m_mediaType = MediaTypeNames::all; | 244 m_mediaType = MediaTypeNames::all; |
245 m_mediaTypeSet = false; | 245 m_mediaTypeSet = false; |
246 m_mediaFeature = String(); | 246 m_mediaFeature = String(); |
247 m_valueList.clear(); | 247 m_valueList.clear(); |
248 m_expressions.clear(); | 248 m_expressions.clear(); |
249 } | 249 } |
250 | 250 |
251 RawPtr<MediaQuery> MediaQueryData::takeMediaQuery() | 251 MediaQuery* MediaQueryData::takeMediaQuery() |
252 { | 252 { |
253 RawPtr<MediaQuery> mediaQuery = MediaQuery::create(m_restrictor, std::move(m
_mediaType), std::move(m_expressions)); | 253 MediaQuery* mediaQuery = MediaQuery::create(m_restrictor, std::move(m_mediaT
ype), std::move(m_expressions)); |
254 clear(); | 254 clear(); |
255 return mediaQuery.release(); | 255 return mediaQuery; |
256 } | 256 } |
257 | 257 |
258 bool MediaQueryData::addExpression() | 258 bool MediaQueryData::addExpression() |
259 { | 259 { |
260 RawPtr<MediaQueryExp> expression = MediaQueryExp::createIfValid(m_mediaFeatu
re, m_valueList); | 260 MediaQueryExp* expression = MediaQueryExp::createIfValid(m_mediaFeature, m_v
alueList); |
261 bool isValid = !!expression; | 261 bool isValid = !!expression; |
262 m_expressions.append(expression.release()); | 262 m_expressions.append(expression); |
263 m_valueList.clear(); | 263 m_valueList.clear(); |
264 return isValid; | 264 return isValid; |
265 } | 265 } |
266 | 266 |
267 bool MediaQueryData::tryAddParserToken(CSSParserTokenType type, const CSSParserT
oken& token) | 267 bool MediaQueryData::tryAddParserToken(CSSParserTokenType type, const CSSParserT
oken& token) |
268 { | 268 { |
269 if (type == NumberToken || type == PercentageToken || type == DimensionToken | 269 if (type == NumberToken || type == PercentageToken || type == DimensionToken |
270 || type == DelimiterToken || type == IdentToken) { | 270 || type == DelimiterToken || type == IdentToken) { |
271 m_valueList.append(token); | 271 m_valueList.append(token); |
272 return true; | 272 return true; |
273 } | 273 } |
274 | 274 |
275 return false; | 275 return false; |
276 } | 276 } |
277 | 277 |
278 void MediaQueryData::setMediaType(const String& mediaType) | 278 void MediaQueryData::setMediaType(const String& mediaType) |
279 { | 279 { |
280 m_mediaType = mediaType; | 280 m_mediaType = mediaType; |
281 m_mediaTypeSet = true; | 281 m_mediaTypeSet = true; |
282 } | 282 } |
283 | 283 |
284 } // namespace blink | 284 } // namespace blink |
OLD | NEW |