| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CSSParserObserverWrapper_h |
| #define CSSParserObserverWrapper_h |
| |
| #include "core/css/parser/CSSParserObserver.h" |
| #include "wtf/Allocator.h" |
| |
| namespace blink { |
| |
| class CSSParserObserverWrapper { |
| STACK_ALLOCATED(); |
| public: |
| explicit CSSParserObserverWrapper(CSSParserObserver& observer) |
| : m_observer(observer) |
| { } |
| |
| unsigned startOffset(const CSSParserTokenRange&); |
| unsigned previousTokenStartOffset(const CSSParserTokenRange&); |
| unsigned endOffset(const CSSParserTokenRange&); // Includes trailing comments |
| |
| void skipCommentsBefore(const CSSParserTokenRange&, bool leaveDirectlyBefore); |
| void yieldCommentsBefore(const CSSParserTokenRange&); |
| |
| CSSParserObserver& observer() { return m_observer; } |
| void addComment(unsigned startOffset, unsigned endOffset, unsigned tokensBefore) |
| { |
| CommentPosition position = {startOffset, endOffset, tokensBefore}; |
| m_commentOffsets.append(position); |
| } |
| void addToken(unsigned startOffset) { m_tokenOffsets.append(startOffset); } |
| void finalizeConstruction(CSSParserToken* firstParserToken) |
| { |
| m_firstParserToken = firstParserToken; |
| m_commentIterator = m_commentOffsets.begin(); |
| } |
| |
| private: |
| CSSParserObserver& m_observer; |
| Vector<unsigned> m_tokenOffsets; |
| CSSParserToken* m_firstParserToken; |
| |
| struct CommentPosition { |
| DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); |
| unsigned startOffset; |
| unsigned endOffset; |
| unsigned tokensBefore; |
| }; |
| |
| Vector<CommentPosition> m_commentOffsets; |
| Vector<CommentPosition>::iterator m_commentIterator; |
| }; |
| |
| } // namespace blink |
| |
| #endif // CSSParserObserverWrapper_h |