OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |