summaryrefslogtreecommitdiffstats
path: root/WebCore/css/CSSSelector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/css/CSSSelector.cpp')
-rw-r--r--WebCore/css/CSSSelector.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/WebCore/css/CSSSelector.cpp b/WebCore/css/CSSSelector.cpp
index ee9c846..5add90b 100644
--- a/WebCore/css/CSSSelector.cpp
+++ b/WebCore/css/CSSSelector.cpp
@@ -424,13 +424,14 @@ CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString& name)
void CSSSelector::extractPseudoType() const
{
- if (m_match != PseudoClass && m_match != PseudoElement)
+ if (m_match != PseudoClass && m_match != PseudoElement && m_match != PagePseudoClass)
return;
m_pseudoType = parsePseudoType(m_value);
bool element = false; // pseudo-element
bool compat = false; // single colon compatbility mode
+ bool isPagePseudoClass = false; // Page pseudo-class
switch (m_pseudoType) {
case PseudoAfter:
@@ -529,12 +530,14 @@ void CSSSelector::extractPseudoType() const
case PseudoFirstPage:
case PseudoLeftPage:
case PseudoRightPage:
- // FIXME: These should only be allowed in @page rules. Disabled them altogether until that's implemented correctly.
- m_pseudoType = PseudoUnknown;
- return;
+ isPagePseudoClass = true;
+ break;
}
- if (m_match == PseudoClass && element) {
+ bool matchPagePseudoClass = (m_match == PagePseudoClass);
+ if (matchPagePseudoClass != isPagePseudoClass)
+ m_pseudoType = PseudoUnknown;
+ else if (m_match == PseudoClass && element) {
if (!compat)
m_pseudoType = PseudoUnknown;
else
@@ -586,7 +589,7 @@ String CSSSelector::selectorText() const
} else if (cs->m_match == CSSSelector::Class) {
str += ".";
str += cs->m_value;
- } else if (cs->m_match == CSSSelector::PseudoClass) {
+ } else if (cs->m_match == CSSSelector::PseudoClass || cs->m_match == CSSSelector::PagePseudoClass) {
str += ":";
str += cs->m_value;
if (cs->pseudoType() == PseudoNot) {