Chromium Code Reviews| Index: third_party/WebKit/Source/core/css/CSSVariableData.cpp |
| diff --git a/third_party/WebKit/Source/core/css/CSSVariableData.cpp b/third_party/WebKit/Source/core/css/CSSVariableData.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bff4ec7a348948fc61c6c72b648c970035b1c985 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/core/css/CSSVariableData.cpp |
| @@ -0,0 +1,59 @@ |
| +// 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. |
| + |
| +#include "config.h" |
| +#include "core/css/CSSVariableData.h" |
| + |
| +#include "core/css/parser/CSSParserTokenRange.h" |
| +#include "wtf/text/StringBuilder.h" |
| + |
| +namespace blink { |
| + |
| +template<typename CharacterType> void CSSVariableData::updateTokens(const CSSParserTokenRange& range) |
| +{ |
| + const CharacterType* currentOffset = m_backingString.getCharacters<CharacterType>(); |
| + for (auto&& token : range) { |
|
alancutter (OOO until 2018)
2015/10/28 07:31:20
auto&& scares me, can this just be const CSSParser
leviw_travelin_and_unemployed
2015/10/30 21:41:16
Done.
|
| + if (token.hasStringBacking()) { |
| + unsigned length = token.value().length(); |
| + CSSParserString parserString; |
| + parserString.init(currentOffset, length); |
| + m_tokens.append(token.copyWithUpdatedString(parserString)); |
| + currentOffset += length; |
| + } else { |
| + m_tokens.append(token); |
| + } |
| + } |
| + ASSERT(currentOffset == m_backingString.getCharacters<CharacterType>() + m_backingString.length()); |
| +} |
| + |
| +void CSSVariableData::consumeAndUpdateTokens(const CSSParserTokenRange& range) |
| +{ |
| + StringBuilder stringBuilder; |
| + CSSParserTokenRange localRange = range; |
| + |
| + while (!localRange.atEnd()) { |
| + CSSParserToken token = localRange.consume(); |
| + if (token.hasStringBacking()) { |
| + CSSParserString value = token.value(); |
| + if (value.is8Bit()) |
| + stringBuilder.append(value.characters8(), value.length()); |
| + else |
| + stringBuilder.append(value.characters16(), value.length()); |
| + } |
| + } |
| + m_backingString = stringBuilder.toString(); |
| + if (m_backingString.is8Bit()) |
| + updateTokens<LChar>(range); |
| + else |
| + updateTokens<UChar>(range); |
| +} |
| + |
| +CSSVariableData::CSSVariableData(const CSSParserTokenRange& range, bool needsVariableResolution) |
| + : m_needsVariableResolution(needsVariableResolution) |
| +{ |
| + ASSERT(!range.atEnd()); |
| + consumeAndUpdateTokens(range); |
|
alancutter (OOO until 2018)
2015/10/28 07:31:20
I think range.deepCopy(m_backingString, m_tokens)
|
| +} |
| + |
| +} // namespace blink |