visitObj($root); } public function visitRule( $ruleNode, &$visitDeeper ){ $visitDeeper = false; } public function visitMixinDefinition( $mixinDefinitionNode, &$visitDeeper ){ $visitDeeper = false; } public function visitRuleset( $rulesetNode ){ $paths = array(); if( !$rulesetNode->root ){ $selectors = array(); if( $rulesetNode->selectors && $rulesetNode->selectors ){ foreach($rulesetNode->selectors as $selector){ if( $selector->getIsOutput() ){ $selectors[] = $selector; } } } if( !$selectors ){ $rulesetNode->selectors = null; $rulesetNode->rules = null; }else{ $context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1]; $paths = $rulesetNode->joinSelectors( $context, $selectors); } $rulesetNode->paths = $paths; } $this->contexts[] = $paths; //different from less.js. Placed after joinSelectors() so that $this->contexts will get correct $paths } public function visitRulesetOut(){ array_pop($this->contexts); } public function visitMedia($mediaNode) { $context = end($this->contexts); //$context = $this->contexts[ count($this->contexts) - 1]; if( !count($context) || (is_object($context[0]) && $context[0]->multiMedia) ){ $mediaNode->rules[0]->root = true; } } }