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 "config.h" | 5 #include "config.h" |
6 #include "core/css/parser/MediaQueryParser.h" | 6 #include "core/css/parser/MediaQueryParser.h" |
7 | 7 |
8 #include "MediaTypeNames.h" | 8 #include "MediaTypeNames.h" |
9 #include "core/css/parser/CSSPropertyParser.h" | 9 #include "core/css/parser/CSSPropertyParser.h" |
10 #include "core/css/parser/MediaQueryTokenizer.h" | 10 #include "core/css/parser/MediaQueryTokenizer.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 } else if (type == DelimiterToken && token->delimiter() == '/') { | 135 } else if (type == DelimiterToken && token->delimiter() == '/') { |
136 m_mediaQueryData.addParserValue(type, *token); | 136 m_mediaQueryData.addParserValue(type, *token); |
137 m_state = ReadFeatureValue; | 137 m_state = ReadFeatureValue; |
138 } else { | 138 } else { |
139 m_state = SkipUntilBlockEnd; | 139 m_state = SkipUntilBlockEnd; |
140 } | 140 } |
141 } | 141 } |
142 | 142 |
143 void MediaQueryParser::skipUntilComma(MediaQueryTokenType type, TokenIterator& t
oken) | 143 void MediaQueryParser::skipUntilComma(MediaQueryTokenType type, TokenIterator& t
oken) |
144 { | 144 { |
145 if (type == CommaToken || type == EOFToken) { | 145 if ((type == CommaToken && m_blockStack.isEmpty()) || type == EOFToken) { |
146 m_state = ReadRestrictor; | 146 m_state = ReadRestrictor; |
147 m_mediaQueryData.clear(); | 147 m_mediaQueryData.clear(); |
148 m_querySet->addMediaQuery(MediaQuery::createNotAll()); | 148 m_querySet->addMediaQuery(MediaQuery::createNotAll()); |
149 } | 149 } |
150 } | 150 } |
151 | 151 |
152 void MediaQueryParser::skipUntilBlockEnd(MediaQueryTokenType type, TokenIterator
& token) | 152 void MediaQueryParser::skipUntilBlockEnd(MediaQueryTokenType type, TokenIterator
& token) |
153 { | 153 { |
154 if (m_blockStack.isEmpty()) | 154 if (m_blockStack.isEmpty()) |
155 m_state = SkipUntilComma; | 155 m_state = SkipUntilComma; |
(...skipping 16 matching lines...) Expand all Loading... |
172 } else if (type == parameters.rightToken) { | 172 } else if (type == parameters.rightToken) { |
173 popIfBlockMatches(m_blockStack, parameters.blockType); | 173 popIfBlockMatches(m_blockStack, parameters.blockType); |
174 } else { | 174 } else { |
175 return false; | 175 return false; |
176 } | 176 } |
177 return true; | 177 return true; |
178 } | 178 } |
179 | 179 |
180 void MediaQueryParser::observeBlocks(MediaQueryTokenType type) | 180 void MediaQueryParser::observeBlocks(MediaQueryTokenType type) |
181 { | 181 { |
182 const unsigned blockParametersNumber = 3; | 182 enum { BlockParametersCount = 4 }; |
183 BlockParameters blockParameterSet[blockParametersNumber] = { | 183 BlockParameters blockParameterSet[BlockParametersCount] = { |
184 { LeftParenthesisToken, RightParenthesisToken, ParenthesisBlock, DoNotMo
difyState }, | 184 { LeftParenthesisToken, RightParenthesisToken, ParenthesisBlock, DoNotMo
difyState }, |
| 185 { FunctionToken, RightParenthesisToken, ParenthesisBlock, ModifyState }, |
185 { LeftBracketToken, RightBracketToken, BracketsBlock, ModifyState }, | 186 { LeftBracketToken, RightBracketToken, BracketsBlock, ModifyState }, |
186 { LeftBraceToken, RightBraceToken, BracesBlock, ModifyState } | 187 { LeftBraceToken, RightBraceToken, BracesBlock, ModifyState } |
187 }; | 188 }; |
188 | 189 |
189 for (unsigned i = 0; i < blockParametersNumber; ++i) { | 190 for (unsigned i = 0; i < BlockParametersCount; ++i) { |
190 if (observeBlock(blockParameterSet[i], type)) | 191 if (observeBlock(blockParameterSet[i], type)) |
191 break; | 192 break; |
192 } | 193 } |
193 } | 194 } |
194 | 195 |
195 void MediaQueryParser::processToken(TokenIterator& token) | 196 void MediaQueryParser::processToken(TokenIterator& token) |
196 { | 197 { |
197 MediaQueryTokenType type = token->type(); | 198 MediaQueryTokenType type = token->type(); |
198 | 199 |
199 observeBlocks(type); | 200 observeBlocks(type); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 m_valueList.addValue(value); | 272 m_valueList.addValue(value); |
272 } | 273 } |
273 | 274 |
274 void MediaQueryData::setMediaType(const String& mediaType) | 275 void MediaQueryData::setMediaType(const String& mediaType) |
275 { | 276 { |
276 m_mediaType = mediaType; | 277 m_mediaType = mediaType; |
277 m_mediaTypeSet = true; | 278 m_mediaTypeSet = true; |
278 } | 279 } |
279 | 280 |
280 } // namespace WebCore | 281 } // namespace WebCore |
OLD | NEW |