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

Side by Side Diff: third_party/WebKit/Source/core/css/parser/CSSParserSelector.cpp

Issue 1574323003: Split compound selector after consume finished. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@upload-base
Patch Set: Removed obsolete serialization hack and fixed unit tests. Created 4 years, 11 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) 2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 // Example: 73 // Example:
74 // @namespace "http://www.w3.org/2000/svg"; 74 // @namespace "http://www.w3.org/2000/svg";
75 // svg:not(:root) { ... 75 // svg:not(:root) { ...
76 if (m_selector->tagQName().localName() == starAtom) 76 if (m_selector->tagQName().localName() == starAtom)
77 return m_tagHistory->isSimple(); 77 return m_tagHistory->isSimple();
78 } 78 }
79 79
80 return false; 80 return false;
81 } 81 }
82 82
83 void CSSParserSelector::insertTagHistory(CSSSelector::Relation before, PassOwnPt r<CSSParserSelector> selector, CSSSelector::Relation after)
84 {
85 if (m_tagHistory)
86 selector->setTagHistory(m_tagHistory.release());
87 setRelation(before);
88 selector->setRelation(after);
89 m_tagHistory = selector;
90 }
91
92 void CSSParserSelector::appendTagHistory(CSSSelector::Relation relation, PassOwn Ptr<CSSParserSelector> selector) 83 void CSSParserSelector::appendTagHistory(CSSSelector::Relation relation, PassOwn Ptr<CSSParserSelector> selector)
93 { 84 {
94 CSSParserSelector* end = this; 85 CSSParserSelector* end = this;
95 while (end->tagHistory()) 86 while (end->tagHistory())
96 end = end->tagHistory(); 87 end = end->tagHistory();
97 end->setRelation(relation); 88 end->setRelation(relation);
98 end->setTagHistory(selector); 89 end->setTagHistory(selector);
99 } 90 }
100 91
92 PassOwnPtr<CSSParserSelector> CSSParserSelector::releaseTagHistory()
93 {
94 setRelation(CSSSelector::SubSelector);
95 return m_tagHistory.release();
96 }
97
101 void CSSParserSelector::prependTagSelector(const QualifiedName& tagQName, bool i sImplicit) 98 void CSSParserSelector::prependTagSelector(const QualifiedName& tagQName, bool i sImplicit)
102 { 99 {
103 OwnPtr<CSSParserSelector> second = CSSParserSelector::create(); 100 OwnPtr<CSSParserSelector> second = CSSParserSelector::create();
104 second->m_selector = m_selector.release(); 101 second->m_selector = m_selector.release();
105 second->m_tagHistory = m_tagHistory.release(); 102 second->m_tagHistory = m_tagHistory.release();
106 m_tagHistory = second.release(); 103 m_tagHistory = second.release();
107 m_selector = adoptPtr(new CSSSelector(tagQName, isImplicit)); 104 m_selector = adoptPtr(new CSSSelector(tagQName, isImplicit));
108 } 105 }
109 106
110 bool CSSParserSelector::hasHostPseudoSelector() const 107 bool CSSParserSelector::isHostPseudoSelector() const
111 { 108 {
112 for (CSSParserSelector* selector = const_cast<CSSParserSelector*>(this); sel ector; selector = selector->tagHistory()) { 109 return pseudoType() == CSSSelector::PseudoHost || pseudoType() == CSSSelecto r::PseudoHostContext;
113 if (selector->pseudoType() == CSSSelector::PseudoHost || selector->pseud oType() == CSSSelector::PseudoHostContext)
114 return true;
115 }
116 return false;
117 } 110 }
118 111
119 } // namespace blink 112 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698