diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-01-30 20:29:56 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-01-30 20:29:56 +0100 |
commit | a59deba5ca4253f5ad7fe0d01988742c657afd76 (patch) | |
tree | 3593c071b9729597e91aa8c75f8dd39b9fa28375 /src/css.cc | |
parent | 827b17481f131da837c770ea006302f0283c662e (diff) |
add CssSelector::specificity()
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); |