aboutsummaryrefslogtreecommitdiff
path: root/src/css.cc
diff options
context:
space:
mode:
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);