diff options
author | Ben Murdoch <benm@google.com> | 2011-05-13 16:23:25 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-05-16 11:35:02 +0100 |
commit | 65f03d4f644ce73618e5f4f50dd694b26f55ae12 (patch) | |
tree | f478babb801e720de7bfaee23443ffe029f58731 /Source/WebCore/css/CSSGrammar.y | |
parent | 47de4a2fb7262c7ebdb9cd133ad2c54c187454d0 (diff) | |
download | external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.zip external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.gz external_webkit-65f03d4f644ce73618e5f4f50dd694b26f55ae12.tar.bz2 |
Merge WebKit at r75993: Initial merge by git.
Change-Id: I602bbdc3974787a3b0450456a30a7868286921c3
Diffstat (limited to 'Source/WebCore/css/CSSGrammar.y')
-rw-r--r-- | Source/WebCore/css/CSSGrammar.y | 52 |
1 files changed, 22 insertions, 30 deletions
diff --git a/Source/WebCore/css/CSSGrammar.y b/Source/WebCore/css/CSSGrammar.y index ba5855d..a5fe795 100644 --- a/Source/WebCore/css/CSSGrammar.y +++ b/Source/WebCore/css/CSSGrammar.y @@ -901,16 +901,13 @@ simple_selector: } | element_name specifier_list { $$ = $2; - if ($$) { - CSSParser* p = static_cast<CSSParser*>(parser); - $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace); - } + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName(nullAtom, $1, $$); } | specifier_list { $$ = $1; - CSSParser* p = static_cast<CSSParser*>(parser); - if ($$ && p->m_defaultNamespace != starAtom) - $$->m_tag = QualifiedName(nullAtom, starAtom, p->m_defaultNamespace); + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName(nullAtom, starAtom, $$); } | namespace_selector element_name { AtomicString namespacePrefix = $1; @@ -924,25 +921,13 @@ simple_selector: } | namespace_selector element_name specifier_list { $$ = $3; - if ($$) { - AtomicString namespacePrefix = $1; - CSSParser* p = static_cast<CSSParser*>(parser); - if (p->m_styleSheet) - $$->m_tag = QualifiedName(namespacePrefix, $2, - p->m_styleSheet->determineNamespace(namespacePrefix)); - else // FIXME: Shouldn't this case be an error? - $$->m_tag = QualifiedName(nullAtom, $2, p->m_defaultNamespace); - } + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName($1, $2, $$); } | namespace_selector specifier_list { $$ = $2; - if ($$) { - AtomicString namespacePrefix = $1; - CSSParser* p = static_cast<CSSParser*>(parser); - if (p->m_styleSheet) - $$->m_tag = QualifiedName(namespacePrefix, starAtom, - p->m_styleSheet->determineNamespace(namespacePrefix)); - } + if ($$) + static_cast<CSSParser*>(parser)->updateSpecifiersWithElementName($1, starAtom, $$); } ; @@ -970,13 +955,22 @@ specifier_list: if (!$2) $$ = 0; else if ($1) { - $$ = $1; CSSParser* p = static_cast<CSSParser*>(parser); - CSSSelector* end = $1; - while (end->tagHistory()) + CSSSelector* end; + CSSSelector* history; + // Ensure that unknown pseudo element always stays at the top of selector chain. + if ($2->isUnknownPseudoElement()) { + end = $2; + history = $1; + } else { + end = $1; + history = $2; + } + $$ = end; + while(end->tagHistory()) end = end->tagHistory(); end->m_relation = CSSSelector::SubSelector; - end->setTagHistory(p->sinkFloatingSelector($2)); + end->setTagHistory(p->sinkFloatingSelector(history)); } } | specifier_list error { @@ -1141,9 +1135,7 @@ pseudo: $3.lower(); $$->m_value = $3; CSSSelector::PseudoType type = $$->pseudoType(); - if (type == CSSSelector::PseudoUnknown) - $$ = 0; - else if (type == CSSSelector::PseudoFirstLine) { + if (type == CSSSelector::PseudoFirstLine) { CSSParser* p = static_cast<CSSParser*>(parser); if (Document* doc = p->document()) doc->setUsesFirstLineRules(true); |