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

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

Issue 205563004: Revert of Implement /content/ combinator. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed patch conflict 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:
255 case PseudoHost: 256 case PseudoHost:
256 case PseudoAncestor: 257 case PseudoAncestor:
257 case PseudoFullScreen: 258 case PseudoFullScreen:
258 case PseudoFullScreenDocument: 259 case PseudoFullScreenDocument:
259 case PseudoFullScreenAncestor: 260 case PseudoFullScreenAncestor:
260 return NOPSEUDO; 261 return NOPSEUDO;
261 case PseudoNotParsed: 262 case PseudoNotParsed:
262 ASSERT_NOT_REACHED(); 263 ASSERT_NOT_REACHED();
263 return NOPSEUDO; 264 return NOPSEUDO;
264 } 265 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 {"past", CSSSelector::PseudoPastCue, 0}, 350 {"past", CSSSelector::PseudoPastCue, 0},
350 {"-webkit-distributed(", CSSSelector::PseudoDistributed, 0}, 351 {"-webkit-distributed(", CSSSelector::PseudoDistributed, 0},
351 {"in-range", CSSSelector::PseudoInRange, 0}, 352 {"in-range", CSSSelector::PseudoInRange, 0},
352 {"out-of-range", CSSSelector::PseudoOutOfRange, 0}, 353 {"out-of-range", CSSSelector::PseudoOutOfRange, 0},
353 {"scope", CSSSelector::PseudoScope, 0}, 354 {"scope", CSSSelector::PseudoScope, 0},
354 {"unresolved", CSSSelector::PseudoUnresolved, 0}, 355 {"unresolved", CSSSelector::PseudoUnresolved, 0},
355 {"host", CSSSelector::PseudoHost, CSSSel ector::RequiresShadowDOM}, 356 {"host", CSSSelector::PseudoHost, CSSSel ector::RequiresShadowDOM},
356 {"host(", CSSSelector::PseudoHost, CSSSel ector::RequiresShadowDOM}, 357 {"host(", CSSSelector::PseudoHost, CSSSel ector::RequiresShadowDOM},
357 {"ancestor", CSSSelector::PseudoAncestor, CSSSel ector::RequiresShadowDOM}, 358 {"ancestor", CSSSelector::PseudoAncestor, CSSSel ector::RequiresShadowDOM},
358 {"ancestor(", CSSSelector::PseudoAncestor, CSSSel ector::RequiresShadowDOM}, 359 {"ancestor(", CSSSelector::PseudoAncestor, CSSSel ector::RequiresShadowDOM},
360 {"content", CSSSelector::PseudoContent, CSSSel ector::RequiresShadowDOM},
359 }; 361 };
360 362
361 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap() 363 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoTypeMap()
362 { 364 {
363 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0; 365 static HashMap<StringImpl*, CSSSelector::PseudoType>* nameToPseudoType = 0;
364 if (!nameToPseudoType) { 366 if (!nameToPseudoType) {
365 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>; 367 nameToPseudoType = new HashMap<StringImpl*, CSSSelector::PseudoType>;
366 368
367 size_t pseudoCount = WTF_ARRAY_LENGTH(pseudoTypeMap); 369 size_t pseudoCount = WTF_ARRAY_LENGTH(pseudoTypeMap);
368 for (size_t i = 0; i < pseudoCount; i++) { 370 for (size_t i = 0; i < pseudoCount; i++) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 case PseudoResizer: 456 case PseudoResizer:
455 case PseudoScrollbar: 457 case PseudoScrollbar:
456 case PseudoScrollbarCorner: 458 case PseudoScrollbarCorner:
457 case PseudoScrollbarButton: 459 case PseudoScrollbarButton:
458 case PseudoScrollbarThumb: 460 case PseudoScrollbarThumb:
459 case PseudoScrollbarTrack: 461 case PseudoScrollbarTrack:
460 case PseudoScrollbarTrackPiece: 462 case PseudoScrollbarTrackPiece:
461 case PseudoSelection: 463 case PseudoSelection:
462 case PseudoUserAgentCustomElement: 464 case PseudoUserAgentCustomElement:
463 case PseudoWebKitCustomElement: 465 case PseudoWebKitCustomElement:
466 case PseudoContent:
464 element = true; 467 element = true;
465 break; 468 break;
466 case PseudoUnknown: 469 case PseudoUnknown:
467 case PseudoEmpty: 470 case PseudoEmpty:
468 case PseudoFirstChild: 471 case PseudoFirstChild:
469 case PseudoFirstOfType: 472 case PseudoFirstOfType:
470 case PseudoLastChild: 473 case PseudoLastChild:
471 case PseudoLastOfType: 474 case PseudoLastOfType:
472 case PseudoOnlyChild: 475 case PseudoOnlyChild:
473 case PseudoOnlyOfType: 476 case PseudoOnlyOfType:
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 str.append(')'); 638 str.append(')');
636 } 639 }
637 break; 640 break;
638 } 641 }
639 default: 642 default:
640 break; 643 break;
641 } 644 }
642 } else if (cs->m_match == CSSSelector::PseudoElement) { 645 } else if (cs->m_match == CSSSelector::PseudoElement) {
643 str.appendLiteral("::"); 646 str.appendLiteral("::");
644 str.append(cs->value()); 647 str.append(cs->value());
648
649 if (cs->pseudoType() == PseudoContent) {
650 if (cs->relation() == CSSSelector::SubSelector && cs->tagHistory ())
651 return cs->tagHistory()->selectorText() + str.toString() + r ightSide;
652 }
645 } else if (cs->isAttributeSelector()) { 653 } else if (cs->isAttributeSelector()) {
646 str.append('['); 654 str.append('[');
647 const AtomicString& prefix = cs->attribute().prefix(); 655 const AtomicString& prefix = cs->attribute().prefix();
648 if (!prefix.isNull()) { 656 if (!prefix.isNull()) {
649 str.append(prefix); 657 str.append(prefix);
650 str.append("|"); 658 str.append("|");
651 } 659 }
652 str.append(cs->attribute().localName()); 660 str.append(cs->attribute().localName());
653 switch (cs->m_match) { 661 switch (cs->m_match) {
654 case CSSSelector::Exact: 662 case CSSSelector::Exact:
(...skipping 27 matching lines...) Expand all
682 } 690 }
683 } 691 }
684 if (cs->relation() != CSSSelector::SubSelector || !cs->tagHistory()) 692 if (cs->relation() != CSSSelector::SubSelector || !cs->tagHistory())
685 break; 693 break;
686 cs = cs->tagHistory(); 694 cs = cs->tagHistory();
687 } 695 }
688 696
689 if (const CSSSelector* tagHistory = cs->tagHistory()) { 697 if (const CSSSelector* tagHistory = cs->tagHistory()) {
690 switch (cs->relation()) { 698 switch (cs->relation()) {
691 case CSSSelector::Descendant: 699 case CSSSelector::Descendant:
692 if (cs->relationIsAffectedByPseudoContent()) 700 if (cs->relationIsAffectedByPseudoContent() && tagHistory->pseudoTyp e() != CSSSelector::PseudoContent)
693 return tagHistory->selectorText("::-webkit-distributed(" + str.t oString() + rightSide + ")"); 701 return tagHistory->selectorText("::-webkit-distributed(" + str.t oString() + rightSide + ")");
694 return tagHistory->selectorText(" " + str.toString() + rightSide); 702 return tagHistory->selectorText(" " + str.toString() + rightSide);
695 case CSSSelector::Child: 703 case CSSSelector::Child:
696 if (cs->relationIsAffectedByPseudoContent()) 704 if (cs->relationIsAffectedByPseudoContent() && tagHistory->pseudoTyp e() != CSSSelector::PseudoContent)
697 return tagHistory->selectorText("::-webkit-distributed(> " + str .toString() + rightSide + ")"); 705 return tagHistory->selectorText("::-webkit-distributed(> " + str .toString() + rightSide + ")");
698 return tagHistory->selectorText(" > " + str.toString() + rightSide); 706 return tagHistory->selectorText(" > " + str.toString() + rightSide);
699 case CSSSelector::Shadow: 707 case CSSSelector::Shadow:
700 return tagHistory->selectorText(" /shadow/ " + str.toString() + righ tSide); 708 return tagHistory->selectorText(" /shadow/ " + str.toString() + righ tSide);
701 case CSSSelector::ShadowDeep: 709 case CSSSelector::ShadowDeep:
702 return tagHistory->selectorText(" /shadow-deep/ " + str.toString() + rightSide); 710 return tagHistory->selectorText(" /shadow-deep/ " + str.toString() + rightSide);
703 case CSSSelector::DirectAdjacent: 711 case CSSSelector::DirectAdjacent:
704 return tagHistory->selectorText(" + " + str.toString() + rightSide); 712 return tagHistory->selectorText(" + " + str.toString() + rightSide);
705 case CSSSelector::IndirectAdjacent: 713 case CSSSelector::IndirectAdjacent:
706 return tagHistory->selectorText(" ~ " + str.toString() + rightSide); 714 return tagHistory->selectorText(" ~ " + str.toString() + rightSide);
707 case CSSSelector::SubSelector: 715 case CSSSelector::SubSelector:
708 ASSERT_NOT_REACHED(); 716 ASSERT_NOT_REACHED();
709 case CSSSelector::ShadowPseudo: 717 case CSSSelector::ShadowPseudo:
710 return tagHistory->selectorText(str.toString() + rightSide); 718 return tagHistory->selectorText(str.toString() + rightSide);
711 case CSSSelector::ShadowContent:
712 return tagHistory->selectorText(" /content/ " + str.toString() + rig htSide);
713 } 719 }
714 } 720 }
715 return str.toString() + rightSide; 721 return str.toString() + rightSide;
716 } 722 }
717 723
718 void CSSSelector::setAttribute(const QualifiedName& value) 724 void CSSSelector::setAttribute(const QualifiedName& value)
719 { 725 {
720 createRareData(); 726 createRareData();
721 m_data.m_rareData->m_attribute = value; 727 m_data.m_rareData->m_attribute = value;
722 } 728 }
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 return false; 889 return false;
884 return (count - m_b) % m_a == 0; 890 return (count - m_b) % m_a == 0;
885 } else { 891 } else {
886 if (count > m_b) 892 if (count > m_b)
887 return false; 893 return false;
888 return (m_b - count) % (-m_a) == 0; 894 return (m_b - count) % (-m_a) == 0;
889 } 895 }
890 } 896 }
891 897
892 } // namespace WebCore 898 } // 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