1// Copyright 2015 The Chromium Authors. All rights reserved.
2// Copyright (C) 2016 Apple Inc. All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met:
7//
8// * Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// * Redistributions in binary form must reproduce the above
11// copyright notice, this list of conditions and the following disclaimer
12// in the documentation and/or other materials provided with the
13// distribution.
14// * Neither the name of Google Inc. nor the names of its
15// contributors may be used to endorse or promote products derived from
16// this software without specific prior written permission.
17//
18// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30#include "config.h"
31#include "CSSParserObserverWrapper.h"
32
33#include "CSSParserTokenRange.h"
34
35namespace WebCore {
36
37unsigned CSSParserObserverWrapper::startOffset(const CSSParserTokenRange& range)
38{
39 return m_tokenOffsets[range.begin() - m_firstParserToken];
40}
41
42unsigned CSSParserObserverWrapper::previousTokenStartOffset(const CSSParserTokenRange& range)
43{
44 if (range.begin() == m_firstParserToken)
45 return 0;
46 return m_tokenOffsets[range.begin() - m_firstParserToken - 1];
47}
48
49unsigned CSSParserObserverWrapper::endOffset(const CSSParserTokenRange& range)
50{
51 return m_tokenOffsets[range.end() - m_firstParserToken];
52}
53
54void CSSParserObserverWrapper::skipCommentsBefore(const CSSParserTokenRange& range, bool leaveDirectlyBefore)
55{
56 unsigned startIndex = range.begin() - m_firstParserToken;
57 if (!leaveDirectlyBefore)
58 startIndex++;
59 while (m_commentIterator < m_commentOffsets.end() && m_commentIterator->tokensBefore < startIndex)
60 m_commentIterator++;
61}
62
63void CSSParserObserverWrapper::yieldCommentsBefore(const CSSParserTokenRange& range)
64{
65 unsigned startIndex = range.begin() - m_firstParserToken;
66 while (m_commentIterator < m_commentOffsets.end() && m_commentIterator->tokensBefore <= startIndex) {
67 m_observer.observeComment(m_commentIterator->startOffset, m_commentIterator->endOffset);
68 m_commentIterator++;
69 }
70}
71
72} // namespace WebCore
73