From 74a8390c5ffbcf41bf1361d4e13ec2d85a021d33 Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Mon, 1 Dec 2008 21:56:23 +0100 Subject: streamline CssSelector a bit --- src/css.cc | 50 ++++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) (limited to 'src/css.cc') diff --git a/src/css.cc b/src/css.cc index 865cb5d1..5f2db15a 100644 --- a/src/css.cc +++ b/src/css.cc @@ -48,9 +48,9 @@ void CssPropertyList::print () { CssSelector::CssSelector (int element, const char *klass, const char *pseudo, const char *id) { refCount = 0; - combinator = NULL; - simpleSelector = new lout::misc::SimpleVector (1); - simpleSelector->increase (); + selectorList = new lout::misc::SimpleVector + (1); + selectorList->increase (); top ()->element = element; top ()->klass = klass; top ()->pseudo = pseudo; @@ -62,18 +62,16 @@ bool CssSelector::match (Doctree *docTree) { Combinator comb; const DoctreeNode *node = docTree->top (); - assert (simpleSelector->size () > 0); - assert ((combinator == NULL && simpleSelector->size () == 1) || - combinator->size () == simpleSelector->size () - 1); + assert (selectorList->size () > 0); sel = top (); if (! sel->match (node)) return false; - for (int i = simpleSelector->size () - 2; i >= 0; i--) { - sel = simpleSelector->getRef (i); - comb = combinator->get (i); + for (int i = selectorList->size () - 2; i >= 0; i--) { + sel = &selectorList->getRef (i)->selector; + comb = selectorList->getRef (i + 1)->combinator; node = docTree->parent (node); if (node == NULL) @@ -102,12 +100,9 @@ bool CssSelector::match (Doctree *docTree) { void CssSelector::addSimpleSelector (Combinator c, int element, const char *klass, const char *pseudo, const char *id) { - simpleSelector->increase (); - if (combinator == NULL) - combinator = new lout::misc::SimpleVector (1); - combinator->increase (); + selectorList->increase (); - *combinator->getRef (combinator->size () - 1) = c; + selectorList->getRef (selectorList->size () - 1)->combinator = c; top ()->element = element; top ()->klass = klass; top ()->pseudo = pseudo; @@ -116,18 +111,21 @@ void CssSelector::addSimpleSelector (Combinator c, int element, } void CssSelector::print () { - for (int i = 0; i < simpleSelector->size () - 1; i++) { - simpleSelector->getRef (i)->print (); - switch (combinator->get (i)) { - case CHILD: - fprintf (stderr, ">"); - break; - case DESCENDENT: - fprintf (stderr, " "); - break; - default: - fprintf (stderr, "?"); - break; + for (int i = 0; i < selectorList->size () - 1; i++) { + selectorList->getRef (i)->selector.print (); + + if (i < selectorList->size () - 2) { + switch (selectorList->getRef (i)->combinator) { + case CHILD: + fprintf (stderr, ">"); + break; + case DESCENDENT: + fprintf (stderr, " "); + break; + default: + fprintf (stderr, "?"); + break; + } } } -- cgit v1.2.3