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

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSTokenizer.cpp

Issue 2024373002: Replace CSSParserString with StringView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Match arguments to equalStringView. Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/css/parser/CSSTokenizer.h" 5 #include "core/css/parser/CSSTokenizer.h"
6 6
7 namespace blink { 7 namespace blink {
8 #include "core/CSSTokenizerCodepoints.cpp" 8 #include "core/CSSTokenizerCodepoints.cpp"
9 } 9 }
10 10
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 } 133 }
134 return false; 134 return false;
135 } 135 }
136 136
137 CSSParserToken CSSTokenizer::blockStart(CSSParserTokenType type) 137 CSSParserToken CSSTokenizer::blockStart(CSSParserTokenType type)
138 { 138 {
139 m_blockStack.append(type); 139 m_blockStack.append(type);
140 return CSSParserToken(type, CSSParserToken::BlockStart); 140 return CSSParserToken(type, CSSParserToken::BlockStart);
141 } 141 }
142 142
143 CSSParserToken CSSTokenizer::blockStart(CSSParserTokenType blockType, CSSParserT okenType type, CSSParserString name) 143 CSSParserToken CSSTokenizer::blockStart(CSSParserTokenType blockType, CSSParserT okenType type, StringView name)
144 { 144 {
145 m_blockStack.append(blockType); 145 m_blockStack.append(blockType);
146 return CSSParserToken(type, name, CSSParserToken::BlockStart); 146 return CSSParserToken(type, name, CSSParserToken::BlockStart);
147 } 147 }
148 148
149 CSSParserToken CSSTokenizer::blockEnd(CSSParserTokenType type, CSSParserTokenTyp e startType) 149 CSSParserToken CSSTokenizer::blockEnd(CSSParserTokenType type, CSSParserTokenTyp e startType)
150 { 150 {
151 if (popIfBlockMatches(m_blockStack, startType)) 151 if (popIfBlockMatches(m_blockStack, startType))
152 return CSSParserToken(type, CSSParserToken::BlockEnd); 152 return CSSParserToken(type, CSSParserToken::BlockEnd);
153 return CSSParserToken(type); 153 return CSSParserToken(type);
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 if (nextCharsAreIdentifier()) 459 if (nextCharsAreIdentifier())
460 token.convertToDimensionWithUnit(consumeName()); 460 token.convertToDimensionWithUnit(consumeName());
461 else if (consumeIfNext('%')) 461 else if (consumeIfNext('%'))
462 token.convertToPercentage(); 462 token.convertToPercentage();
463 return token; 463 return token;
464 } 464 }
465 465
466 // http://dev.w3.org/csswg/css-syntax/#consume-ident-like-token 466 // http://dev.w3.org/csswg/css-syntax/#consume-ident-like-token
467 CSSParserToken CSSTokenizer::consumeIdentLikeToken() 467 CSSParserToken CSSTokenizer::consumeIdentLikeToken()
468 { 468 {
469 CSSParserString name = consumeName(); 469 StringView name = consumeName();
470 if (consumeIfNext('(')) { 470 if (consumeIfNext('(')) {
471 if (name.equalIgnoringASCIICase("url")) { 471 if (equalIgnoringASCIICase(name, "url")) {
472 // The spec is slightly different so as to avoid dropping whitespace 472 // The spec is slightly different so as to avoid dropping whitespace
473 // tokens, but they wouldn't be used and this is easier. 473 // tokens, but they wouldn't be used and this is easier.
474 consumeUntilNonWhitespace(); 474 consumeUntilNonWhitespace();
475 UChar next = m_input.nextInputChar(); 475 UChar next = m_input.nextInputChar();
476 if (next != '"' && next != '\'') 476 if (next != '"' && next != '\'')
477 return consumeUrlToken(); 477 return consumeUrlToken();
478 } 478 }
479 return blockStart(LeftParenthesisToken, FunctionToken, name); 479 return blockStart(LeftParenthesisToken, FunctionToken, name);
480 } 480 }
481 return CSSParserToken(IdentToken, name); 481 return CSSParserToken(IdentToken, name);
482 } 482 }
483 483
484 // http://dev.w3.org/csswg/css-syntax/#consume-a-string-token 484 // http://dev.w3.org/csswg/css-syntax/#consume-a-string-token
485 CSSParserToken CSSTokenizer::consumeStringTokenUntil(UChar endingCodePoint) 485 CSSParserToken CSSTokenizer::consumeStringTokenUntil(UChar endingCodePoint)
486 { 486 {
487 // Strings without escapes get handled without allocations 487 // Strings without escapes get handled without allocations
488 for (unsigned size = 0; ; size++) { 488 for (unsigned size = 0; ; size++) {
489 UChar cc = m_input.peekWithoutReplacement(size); 489 UChar cc = m_input.peekWithoutReplacement(size);
490 if (cc == endingCodePoint) { 490 if (cc == endingCodePoint) {
491 unsigned startOffset = m_input.offset(); 491 unsigned startOffset = m_input.offset();
492 m_input.advance(size + 1); 492 m_input.advance(size + 1);
493 return CSSParserToken(StringToken, m_input.rangeAsCSSParserString(st artOffset, size)); 493 return CSSParserToken(StringToken, m_input.rangeAt(startOffset, size ));
494 } 494 }
495 if (isNewLine(cc)) { 495 if (isNewLine(cc)) {
496 m_input.advance(size); 496 m_input.advance(size);
497 return CSSParserToken(BadStringToken); 497 return CSSParserToken(BadStringToken);
498 } 498 }
499 if (cc == '\0' || cc == '\\') 499 if (cc == '\0' || cc == '\\')
500 break; 500 break;
501 } 501 }
502 502
503 StringBuilder output; 503 StringBuilder output;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
563 CSSParserToken CSSTokenizer::consumeUrlToken() 563 CSSParserToken CSSTokenizer::consumeUrlToken()
564 { 564 {
565 consumeUntilNonWhitespace(); 565 consumeUntilNonWhitespace();
566 566
567 // URL tokens without escapes get handled without allocations 567 // URL tokens without escapes get handled without allocations
568 for (unsigned size = 0; ; size++) { 568 for (unsigned size = 0; ; size++) {
569 UChar cc = m_input.peekWithoutReplacement(size); 569 UChar cc = m_input.peekWithoutReplacement(size);
570 if (cc == ')') { 570 if (cc == ')') {
571 unsigned startOffset = m_input.offset(); 571 unsigned startOffset = m_input.offset();
572 m_input.advance(size + 1); 572 m_input.advance(size + 1);
573 return CSSParserToken(UrlToken, m_input.rangeAsCSSParserString(start Offset, size)); 573 return CSSParserToken(UrlToken, m_input.rangeAt(startOffset, size));
574 } 574 }
575 if (cc <= ' ' || cc == '\\' || cc == '"' || cc == '\'' || cc == '(' || c c == '\x7f') 575 if (cc <= ' ' || cc == '\\' || cc == '"' || cc == '\'' || cc == '(' || c c == '\x7f')
576 break; 576 break;
577 } 577 }
578 578
579 StringBuilder result; 579 StringBuilder result;
580 while (true) { 580 while (true) {
581 UChar cc = consume(); 581 UChar cc = consume();
582 if (cc == ')' || cc == kEndOfFileMarker) 582 if (cc == ')' || cc == kEndOfFileMarker)
583 return CSSParserToken(UrlToken, registerString(result.toString())); 583 return CSSParserToken(UrlToken, registerString(result.toString()));
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 bool CSSTokenizer::consumeIfNext(UChar character) 655 bool CSSTokenizer::consumeIfNext(UChar character)
656 { 656 {
657 if (m_input.nextInputChar() == character) { 657 if (m_input.nextInputChar() == character) {
658 consume(); 658 consume();
659 return true; 659 return true;
660 } 660 }
661 return false; 661 return false;
662 } 662 }
663 663
664 // http://www.w3.org/TR/css3-syntax/#consume-a-name 664 // http://www.w3.org/TR/css3-syntax/#consume-a-name
665 CSSParserString CSSTokenizer::consumeName() 665 StringView CSSTokenizer::consumeName()
666 { 666 {
667 // Names without escapes get handled without allocations 667 // Names without escapes get handled without allocations
668 for (unsigned size = 0; ; ++size) { 668 for (unsigned size = 0; ; ++size) {
669 UChar cc = m_input.peekWithoutReplacement(size); 669 UChar cc = m_input.peekWithoutReplacement(size);
670 if (cc == '\0' || cc == '\\') 670 if (cc == '\0' || cc == '\\')
671 break; 671 break;
672 if (!isNameCodePoint(cc)) { 672 if (!isNameCodePoint(cc)) {
673 unsigned startOffset = m_input.offset(); 673 unsigned startOffset = m_input.offset();
674 m_input.advance(size); 674 m_input.advance(size);
675 return m_input.rangeAsCSSParserString(startOffset, size); 675 return m_input.rangeAt(startOffset, size);
676 } 676 }
677 } 677 }
678 678
679 StringBuilder result; 679 StringBuilder result;
680 while (true) { 680 while (true) {
681 UChar cc = consume(); 681 UChar cc = consume();
682 if (isNameCodePoint(cc)) { 682 if (isNameCodePoint(cc)) {
683 result.append(cc); 683 result.append(cc);
684 continue; 684 continue;
685 } 685 }
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
760 } 760 }
761 761
762 bool CSSTokenizer::nextCharsAreIdentifier() 762 bool CSSTokenizer::nextCharsAreIdentifier()
763 { 763 {
764 UChar first = consume(); 764 UChar first = consume();
765 bool areIdentifier = nextCharsAreIdentifier(first); 765 bool areIdentifier = nextCharsAreIdentifier(first);
766 reconsume(first); 766 reconsume(first);
767 return areIdentifier; 767 return areIdentifier;
768 } 768 }
769 769
770 CSSParserString CSSTokenizer::registerString(const String& string) 770 StringView CSSTokenizer::registerString(const String& string)
771 { 771 {
772 m_scope.storeString(string); 772 m_scope.storeString(string);
773 CSSParserString result; 773 return string;
774 result.init(string);
775 return result;
776 } 774 }
777 775
778 } // namespace blink 776 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698