Index: Source/core/css/parser/CSSParserTokenRange.cpp |
diff --git a/Source/core/css/parser/CSSParserTokenRange.cpp b/Source/core/css/parser/CSSParserTokenRange.cpp |
index 85a069d5d3c5d7737b5a7b0e4f99eff5173f75cd..1db898e611a1814188c9db7395d4fce70517a85c 100644 |
--- a/Source/core/css/parser/CSSParserTokenRange.cpp |
+++ b/Source/core/css/parser/CSSParserTokenRange.cpp |
@@ -26,6 +26,24 @@ CSSParserTokenRange CSSParserTokenRange::makeSubRange(const CSSParserToken* firs |
return CSSParserTokenRange(first, last); |
} |
+CSSParserTokenRange CSSParserTokenRange::consumeBlock() |
+{ |
+ ASSERT(peek().blockType() == CSSParserToken::BlockStart); |
+ const CSSParserToken* start = &peek() + 1; |
+ unsigned nestingLevel = 0; |
+ do { |
+ const CSSParserToken& token = consume(); |
+ if (token.blockType() == CSSParserToken::BlockStart) |
+ nestingLevel++; |
+ else if (token.blockType() == CSSParserToken::BlockEnd) |
+ nestingLevel--; |
+ } while (nestingLevel && m_first < m_last); |
+ |
+ if (nestingLevel) |
+ return makeSubRange(start, m_last); // Ended at EOF |
+ return makeSubRange(start, m_last - 1); |
+} |
+ |
void CSSParserTokenRange::consumeComponentValue() |
{ |
// FIXME: This is going to do multiple passes over large sections of a stylesheet. |