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

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

Issue 187353003: Implement /content/ combinator. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Patch for landing Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/css/CSSSelector.h ('k') | Source/core/css/CSSSelectorList.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 case PseudoRightPage: 245 case PseudoRightPage:
246 case PseudoInRange: 246 case PseudoInRange:
247 case PseudoOutOfRange: 247 case PseudoOutOfRange:
248 case PseudoUserAgentCustomElement: 248 case PseudoUserAgentCustomElement:
249 case PseudoWebKitCustomElement: 249 case PseudoWebKitCustomElement:
250 case PseudoCue: 250 case PseudoCue:
251 case PseudoFutureCue: 251 case PseudoFutureCue:
252 case PseudoPastCue: 252 case PseudoPastCue:
253 case PseudoDistributed: 253 case PseudoDistributed:
254 case PseudoUnresolved: 254 case PseudoUnresolved:
255 case PseudoContent:
256 case PseudoHost: 255 case PseudoHost:
257 case PseudoAncestor: 256 case PseudoAncestor:
258 case PseudoFullScreen: 257 case PseudoFullScreen:
259 case PseudoFullScreenDocument: 258 case PseudoFullScreenDocument:
260 case PseudoFullScreenAncestor: 259 case PseudoFullScreenAncestor:
261 return NOPSEUDO; 260 return NOPSEUDO;
262 case PseudoNotParsed: 261 case PseudoNotParsed:
263 ASSERT_NOT_REACHED(); 262 ASSERT_NOT_REACHED();
264 return NOPSEUDO; 263 return NOPSEUDO;
265 } 264 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 DEFINE_STATIC_LOCAL(AtomicString, fullScreenAncestor, ("-webkit-full-screen- ancestor", AtomicString::ConstructFromLiteral)); 338 DEFINE_STATIC_LOCAL(AtomicString, fullScreenAncestor, ("-webkit-full-screen- ancestor", AtomicString::ConstructFromLiteral));
340 DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromL iteral)); 339 DEFINE_STATIC_LOCAL(AtomicString, cue, ("cue(", AtomicString::ConstructFromL iteral));
341 DEFINE_STATIC_LOCAL(AtomicString, cueWithoutParen, ("cue", AtomicString::Con structFromLiteral)); 340 DEFINE_STATIC_LOCAL(AtomicString, cueWithoutParen, ("cue", AtomicString::Con structFromLiteral));
342 DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::Constr uctFromLiteral)); 341 DEFINE_STATIC_LOCAL(AtomicString, futureCue, ("future", AtomicString::Constr uctFromLiteral));
343 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF romLiteral)); 342 DEFINE_STATIC_LOCAL(AtomicString, pastCue, ("past", AtomicString::ConstructF romLiteral));
344 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom icString::ConstructFromLiteral)); 343 DEFINE_STATIC_LOCAL(AtomicString, distributed, ("-webkit-distributed(", Atom icString::ConstructFromLiteral));
345 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr uctFromLiteral)); 344 DEFINE_STATIC_LOCAL(AtomicString, inRange, ("in-range", AtomicString::Constr uctFromLiteral));
346 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString: :ConstructFromLiteral)); 345 DEFINE_STATIC_LOCAL(AtomicString, outOfRange, ("out-of-range", AtomicString: :ConstructFromLiteral));
347 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr omLiteral)); 346 DEFINE_STATIC_LOCAL(AtomicString, scope, ("scope", AtomicString::ConstructFr omLiteral));
348 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C onstructFromLiteral)); 347 DEFINE_STATIC_LOCAL(AtomicString, unresolved, ("unresolved", AtomicString::C onstructFromLiteral));
349 DEFINE_STATIC_LOCAL(AtomicString, content, ("content", AtomicString::Constru ctFromLiteral));
350 DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFrom Literal)); 348 DEFINE_STATIC_LOCAL(AtomicString, host, ("host", AtomicString::ConstructFrom Literal));
351 DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::Co nstructFromLiteral)); 349 DEFINE_STATIC_LOCAL(AtomicString, hostWithParams, ("host(", AtomicString::Co nstructFromLiteral));
352 DEFINE_STATIC_LOCAL(AtomicString, ancestor, ("ancestor", AtomicString::Const ructFromLiteral)); 350 DEFINE_STATIC_LOCAL(AtomicString, ancestor, ("ancestor", AtomicString::Const ructFromLiteral));
353 DEFINE_STATIC_LOCAL(AtomicString, ancestorWithParams, ("ancestor(", AtomicSt ring::ConstructFromLiteral)); 351 DEFINE_STATIC_LOCAL(AtomicString, ancestorWithParams, ("ancestor(", AtomicSt ring::ConstructFromLiteral));
354 352
355 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; 353 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0;
356 if (!nameToPseudoType) { 354 if (!nameToPseudoType) {
357 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; 355 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>;
358 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive); 356 nameToPseudoType->set(active.impl(), CSSSelector::PseudoActive);
359 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter); 357 nameToPseudoType->set(after.impl(), CSSSelector::PseudoAfter);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue); 426 nameToPseudoType->set(pastCue.impl(), CSSSelector::PseudoPastCue);
429 nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed ); 427 nameToPseudoType->set(distributed.impl(), CSSSelector::PseudoDistributed );
430 nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange); 428 nameToPseudoType->set(inRange.impl(), CSSSelector::PseudoInRange);
431 nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange); 429 nameToPseudoType->set(outOfRange.impl(), CSSSelector::PseudoOutOfRange);
432 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolved); 430 nameToPseudoType->set(unresolved.impl(), CSSSelector::PseudoUnresolved);
433 if (RuntimeEnabledFeatures::shadowDOMEnabled()) { 431 if (RuntimeEnabledFeatures::shadowDOMEnabled()) {
434 nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost); 432 nameToPseudoType->set(host.impl(), CSSSelector::PseudoHost);
435 nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost ); 433 nameToPseudoType->set(hostWithParams.impl(), CSSSelector::PseudoHost );
436 nameToPseudoType->set(ancestor.impl(), CSSSelector::PseudoAncestor); 434 nameToPseudoType->set(ancestor.impl(), CSSSelector::PseudoAncestor);
437 nameToPseudoType->set(ancestorWithParams.impl(), CSSSelector::Pseudo Ancestor); 435 nameToPseudoType->set(ancestorWithParams.impl(), CSSSelector::Pseudo Ancestor);
438 nameToPseudoType->set(content.impl(), CSSSelector::PseudoContent);
439 } 436 }
440 } 437 }
441 return nameToPseudoType; 438 return nameToPseudoType;
442 } 439 }
443 440
444 #ifndef NDEBUG 441 #ifndef NDEBUG
445 void CSSSelector::show(int indent) const 442 void CSSSelector::show(int indent) const
446 { 443 {
447 printf("%*sselectorText(): %s\n", indent, "", selectorText().ascii().data()) ; 444 printf("%*sselectorText(): %s\n", indent, "", selectorText().ascii().data()) ;
448 printf("%*sm_match: %d\n", indent, "", m_match); 445 printf("%*sm_match: %d\n", indent, "", m_match);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 case PseudoResizer: 509 case PseudoResizer:
513 case PseudoScrollbar: 510 case PseudoScrollbar:
514 case PseudoScrollbarCorner: 511 case PseudoScrollbarCorner:
515 case PseudoScrollbarButton: 512 case PseudoScrollbarButton:
516 case PseudoScrollbarThumb: 513 case PseudoScrollbarThumb:
517 case PseudoScrollbarTrack: 514 case PseudoScrollbarTrack:
518 case PseudoScrollbarTrackPiece: 515 case PseudoScrollbarTrackPiece:
519 case PseudoSelection: 516 case PseudoSelection:
520 case PseudoUserAgentCustomElement: 517 case PseudoUserAgentCustomElement:
521 case PseudoWebKitCustomElement: 518 case PseudoWebKitCustomElement:
522 case PseudoContent:
523 element = true; 519 element = true;
524 break; 520 break;
525 case PseudoUnknown: 521 case PseudoUnknown:
526 case PseudoEmpty: 522 case PseudoEmpty:
527 case PseudoFirstChild: 523 case PseudoFirstChild:
528 case PseudoFirstOfType: 524 case PseudoFirstOfType:
529 case PseudoLastChild: 525 case PseudoLastChild:
530 case PseudoLastOfType: 526 case PseudoLastOfType:
531 case PseudoOnlyChild: 527 case PseudoOnlyChild:
532 case PseudoOnlyOfType: 528 case PseudoOnlyOfType:
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 str.append(')'); 690 str.append(')');
695 } 691 }
696 break; 692 break;
697 } 693 }
698 default: 694 default:
699 break; 695 break;
700 } 696 }
701 } else if (cs->m_match == CSSSelector::PseudoElement) { 697 } else if (cs->m_match == CSSSelector::PseudoElement) {
702 str.appendLiteral("::"); 698 str.appendLiteral("::");
703 str.append(cs->value()); 699 str.append(cs->value());
704
705 if (cs->pseudoType() == PseudoContent) {
706 if (cs->relation() == CSSSelector::SubSelector && cs->tagHistory ())
707 return cs->tagHistory()->selectorText() + str.toString() + r ightSide;
708 }
709 } else if (cs->isAttributeSelector()) { 700 } else if (cs->isAttributeSelector()) {
710 str.append('['); 701 str.append('[');
711 const AtomicString& prefix = cs->attribute().prefix(); 702 const AtomicString& prefix = cs->attribute().prefix();
712 if (!prefix.isNull()) { 703 if (!prefix.isNull()) {
713 str.append(prefix); 704 str.append(prefix);
714 str.append("|"); 705 str.append("|");
715 } 706 }
716 str.append(cs->attribute().localName()); 707 str.append(cs->attribute().localName());
717 switch (cs->m_match) { 708 switch (cs->m_match) {
718 case CSSSelector::Exact: 709 case CSSSelector::Exact:
(...skipping 27 matching lines...) Expand all
746 } 737 }
747 } 738 }
748 if (cs->relation() != CSSSelector::SubSelector || !cs->tagHistory()) 739 if (cs->relation() != CSSSelector::SubSelector || !cs->tagHistory())
749 break; 740 break;
750 cs = cs->tagHistory(); 741 cs = cs->tagHistory();
751 } 742 }
752 743
753 if (const CSSSelector* tagHistory = cs->tagHistory()) { 744 if (const CSSSelector* tagHistory = cs->tagHistory()) {
754 switch (cs->relation()) { 745 switch (cs->relation()) {
755 case CSSSelector::Descendant: 746 case CSSSelector::Descendant:
756 if (cs->relationIsAffectedByPseudoContent() && tagHistory->pseudoTyp e() != CSSSelector::PseudoContent) 747 if (cs->relationIsAffectedByPseudoContent())
757 return tagHistory->selectorText("::-webkit-distributed(" + str.t oString() + rightSide + ")"); 748 return tagHistory->selectorText("::-webkit-distributed(" + str.t oString() + rightSide + ")");
758 return tagHistory->selectorText(" " + str.toString() + rightSide); 749 return tagHistory->selectorText(" " + str.toString() + rightSide);
759 case CSSSelector::Child: 750 case CSSSelector::Child:
760 if (cs->relationIsAffectedByPseudoContent() && tagHistory->pseudoTyp e() != CSSSelector::PseudoContent) 751 if (cs->relationIsAffectedByPseudoContent())
761 return tagHistory->selectorText("::-webkit-distributed(> " + str .toString() + rightSide + ")"); 752 return tagHistory->selectorText("::-webkit-distributed(> " + str .toString() + rightSide + ")");
762 return tagHistory->selectorText(" > " + str.toString() + rightSide); 753 return tagHistory->selectorText(" > " + str.toString() + rightSide);
763 case CSSSelector::ShadowAll: 754 case CSSSelector::ShadowAll:
764 return tagHistory->selectorText(" /shadow-all/ " + str.toString() + rightSide); 755 return tagHistory->selectorText(" /shadow-all/ " + str.toString() + rightSide);
765 case CSSSelector::ShadowDeep: 756 case CSSSelector::ShadowDeep:
766 return tagHistory->selectorText(" /shadow-deep/ " + str.toString() + rightSide); 757 return tagHistory->selectorText(" /shadow-deep/ " + str.toString() + rightSide);
767 case CSSSelector::DirectAdjacent: 758 case CSSSelector::DirectAdjacent:
768 return tagHistory->selectorText(" + " + str.toString() + rightSide); 759 return tagHistory->selectorText(" + " + str.toString() + rightSide);
769 case CSSSelector::IndirectAdjacent: 760 case CSSSelector::IndirectAdjacent:
770 return tagHistory->selectorText(" ~ " + str.toString() + rightSide); 761 return tagHistory->selectorText(" ~ " + str.toString() + rightSide);
771 case CSSSelector::SubSelector: 762 case CSSSelector::SubSelector:
772 ASSERT_NOT_REACHED(); 763 ASSERT_NOT_REACHED();
773 case CSSSelector::ShadowPseudo: 764 case CSSSelector::ShadowPseudo:
774 return tagHistory->selectorText(str.toString() + rightSide); 765 return tagHistory->selectorText(str.toString() + rightSide);
766 case CSSSelector::ShadowContent:
767 return tagHistory->selectorText(" /content/ " + str.toString() + rig htSide);
775 } 768 }
776 } 769 }
777 return str.toString() + rightSide; 770 return str.toString() + rightSide;
778 } 771 }
779 772
780 void CSSSelector::setAttribute(const QualifiedName& value) 773 void CSSSelector::setAttribute(const QualifiedName& value)
781 { 774 {
782 createRareData(); 775 createRareData();
783 m_data.m_rareData->m_attribute = value; 776 m_data.m_rareData->m_attribute = value;
784 } 777 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
945 return false; 938 return false;
946 return (count - m_b) % m_a == 0; 939 return (count - m_b) % m_a == 0;
947 } else { 940 } else {
948 if (count > m_b) 941 if (count > m_b)
949 return false; 942 return false;
950 return (m_b - count) % (-m_a) == 0; 943 return (m_b - count) % (-m_a) == 0;
951 } 944 }
952 } 945 }
953 946
954 } // namespace WebCore 947 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/css/CSSSelector.h ('k') | Source/core/css/CSSSelectorList.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698