summaryrefslogtreecommitdiff
path: root/src/css.cc
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-01-30 20:29:56 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2009-01-30 20:29:56 +0100
commita59deba5ca4253f5ad7fe0d01988742c657afd76 (patch)
tree3593c071b9729597e91aa8c75f8dd39b9fa28375 /src/css.cc
parent827b17481f131da837c770ea006302f0283c662e (diff)
add CssSelector::specificity()
Diffstat (limited to 'src/css.cc')
-rw-r--r--src/css.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/css.cc b/src/css.cc
index 77cd12a3..d13baefe 100644
--- a/src/css.cc
+++ b/src/css.cc
@@ -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);