OLD | NEW |
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/CSSSelectorParser.h" | 5 #include "core/css/parser/CSSSelectorParser.h" |
6 | 6 |
7 #include "core/css/CSSSelectorList.h" | 7 #include "core/css/CSSSelectorList.h" |
8 #include "core/css/StyleSheetContents.h" | 8 #include "core/css/StyleSheetContents.h" |
9 #include "core/frame/UseCounter.h" | 9 #include "core/frame/UseCounter.h" |
10 #include "platform/RuntimeEnabledFeatures.h" | 10 #include "platform/RuntimeEnabledFeatures.h" |
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
567 if (delimiter == '~') | 567 if (delimiter == '~') |
568 return CSSSelector::IndirectAdjacent; | 568 return CSSSelector::IndirectAdjacent; |
569 return CSSSelector::Child; | 569 return CSSSelector::Child; |
570 } | 570 } |
571 | 571 |
572 // Match /deep/ | 572 // Match /deep/ |
573 if (delimiter != '/') | 573 if (delimiter != '/') |
574 return fallbackResult; | 574 return fallbackResult; |
575 range.consume(); | 575 range.consume(); |
576 const CSSParserToken& ident = range.consume(); | 576 const CSSParserToken& ident = range.consume(); |
577 if (ident.type() != IdentToken || !ident.valueEqualsIgnoringCase("deep")) | 577 if (ident.type() != IdentToken || !ident.valueEqualsIgnoringASCIICase("deep"
)) |
578 m_failedParsing = true; | 578 m_failedParsing = true; |
579 const CSSParserToken& slash = range.consumeIncludingWhitespace(); | 579 const CSSParserToken& slash = range.consumeIncludingWhitespace(); |
580 if (slash.type() != DelimiterToken || slash.delimiter() != '/') | 580 if (slash.type() != DelimiterToken || slash.delimiter() != '/') |
581 m_failedParsing = true; | 581 m_failedParsing = true; |
582 return CSSSelector::ShadowDeep; | 582 return CSSSelector::ShadowDeep; |
583 } | 583 } |
584 | 584 |
585 CSSSelector::Match CSSSelectorParser::consumeAttributeMatch(CSSParserTokenRange&
range) | 585 CSSSelector::Match CSSSelectorParser::consumeAttributeMatch(CSSParserTokenRange&
range) |
586 { | 586 { |
587 const CSSParserToken& token = range.consumeIncludingWhitespace(); | 587 const CSSParserToken& token = range.consumeIncludingWhitespace(); |
(...skipping 15 matching lines...) Expand all Loading... |
603 m_failedParsing = true; | 603 m_failedParsing = true; |
604 return CSSSelector::AttributeExact; | 604 return CSSSelector::AttributeExact; |
605 } | 605 } |
606 } | 606 } |
607 | 607 |
608 CSSSelector::AttributeMatchType CSSSelectorParser::consumeAttributeFlags(CSSPars
erTokenRange& range) | 608 CSSSelector::AttributeMatchType CSSSelectorParser::consumeAttributeFlags(CSSPars
erTokenRange& range) |
609 { | 609 { |
610 if (range.peek().type() != IdentToken) | 610 if (range.peek().type() != IdentToken) |
611 return CSSSelector::CaseSensitive; | 611 return CSSSelector::CaseSensitive; |
612 const CSSParserToken& flag = range.consumeIncludingWhitespace(); | 612 const CSSParserToken& flag = range.consumeIncludingWhitespace(); |
613 if (flag.valueEqualsIgnoringCase("i")) | 613 if (flag.valueEqualsIgnoringASCIICase("i")) |
614 return CSSSelector::CaseInsensitive; | 614 return CSSSelector::CaseInsensitive; |
615 m_failedParsing = true; | 615 m_failedParsing = true; |
616 return CSSSelector::CaseSensitive; | 616 return CSSSelector::CaseSensitive; |
617 } | 617 } |
618 | 618 |
619 bool CSSSelectorParser::consumeANPlusB(CSSParserTokenRange& range, std::pair<int
, int>& result) | 619 bool CSSSelectorParser::consumeANPlusB(CSSParserTokenRange& range, std::pair<int
, int>& result) |
620 { | 620 { |
621 const CSSParserToken& token = range.consume(); | 621 const CSSParserToken& token = range.consume(); |
622 if (token.type() == NumberToken && token.numericValueType() == IntegerValueT
ype) { | 622 if (token.type() == NumberToken && token.numericValueType() == IntegerValueT
ype) { |
623 result = std::make_pair(0, static_cast<int>(token.numericValue())); | 623 result = std::make_pair(0, static_cast<int>(token.numericValue())); |
624 return true; | 624 return true; |
625 } | 625 } |
626 if (token.type() == IdentToken) { | 626 if (token.type() == IdentToken) { |
627 if (token.valueEqualsIgnoringCase("odd")) { | 627 if (token.valueEqualsIgnoringASCIICase("odd")) { |
628 result = std::make_pair(2, 1); | 628 result = std::make_pair(2, 1); |
629 return true; | 629 return true; |
630 } | 630 } |
631 if (token.valueEqualsIgnoringCase("even")) { | 631 if (token.valueEqualsIgnoringASCIICase("even")) { |
632 result = std::make_pair(2, 0); | 632 result = std::make_pair(2, 0); |
633 return true; | 633 return true; |
634 } | 634 } |
635 } | 635 } |
636 | 636 |
637 // The 'n' will end up as part of an ident or dimension. For a valid <an+b>, | 637 // The 'n' will end up as part of an ident or dimension. For a valid <an+b>, |
638 // this will store a string of the form 'n', 'n-', or 'n-123'. | 638 // this will store a string of the form 'n', 'n-', or 'n-123'. |
639 String nString; | 639 String nString; |
640 | 640 |
641 if (token.type() == DelimiterToken && token.delimiter() == '+' && range.peek
().type() == IdentToken) { | 641 if (token.type() == DelimiterToken && token.delimiter() == '+' && range.peek
().type() == IdentToken) { |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
765 | 765 |
766 if (!splitAfter || !splitAfter->tagHistory()) | 766 if (!splitAfter || !splitAfter->tagHistory()) |
767 return compoundSelector; | 767 return compoundSelector; |
768 | 768 |
769 OwnPtr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory(); | 769 OwnPtr<CSSParserSelector> secondCompound = splitAfter->releaseTagHistory(); |
770 secondCompound->appendTagHistory(secondCompound->pseudoType() == CSSSelector
::PseudoSlotted ? CSSSelector::ShadowSlot : CSSSelector::ShadowPseudo, compoundS
elector); | 770 secondCompound->appendTagHistory(secondCompound->pseudoType() == CSSSelector
::PseudoSlotted ? CSSSelector::ShadowSlot : CSSSelector::ShadowPseudo, compoundS
elector); |
771 return secondCompound.release(); | 771 return secondCompound.release(); |
772 } | 772 } |
773 | 773 |
774 } // namespace blink | 774 } // namespace blink |
OLD | NEW |