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

Unified Diff: third_party/WebKit/Source/core/css/CSSVariableData.cpp

Issue 1192983003: CSS Custom Properties (Variables) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Use m_unit Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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..d5208cba640cd2c897eac596245715c1efe8138b
--- /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 (const CSSParserToken& token : range) {
+ 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);
+}
+
+} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/css/CSSVariableData.h ('k') | third_party/WebKit/Source/core/css/CSSVariableReferenceValue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698