Changeset 178532 in webkit
- Timestamp:
- Jan 15, 2015 2:52:30 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r178527 r178532 1 2015-01-15 Dhi Aurrahman <diorahman@rockybars.com> 2 3 Canonicalization of :lang() should preserve the :lang()'s arguments representations 4 https://bugs.webkit.org/show_bug.cgi?id=139928 5 6 Reviewed by Benjamin Poulain. 7 8 * fast/css/css-lang-selector-with-string-arguments-text-expected.txt: Updated. 9 * fast/css/css-lang-selector-with-string-arguments-text.html: Updated. 10 1 11 2015-01-14 Alexey Proskuryakov <ap@apple.com> 2 12 -
trunk/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text-expected.txt
r177745 r178532 4 4 5 5 6 PASS parseThenSerializeRule(':lang("a") { }') is ':lang(a) { }' 7 PASS parseThenSerializeRule(':lang("bb", cc) { }') is ':lang(bb, cc) { }' 8 PASS parseThenSerializeRule(':lang("ddd", eee) { }') is ':lang(ddd, eee) { }' 9 PASS parseThenSerializeRule(':lang("*-1997") { }') is ':lang(*-1997) { }' 10 PASS parseThenSerializeRule(':lang("*-1997", "*-1998") { }') is ':lang(*-1997, *-1998) { }' 11 PASS parseThenSerializeRule(':lang("") { }') is ':lang() { }' 6 PASS parseThenSerializeRule(':lang("a") { }') is ':lang("a") { }' 7 PASS parseThenSerializeRule(':lang("bb", cc) { }') is ':lang("bb", cc) { }' 8 PASS parseThenSerializeRule(':lang("ddd", eee) { }') is ':lang("ddd", eee) { }' 9 PASS parseThenSerializeRule(':lang("ddd", eee, ffff) { }') is ':lang("ddd", eee, ffff) { }' 10 PASS parseThenSerializeRule(':lang("ddd", eee, "ffff") { }') is ':lang("ddd", eee, "ffff") { }' 11 PASS parseThenSerializeRule(':lang("*-1997") { }') is ':lang("*-1997") { }' 12 PASS parseThenSerializeRule(':lang("*-1997", "*-1998") { }') is ':lang("*-1997", "*-1998") { }' 13 PASS parseThenSerializeRule(':lang("*-1997", "*-1998", "*-1999") { }') is ':lang("*-1997", "*-1998", "*-1999") { }' 14 PASS parseThenSerializeRule(':lang("") { }') is ':lang("") { }' 15 16 PASS parseThenSerializeRule(':lang(foo, "bar", baz) { }') is ':lang(foo, "bar", baz) { }' 17 PASS parseThenSerializeRule(':lang(foo, "bar" , baz) { }') is ':lang(foo, "bar", baz) { }' 18 PASS parseThenSerializeRule(':lang( foo , "bar" , baz ) { }') is ':lang(foo, "bar", baz) { }' 12 19 PASS successfullyParsed is true 13 20 -
trunk/LayoutTests/fast/css/css-lang-selector-with-string-arguments-text.html
r177745 r178532 26 26 function testSelectorRoundTrip(selector) 27 27 { 28 var expected = selector.split('"').join(''); 29 shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + expected + " { }'"); 28 shouldBe("parseThenSerializeRule('" + selector + " { }')", "'" + selector + " { }'"); 30 29 } 31 30 … … 33 32 testSelectorRoundTrip(':lang("bb", cc)'); 34 33 testSelectorRoundTrip(':lang("ddd", eee)'); 34 testSelectorRoundTrip(':lang("ddd", eee, ffff)'); 35 testSelectorRoundTrip(':lang("ddd", eee, "ffff")'); 35 36 testSelectorRoundTrip(':lang("*-1997")'); 36 37 testSelectorRoundTrip(':lang("*-1997", "*-1998")'); 38 testSelectorRoundTrip(':lang("*-1997", "*-1998", "*-1999")'); 37 39 testSelectorRoundTrip(':lang("")'); 38 40 41 debug(''); 42 43 shouldBe("parseThenSerializeRule(':lang(foo, \"bar\", baz) { }')", "':lang(foo, \"bar\", baz) { }'"); 44 shouldBe("parseThenSerializeRule(':lang(foo, \"bar\" , baz) { }')", "':lang(foo, \"bar\", baz) { }'"); 45 shouldBe("parseThenSerializeRule(':lang( foo , \"bar\" , baz ) { }')", "':lang(foo, \"bar\", baz) { }'"); 39 46 </script> 40 47 <script src="../../resources/js-test-post.js"></script> -
trunk/Source/WebCore/ChangeLog
r178531 r178532 1 2015-01-15 Dhi Aurrahman <diorahman@rockybars.com> 2 3 Canonicalization of :lang() should preserve the :lang()'s arguments representations 4 https://bugs.webkit.org/show_bug.cgi?id=139928 5 6 Reviewed by Benjamin Poulain. 7 8 Preserve the representation of IDENT and STRING when serializing the 9 :lang(). For example, :lang(foo,"bar" ,baz) should be serialized as 10 :lang(foo, "bar", baz) instead of :lang(foo, bar, baz). 11 12 Rename CSSParserSelector::setArgumentList, CSSSelector::setArgumentList 13 and CSSSelector::argumentList to CSSParserSelector::setLangArgumentList, 14 CSSSelector::setLangArgumentList and CSSSelector::langArgumentList 15 respectively, since those methods are being exclusively used in respect 16 with :lang(). 17 18 Update the test of serializing :lang() with IDENT and STRING arguments. 19 20 * css/CSSGrammar.y.in: 21 * css/CSSParserValues.cpp: 22 (WebCore::CSSParserSelector::setLangArgumentList): 23 (WebCore::CSSParserSelector::setArgumentList): Deleted. 24 * css/CSSParserValues.h: 25 (WebCore::CSSParserString::init): 26 (WebCore::CSSParserString::clear): 27 (WebCore::CSSParserString::isParsedFromString): 28 (WebCore::CSSParserString::setParsedFromString): 29 * css/CSSSelector.cpp: 30 (WebCore::appendLangArgumentList): 31 (WebCore::CSSSelector::selectorText): 32 (WebCore::CSSSelector::setLangArgumentList): 33 (WebCore::appendArgumentList): Deleted. 34 (WebCore::CSSSelector::setArgumentList): Deleted. 35 * css/CSSSelector.h: 36 (WebCore::CSSSelector::langArgumentList): 37 (WebCore::CSSSelector::langArgumentParsedFromStringFlagList): 38 (WebCore::CSSSelector::argumentList): Deleted. 39 * css/SelectorChecker.cpp: 40 (WebCore::SelectorChecker::checkOne): 41 1 42 2015-01-15 Brent Fulgham <bfulgham@apple.com> 2 43 -
trunk/Source/WebCore/css/CSSGrammar.y.in
r177745 r178532 1105 1105 1106 1106 #if ENABLE_CSS_SELECTORS_LEVEL4 1107 lang_range: LANGRANGE | IDENT | STRING 1107 lang_range: LANGRANGE | IDENT | STRING { $1.setTokenType(TokenType::AtomicStringToken); $$ = $1; } ; 1108 1108 1109 1109 comma_separated_lang_ranges: … … 1398 1398 auto selector = std::make_unique<CSSParserSelector>(); 1399 1399 selector->setMatch(CSSSelector::PseudoClass); 1400 selector->set ArgumentList(*std::unique_ptr<Vector<CSSParserString>>($4));1400 selector->setLangArgumentList(*std::unique_ptr<Vector<CSSParserString>>($4)); 1401 1401 selector->setPseudoClassValue($2); 1402 1402 if (selector->pseudoClassType() == CSSSelector::PseudoClassLang) -
trunk/Source/WebCore/css/CSSParserValues.cpp
r177232 r178532 263 263 264 264 #if ENABLE(CSS_SELECTORS_LEVEL4) 265 void CSSParserSelector::set ArgumentList(Vector<CSSParserString>& stringVector)265 void CSSParserSelector::setLangArgumentList(const Vector<CSSParserString>& stringVector) 266 266 { 267 267 ASSERT_WITH_MESSAGE(!stringVector.isEmpty(), "No CSS Selector takes an empty argument list."); 268 auto argumentList = std::make_unique<Vector< AtomicString>>();268 auto argumentList = std::make_unique<Vector<LanguageArgument>>(); 269 269 argumentList->reserveInitialCapacity(stringVector.size()); 270 for (const AtomicString& argument : stringVector) 271 argumentList->append(argument); 272 m_selector->setArgumentList(WTF::move(argumentList)); 270 for (const CSSParserString& string : stringVector) { 271 LanguageArgument languageArgument; 272 languageArgument.languageRange = string; 273 languageArgument.tokenType = string.tokenType(); 274 argumentList->append(languageArgument); 275 } 276 m_selector->setLangArgumentList(WTF::move(argumentList)); 273 277 } 274 278 #endif -
trunk/Source/WebCore/css/CSSParserValues.h
r177232 r178532 76 76 void setLength(unsigned length) { m_length = length; } 77 77 78 #if ENABLE(CSS_SELECTORS_LEVEL4) 79 TokenType tokenType() const { return m_tokenType; } 80 void setTokenType(TokenType tokenType) { m_tokenType = tokenType; } 81 #endif 82 78 83 void lower(); 79 84 … … 102 107 unsigned m_length; 103 108 bool m_is8Bit; 109 #if ENABLE(CSS_SELECTORS_LEVEL4) 110 TokenType m_tokenType; 111 #endif 104 112 }; 105 113 … … 203 211 void adoptSelectorVector(Vector<std::unique_ptr<CSSParserSelector>>& selectorVector); 204 212 #if ENABLE(CSS_SELECTORS_LEVEL4) 205 void set ArgumentList(Vector<CSSParserString>& stringVector);213 void setLangArgumentList(const Vector<CSSParserString>& stringVector); 206 214 #endif 207 215 -
trunk/Source/WebCore/css/CSSSelector.cpp
r177313 r178532 347 347 348 348 #if ENABLE(CSS_SELECTORS_LEVEL4) 349 static void append ArgumentList(StringBuilder& str, const Vector<AtomicString>& argumentList)349 static void appendLangArgumentList(StringBuilder& str, const Vector<LanguageArgument>& argumentList) 350 350 { 351 351 unsigned argumentListSize = argumentList.size(); 352 352 for (unsigned i = 0; i < argumentListSize; ++i) { 353 str.append(argumentList[i]); 353 const LanguageArgument& argument = argumentList[i]; 354 bool isAtomicStringToken = argument.tokenType == TokenType::AtomicStringToken; 355 if (isAtomicStringToken) 356 str.append('"'); 357 str.append(argument.languageRange); 358 if (isAtomicStringToken) 359 str.append('"'); 354 360 if (i != argumentListSize - 1) 355 361 str.appendLiteral(", "); … … 492 498 str.appendLiteral(":lang("); 493 499 #if ENABLE(CSS_SELECTORS_LEVEL4) 494 ASSERT_WITH_MESSAGE(cs-> argumentList() && !cs->argumentList()->isEmpty(), "An empty :lang() is invalid and should never be generated by the parser.");495 append ArgumentList(str, *cs->argumentList());500 ASSERT_WITH_MESSAGE(cs->langArgumentList() && !cs->langArgumentList()->isEmpty(), "An empty :lang() is invalid and should never be generated by the parser."); 501 appendLangArgumentList(str, *cs->langArgumentList()); 496 502 str.append(')'); 497 503 #else … … 709 715 710 716 #if ENABLE(CSS_SELECTORS_LEVEL4) 711 void CSSSelector::set ArgumentList(std::unique_ptr<Vector<AtomicString>> argumentList)717 void CSSSelector::setLangArgumentList(std::unique_ptr<Vector<LanguageArgument>> argumentList) 712 718 { 713 719 createRareData(); 714 m_data.m_rareData->m_ argumentList = WTF::move(argumentList);720 m_data.m_rareData->m_langArgumentList = WTF::move(argumentList); 715 721 } 716 722 #endif -
trunk/Source/WebCore/css/CSSSelector.h
r176545 r178532 30 30 class CSSSelectorList; 31 31 32 #if ENABLE(CSS_SELECTORS_LEVEL4) 33 enum class TokenType { 34 IdentifierToken = 0, 35 AtomicStringToken 36 }; 37 38 struct LanguageArgument { 39 AtomicString languageRange; 40 TokenType tokenType; 41 }; 42 #endif 32 43 enum class SelectorSpecificityIncrement { 33 44 ClassA = 0x10000, … … 223 234 const AtomicString& argument() const { return m_hasRareData ? m_data.m_rareData->m_argument : nullAtom; } 224 235 #if ENABLE(CSS_SELECTORS_LEVEL4) 225 const Vector< AtomicString>* argumentList() const { return m_hasRareData ? m_data.m_rareData->m_argumentList.get() : nullptr; }236 const Vector<LanguageArgument>* langArgumentList() const { return m_hasRareData ? m_data.m_rareData->m_langArgumentList.get() : nullptr; } 226 237 #endif 227 238 const CSSSelectorList* selectorList() const { return m_hasRareData ? m_data.m_rareData->m_selectorList.get() : nullptr; } … … 231 242 void setArgument(const AtomicString&); 232 243 #if ENABLE(CSS_SELECTORS_LEVEL4) 233 void set ArgumentList(std::unique_ptr<Vector<AtomicString>>);244 void setLangArgumentList(std::unique_ptr<Vector<LanguageArgument>>); 234 245 #endif 235 246 void setSelectorList(std::unique_ptr<CSSSelectorList>); … … 331 342 AtomicString m_argument; // Used for :contains and :nth-* 332 343 #if ENABLE(CSS_SELECTORS_LEVEL4) 333 std::unique_ptr<Vector< AtomicString>> m_argumentList;344 std::unique_ptr<Vector<LanguageArgument>> m_langArgumentList; 334 345 #endif 335 346 std::unique_ptr<CSSSelectorList> m_selectorList; // Used for :-webkit-any and :not -
trunk/Source/WebCore/css/SelectorChecker.cpp
r177925 r178532 936 936 { 937 937 #if ENABLE(CSS_SELECTORS_LEVEL4) 938 ASSERT(selector-> argumentList() && !selector->argumentList()->isEmpty());939 return matchesLangPseudoClass(element, *selector-> argumentList());938 ASSERT(selector->langArgumentList() && !selector->langArgumentList()->isEmpty()); 939 return matchesLangPseudoClass(element, *selector->langArgumentList()); 940 940 #else 941 941 const AtomicString& argument = selector->argument(); -
trunk/Source/WebCore/css/SelectorCheckerTestFunctions.h
r178198 r178532 147 147 } 148 148 149 inline bool matchesLangPseudoClass(const Element* element, const Vector< AtomicString>& ranges)149 inline bool matchesLangPseudoClass(const Element* element, const Vector<LanguageArgument>& argumentList) 150 150 { 151 151 ASSERT(element); … … 162 162 return false; 163 163 164 // Implement basic and extended filterings of given language tags 164 // Implement basic and extended filterings of given language tags 165 165 // as specified in www.ietf.org/rfc/rfc4647.txt. 166 166 Vector<String> rangeSubtags; … … 169 169 language.string().split('-', true, languageSubtags); 170 170 171 for (const AtomicString& range : ranges) { 171 for (const LanguageArgument& argument : argumentList) { 172 const AtomicString& range = argument.languageRange; 172 173 if (range.isEmpty()) 173 174 continue;
Note: See TracChangeset
for help on using the changeset viewer.