diff options
Diffstat (limited to 'src/css.cc')
-rw-r--r-- | src/css.cc | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -130,6 +130,15 @@ void CssSelector::addSimpleSelector (Combinator c) { cs->selector = new CssSimpleSelector (); } +int CssSelector::specificity () { + int spec = 0; + + for (int i = 0; i < selectorList->size (); i++) + spec += selectorList->getRef (i)->selector->specificity (); + + return spec; +} + void CssSelector::print () { for (int i = 0; i < selectorList->size (); i++) { selectorList->getRef (i)->selector->print (); @@ -180,6 +189,23 @@ bool CssSimpleSelector::match (const DoctreeNode *n) { return true; } +int CssSimpleSelector::specificity () { + int spec = 0; + + if (id) + spec++; + spec <<= 10; + if (klass) + spec++; + if (pseudo) + spec++; + spec <<= 10; + if (element != ELEMENT_ANY) + spec++; + + return spec; +} + void CssSimpleSelector::print () { fprintf (stderr, "Element %d, class %s, pseudo %s, id %s ", element, klass, pseudo, id); |