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

Unified Diff: Source/core/css/parser/CSSTokenizer.cpp

Issue 1192983003: CSS Custom Properties (Variables) (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove unnecessary enum Created 5 years, 6 months 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: Source/core/css/parser/CSSTokenizer.cpp
diff --git a/Source/core/css/parser/CSSTokenizer.cpp b/Source/core/css/parser/CSSTokenizer.cpp
index 1ace8004edc3e1bd3f51247363e2b4e851a941f0..e03a931944969bbc9840b0cb2a303e19a1390fc8 100644
--- a/Source/core/css/parser/CSSTokenizer.cpp
+++ b/Source/core/css/parser/CSSTokenizer.cpp
@@ -18,7 +18,8 @@ namespace blink {
namespace blink {
CSSTokenizer::Scope::Scope(const String& string)
-: m_string(string)
+ : m_string(string)
+ , m_hasVariableReference(false)
{
// According to the spec, we should perform preprocessing here.
// See: http://dev.w3.org/csswg/css-syntax/#input-preprocessing
@@ -48,7 +49,8 @@ CSSTokenizer::Scope::Scope(const String& string)
}
CSSTokenizer::Scope::Scope(const String& string, CSSParserObserverWrapper& wrapper)
-: m_string(string)
+ : m_string(string)
+ , m_hasVariableReference(false)
{
if (string.isEmpty())
return;
@@ -76,7 +78,7 @@ CSSTokenizer::Scope::Scope(const String& string, CSSParserObserverWrapper& wrapp
CSSParserTokenRange CSSTokenizer::Scope::tokenRange()
{
- return m_tokens;
+ return CSSParserTokenRange(m_tokens, this);
alancutter (OOO until 2018) 2015/07/14 06:12:57 This looks very dangerous, see calls to tokenRange
}
unsigned CSSTokenizer::Scope::tokenCount()
@@ -137,8 +139,9 @@ void CSSTokenizer::consume(unsigned offset)
CSSParserToken CSSTokenizer::whiteSpace(UChar cc)
{
- consumeUntilNonWhitespace();
- return CSSParserToken(WhitespaceToken);
+ unsigned start = m_input.offset();
+ unsigned length = consumeUntilNonWhitespace();
+ return CSSParserToken(WhitespaceToken, m_input.rangeAsCSSParserString(start, length));
}
static bool popIfBlockMatches(Vector<CSSParserTokenType>& blockStack, CSSParserTokenType type)
@@ -261,12 +264,12 @@ CSSParserToken CSSTokenizer::solidus(UChar cc)
CSSParserToken CSSTokenizer::colon(UChar cc)
{
- return CSSParserToken(ColonToken);
+ return CSSParserToken(ColonToken, lastConsumedCharacter());
}
CSSParserToken CSSTokenizer::semiColon(UChar cc)
{
- return CSSParserToken(SemicolonToken);
+ return CSSParserToken(SemicolonToken, lastConsumedCharacter());
}
CSSParserToken CSSTokenizer::hash(UChar cc)
@@ -491,6 +494,8 @@ CSSParserToken CSSTokenizer::consumeIdentLikeToken()
UChar next = m_input.nextInputChar();
if (next != '"' && next != '\'')
return consumeUrlToken();
+ } else if (equalIgnoringCase(name, "var")) {
+ m_scope.m_hasVariableReference = true;
}
return blockStart(LeftParenthesisToken, FunctionToken, name);
}
@@ -635,11 +640,15 @@ void CSSTokenizer::consumeBadUrlRemnants()
}
}
-void CSSTokenizer::consumeUntilNonWhitespace()
+unsigned CSSTokenizer::consumeUntilNonWhitespace()
{
+ unsigned count = 0;
// Using HTML space here rather than CSS space since we don't do preprocessing
- while (isHTMLSpace<UChar>(m_input.nextInputChar()))
+ while (isHTMLSpace<UChar>(m_input.nextInputChar())) {
+ ++count;
consume();
+ }
+ return count;
}
void CSSTokenizer::consumeSingleWhitespaceIfNext()
@@ -708,6 +717,11 @@ CSSParserString CSSTokenizer::consumeName()
}
}
+CSSParserString CSSTokenizer::lastConsumedCharacter()
+{
+ return m_input.rangeAsCSSParserString(m_input.offset() - 1, 1);
+}
+
// http://dev.w3.org/csswg/css-syntax/#consume-an-escaped-code-point
UChar32 CSSTokenizer::consumeEscape()
{

Powered by Google App Engine
This is Rietveld 408576698