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

Side by Side Diff: Source/core/css/CSSSelector.cpp

Issue 252683011: Add support for case-insensitive attribute value selectors (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: add runtime flag; fix selector serializing Created 6 years, 7 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 /* 1 /*
2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999-2003 Lars Knoll (knoll@kde.org)
3 * 1999 Waldo Bastian (bastian@kde.org) 3 * 1999 Waldo Bastian (bastian@kde.org)
4 * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch) 4 * 2001 Andreas Schlapbach (schlpbch@iam.unibe.ch)
5 * 2001-2003 Dirk Mueller (mueller@kde.org) 5 * 2001-2003 Dirk Mueller (mueller@kde.org)
6 * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2002, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2008 David Smith (catfish.man@gmail.com) 7 * Copyright (C) 2008 David Smith (catfish.man@gmail.com)
8 * Copyright (C) 2010 Google Inc. All rights reserved. 8 * Copyright (C) 2010 Google Inc. All rights reserved.
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
674 str.appendLiteral("$="); 674 str.appendLiteral("$=");
675 break; 675 break;
676 case CSSSelector::Contain: 676 case CSSSelector::Contain:
677 str.appendLiteral("*="); 677 str.appendLiteral("*=");
678 break; 678 break;
679 default: 679 default:
680 break; 680 break;
681 } 681 }
682 if (cs->m_match != CSSSelector::Set) { 682 if (cs->m_match != CSSSelector::Set) {
683 serializeString(cs->value(), str); 683 serializeString(cs->value(), str);
684 if (cs->attributeFlags() & CaseInsensitive)
685 str.append(" i");
684 str.append(']'); 686 str.append(']');
685 } 687 }
686 } 688 }
687 if (cs->relation() != CSSSelector::SubSelector || !cs->tagHistory()) 689 if (cs->relation() != CSSSelector::SubSelector || !cs->tagHistory())
688 break; 690 break;
689 cs = cs->tagHistory(); 691 cs = cs->tagHistory();
690 } 692 }
691 693
692 if (const CSSSelector* tagHistory = cs->tagHistory()) { 694 if (const CSSSelector* tagHistory = cs->tagHistory()) {
693 switch (cs->relation()) { 695 switch (cs->relation()) {
694 case CSSSelector::Descendant: 696 case CSSSelector::Descendant:
695 return tagHistory->selectorText(" " + str.toString() + rightSide); 697 return tagHistory->selectorText(" " + str.toString() + rightSide);
696 case CSSSelector::Child: 698 case CSSSelector::Child:
697 return tagHistory->selectorText(" > " + str.toString() + rightSide); 699 return tagHistory->selectorText(" > " + str.toString() + rightSide);
698 case CSSSelector::ShadowDeep: 700 case CSSSelector::ShadowDeep:
699 return tagHistory->selectorText(" /deep/ " + str.toString() + rightS ide); 701 return tagHistory->selectorText(" /deep/ " + str.toString() + rightS ide);
700 case CSSSelector::DirectAdjacent: 702 case CSSSelector::DirectAdjacent:
701 return tagHistory->selectorText(" + " + str.toString() + rightSide); 703 return tagHistory->selectorText(" + " + str.toString() + rightSide);
702 case CSSSelector::IndirectAdjacent: 704 case CSSSelector::IndirectAdjacent:
703 return tagHistory->selectorText(" ~ " + str.toString() + rightSide); 705 return tagHistory->selectorText(" ~ " + str.toString() + rightSide);
704 case CSSSelector::SubSelector: 706 case CSSSelector::SubSelector:
705 ASSERT_NOT_REACHED(); 707 ASSERT_NOT_REACHED();
706 case CSSSelector::ShadowPseudo: 708 case CSSSelector::ShadowPseudo:
707 return tagHistory->selectorText(str.toString() + rightSide); 709 return tagHistory->selectorText(str.toString() + rightSide);
708 } 710 }
709 } 711 }
710 return str.toString() + rightSide; 712 return str.toString() + rightSide;
711 } 713 }
712 714
713 void CSSSelector::setAttribute(const QualifiedName& value) 715 void CSSSelector::setAttribute(const QualifiedName& value, unsigned flags)
714 { 716 {
715 createRareData(); 717 createRareData();
716 m_data.m_rareData->m_attribute = value; 718 m_data.m_rareData->m_attribute = value;
719 m_data.m_rareData->m_attributeFlags = flags;
717 } 720 }
718 721
719 void CSSSelector::setArgument(const AtomicString& value) 722 void CSSSelector::setArgument(const AtomicString& value)
720 { 723 {
721 createRareData(); 724 createRareData();
722 m_data.m_rareData->m_argument = value; 725 m_data.m_rareData->m_argument = value;
723 } 726 }
724 727
725 void CSSSelector::setSelectorList(PassOwnPtr<CSSSelectorList> selectorList) 728 void CSSSelector::setSelectorList(PassOwnPtr<CSSSelectorList> selectorList)
726 { 729 {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 { 813 {
811 ASSERT(m_hasRareData); 814 ASSERT(m_hasRareData);
812 return m_data.m_rareData->matchNth(count); 815 return m_data.m_rareData->matchNth(count);
813 } 816 }
814 817
815 CSSSelector::RareData::RareData(const AtomicString& value) 818 CSSSelector::RareData::RareData(const AtomicString& value)
816 : m_value(value) 819 : m_value(value)
817 , m_a(0) 820 , m_a(0)
818 , m_b(0) 821 , m_b(0)
819 , m_attribute(anyQName()) 822 , m_attribute(anyQName())
823 , m_attributeFlags(NoAttributeFlags)
820 , m_argument(nullAtom) 824 , m_argument(nullAtom)
821 { 825 {
822 } 826 }
823 827
824 CSSSelector::RareData::~RareData() 828 CSSSelector::RareData::~RareData()
825 { 829 {
826 } 830 }
827 831
828 // a helper function for parsing nth-arguments 832 // a helper function for parsing nth-arguments
829 bool CSSSelector::RareData::parseNth() 833 bool CSSSelector::RareData::parseNth()
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 return false; 882 return false;
879 return (count - m_b) % m_a == 0; 883 return (count - m_b) % m_a == 0;
880 } else { 884 } else {
881 if (count > m_b) 885 if (count > m_b)
882 return false; 886 return false;
883 return (m_b - count) % (-m_a) == 0; 887 return (m_b - count) % (-m_a) == 0;
884 } 888 }
885 } 889 }
886 890
887 } // namespace WebCore 891 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698