Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(89)

Side by Side Diff: Source/core/css/parser/MediaQueryParser.h

Issue 217423005: Get Media Query parser to handle parens, brackets and braces blocks correctly (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed algorithm and more tests Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #ifndef MediaQueryParser_h 5 #ifndef MediaQueryParser_h
6 #define MediaQueryParser_h 6 #define MediaQueryParser_h
7 7
8 #include "core/css/CSSParserValues.h" 8 #include "core/css/CSSParserValues.h"
9 #include "core/css/MediaList.h" 9 #include "core/css/MediaList.h"
10 #include "core/css/MediaQuery.h" 10 #include "core/css/MediaQuery.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 static PassRefPtrWillBeRawPtr<MediaQuerySet> parse(const String&); 51 static PassRefPtrWillBeRawPtr<MediaQuerySet> parse(const String&);
52 52
53 private: 53 private:
54 MediaQueryParser(const String&); 54 MediaQueryParser(const String&);
55 virtual ~MediaQueryParser() { }; 55 virtual ~MediaQueryParser() { };
56 56
57 PassRefPtrWillBeRawPtr<MediaQuerySet> parseImpl(); 57 PassRefPtrWillBeRawPtr<MediaQuerySet> parseImpl();
58 58
59 typedef Vector<MediaQueryToken>::iterator TokenIterator; 59 typedef Vector<MediaQueryToken>::iterator TokenIterator;
60 60
61 enum BlockType {
62 ParenthesisBlock,
63 BracketsBlock,
64 BracesBlock
65 };
66
61 void processToken(TokenIterator&); 67 void processToken(TokenIterator&);
62 68
63 void readRestrictor(MediaQueryTokenType, TokenIterator&); 69 void readRestrictor(MediaQueryTokenType, TokenIterator&);
64 void readMediaType(MediaQueryTokenType, TokenIterator&); 70 void readMediaType(MediaQueryTokenType, TokenIterator&);
65 void readAnd(MediaQueryTokenType, TokenIterator&); 71 void readAnd(MediaQueryTokenType, TokenIterator&);
66 void readFeatureStart(MediaQueryTokenType, TokenIterator&); 72 void readFeatureStart(MediaQueryTokenType, TokenIterator&);
67 void readFeature(MediaQueryTokenType, TokenIterator&); 73 void readFeature(MediaQueryTokenType, TokenIterator&);
68 void readFeatureColon(MediaQueryTokenType, TokenIterator&); 74 void readFeatureColon(MediaQueryTokenType, TokenIterator&);
69 void readFeatureValue(MediaQueryTokenType, TokenIterator&); 75 void readFeatureValue(MediaQueryTokenType, TokenIterator&);
70 void readFeatureEnd(MediaQueryTokenType, TokenIterator&); 76 void readFeatureEnd(MediaQueryTokenType, TokenIterator&);
71 void skipUntilComma(MediaQueryTokenType, TokenIterator&); 77 void skipUntilComma(MediaQueryTokenType, TokenIterator&);
72 void skipUntilParenthesis(MediaQueryTokenType, TokenIterator&); 78 void skipUntilBlockEnd(MediaQueryTokenType, TokenIterator&);
73 void done(MediaQueryTokenType, TokenIterator&); 79 void done(MediaQueryTokenType, TokenIterator&);
74 80
75 typedef void (MediaQueryParser::*State)(MediaQueryTokenType, TokenIterator&) ; 81 typedef void (MediaQueryParser::*State)(MediaQueryTokenType, TokenIterator&) ;
76 82
77 void setStateAndRestrict(State, MediaQuery::Restrictor); 83 void setStateAndRestrict(State, MediaQuery::Restrictor);
84 void observeBlocks(MediaQueryTokenType);
78 85
79 State m_state; 86 State m_state;
80 Vector<MediaQueryToken> m_tokens; 87 Vector<MediaQueryToken> m_tokens;
81 MediaQueryData m_mediaQueryData; 88 MediaQueryData m_mediaQueryData;
82 RefPtrWillBeMember<MediaQuerySet> m_querySet; 89 RefPtrWillBeMember<MediaQuerySet> m_querySet;
90 Vector<BlockType> m_blockStack;
83 91
84 const static State ReadRestrictor; 92 const static State ReadRestrictor;
85 const static State ReadMediaType; 93 const static State ReadMediaType;
86 const static State ReadAnd; 94 const static State ReadAnd;
87 const static State ReadFeatureStart; 95 const static State ReadFeatureStart;
88 const static State ReadFeature; 96 const static State ReadFeature;
89 const static State ReadFeatureColon; 97 const static State ReadFeatureColon;
90 const static State ReadFeatureValue; 98 const static State ReadFeatureValue;
91 const static State ReadFeatureEnd; 99 const static State ReadFeatureEnd;
92 const static State SkipUntilComma; 100 const static State SkipUntilComma;
93 const static State SkipUntilParenthesis; 101 const static State SkipUntilBlockEnd;
94 const static State Done; 102 const static State Done;
95 103
96 }; 104 };
97 105
98 } // namespace WebCore 106 } // namespace WebCore
99 107
100 #endif // MediaQueryParser_h 108 #endif // MediaQueryParser_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698