blob: 320f8235845cdd78efb959011e17cd5311cec88e [file] [log] [blame]
// 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