| 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/MediaQueryTokenizer.h" | 6 #include "core/css/parser/MediaQueryTokenizer.h" |
| 7 | 7 |
| 8 namespace WebCore { | 8 namespace WebCore { |
| 9 #include "MediaQueryTokenizerCodepoints.cpp" | 9 #include "MediaQueryTokenizerCodepoints.cpp" |
| 10 } | 10 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 } | 60 } |
| 61 | 61 |
| 62 MediaQueryToken MediaQueryTokenizer::whiteSpace(UChar cc) | 62 MediaQueryToken MediaQueryTokenizer::whiteSpace(UChar cc) |
| 63 { | 63 { |
| 64 // CSS Tokenization is currently lossy, but we could record | 64 // CSS Tokenization is currently lossy, but we could record |
| 65 // the exact whitespace instead of discarding it here. | 65 // the exact whitespace instead of discarding it here. |
| 66 consumeUntilNonWhitespace(); | 66 consumeUntilNonWhitespace(); |
| 67 return MediaQueryToken(WhitespaceToken); | 67 return MediaQueryToken(WhitespaceToken); |
| 68 } | 68 } |
| 69 | 69 |
| 70 static bool popIfBlockMatches(Vector<MediaQueryTokenType>& blockStack, MediaQuer
yTokenType type) |
| 71 { |
| 72 if (!blockStack.isEmpty() && blockStack.last() == type) { |
| 73 blockStack.removeLast(); |
| 74 return true; |
| 75 } |
| 76 return false; |
| 77 } |
| 78 |
| 79 MediaQueryToken MediaQueryTokenizer::blockStart(MediaQueryTokenType type) |
| 80 { |
| 81 m_blockStack.append(type); |
| 82 return MediaQueryToken(type, MediaQueryToken::BlockStart); |
| 83 } |
| 84 |
| 85 MediaQueryToken MediaQueryTokenizer::blockStart(MediaQueryTokenType blockType, M
ediaQueryTokenType type, String name) |
| 86 { |
| 87 m_blockStack.append(blockType); |
| 88 return MediaQueryToken(type, name, MediaQueryToken::BlockStart); |
| 89 } |
| 90 |
| 91 MediaQueryToken MediaQueryTokenizer::blockEnd(MediaQueryTokenType type, MediaQue
ryTokenType startType) |
| 92 { |
| 93 if (popIfBlockMatches(m_blockStack, startType)) |
| 94 return MediaQueryToken(type, MediaQueryToken::BlockEnd); |
| 95 return MediaQueryToken(type); |
| 96 } |
| 97 |
| 70 MediaQueryToken MediaQueryTokenizer::leftParenthesis(UChar cc) | 98 MediaQueryToken MediaQueryTokenizer::leftParenthesis(UChar cc) |
| 71 { | 99 { |
| 72 return MediaQueryToken(LeftParenthesisToken); | 100 return blockStart(LeftParenthesisToken); |
| 73 } | 101 } |
| 74 | 102 |
| 75 MediaQueryToken MediaQueryTokenizer::rightParenthesis(UChar cc) | 103 MediaQueryToken MediaQueryTokenizer::rightParenthesis(UChar cc) |
| 76 { | 104 { |
| 77 return MediaQueryToken(RightParenthesisToken); | 105 return blockEnd(RightParenthesisToken, LeftParenthesisToken); |
| 78 } | 106 } |
| 79 | 107 |
| 80 MediaQueryToken MediaQueryTokenizer::leftBracket(UChar cc) | 108 MediaQueryToken MediaQueryTokenizer::leftBracket(UChar cc) |
| 81 { | 109 { |
| 82 return MediaQueryToken(LeftBracketToken); | 110 return blockStart(LeftBracketToken); |
| 83 } | 111 } |
| 84 | 112 |
| 85 MediaQueryToken MediaQueryTokenizer::rightBracket(UChar cc) | 113 MediaQueryToken MediaQueryTokenizer::rightBracket(UChar cc) |
| 86 { | 114 { |
| 87 return MediaQueryToken(RightBracketToken); | 115 return blockEnd(RightBracketToken, LeftBracketToken); |
| 88 } | 116 } |
| 89 | 117 |
| 90 MediaQueryToken MediaQueryTokenizer::leftBrace(UChar cc) | 118 MediaQueryToken MediaQueryTokenizer::leftBrace(UChar cc) |
| 91 { | 119 { |
| 92 return MediaQueryToken(LeftBraceToken); | 120 return blockStart(LeftBraceToken); |
| 93 } | 121 } |
| 94 | 122 |
| 95 MediaQueryToken MediaQueryTokenizer::rightBrace(UChar cc) | 123 MediaQueryToken MediaQueryTokenizer::rightBrace(UChar cc) |
| 96 { | 124 { |
| 97 return MediaQueryToken(RightBraceToken); | 125 return blockEnd(RightBraceToken, LeftBraceToken); |
| 98 } | 126 } |
| 99 | 127 |
| 100 MediaQueryToken MediaQueryTokenizer::plusOrFullStop(UChar cc) | 128 MediaQueryToken MediaQueryTokenizer::plusOrFullStop(UChar cc) |
| 101 { | 129 { |
| 102 if (nextCharsAreNumber()) { | 130 if (nextCharsAreNumber()) { |
| 103 reconsume(cc); | 131 reconsume(cc); |
| 104 return consumeNumericToken(); | 132 return consumeNumericToken(); |
| 105 } | 133 } |
| 106 return MediaQueryToken(DelimiterToken, cc); | 134 return MediaQueryToken(DelimiterToken, cc); |
| 107 } | 135 } |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 token.convertToDimensionWithUnit(consumeName()); | 336 token.convertToDimensionWithUnit(consumeName()); |
| 309 else if (consumeIfNext('%')) | 337 else if (consumeIfNext('%')) |
| 310 token.convertToPercentage(); | 338 token.convertToPercentage(); |
| 311 return token; | 339 return token; |
| 312 } | 340 } |
| 313 | 341 |
| 314 // http://www.w3.org/TR/css3-syntax/#consume-an-ident-like-token | 342 // http://www.w3.org/TR/css3-syntax/#consume-an-ident-like-token |
| 315 MediaQueryToken MediaQueryTokenizer::consumeIdentLikeToken() | 343 MediaQueryToken MediaQueryTokenizer::consumeIdentLikeToken() |
| 316 { | 344 { |
| 317 String name = consumeName(); | 345 String name = consumeName(); |
| 318 if (consumeIfNext('(')) | 346 if (consumeIfNext('(')) { |
| 319 return MediaQueryToken(FunctionToken, name); | 347 return blockStart(LeftParenthesisToken, FunctionToken, name); |
| 348 } |
| 320 return MediaQueryToken(IdentToken, name); | 349 return MediaQueryToken(IdentToken, name); |
| 321 } | 350 } |
| 322 | 351 |
| 323 static bool isNewLine(UChar cc) | 352 static bool isNewLine(UChar cc) |
| 324 { | 353 { |
| 325 // We check \r and \f here, since we have no preprocessing stage | 354 // We check \r and \f here, since we have no preprocessing stage |
| 326 return (cc == '\r' || cc == '\n' || cc == '\f'); | 355 return (cc == '\r' || cc == '\n' || cc == '\f'); |
| 327 } | 356 } |
| 328 | 357 |
| 329 // http://dev.w3.org/csswg/css-syntax/#consume-a-string-token | 358 // http://dev.w3.org/csswg/css-syntax/#consume-a-string-token |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 467 if (firstChar == '-') { | 496 if (firstChar == '-') { |
| 468 if (isNameStart(m_input.peek(1))) | 497 if (isNameStart(m_input.peek(1))) |
| 469 return true; | 498 return true; |
| 470 return nextTwoCharsAreValidEscape(1); | 499 return nextTwoCharsAreValidEscape(1); |
| 471 } | 500 } |
| 472 | 501 |
| 473 return false; | 502 return false; |
| 474 } | 503 } |
| 475 | 504 |
| 476 } // namespace WebCore | 505 } // namespace WebCore |
| OLD | NEW |