Beispiel #1
0
 /**
  * Format arguments to be used for exception message.
  *
  * @param array $args
  *
  * @return string
  */
 private function formatArgs($args)
 {
     $context = new Context();
     $message = $argsFormatted = [];
     $message[] = trim($this->selector->toCSS($context));
     if ($args) {
         $message[] = '(';
         foreach ($args as $a) {
             $argValue = '';
             if (isset($a['name'])) {
                 $argValue .= $a['name'] . ':';
             }
             if ($a['value'] instanceof GenerateCSSInterface) {
                 $argValue .= $a['value']->toCSS($context);
             } else {
                 $argValue .= '???';
             }
             $argsFormatted[] = $argValue;
         }
         $message[] = implode(', ', $argsFormatted);
         $message[] = ')';
     }
     return implode('', $message);
 }
Beispiel #2
0
 /**
  * Finds a selector.
  *
  * @param SelectorNode $selector
  * @param RulesetNode $self
  * @param Context $context
  * @param mixed $filter
  *
  * @return array
  */
 public function find(SelectorNode $selector, Context $context, RulesetNode $self = null, $filter = null)
 {
     $key = $selector->toCSS($context);
     if (!$self) {
         $self = $this;
     }
     if (!array_key_exists($key, $this->lookups)) {
         $rules = [];
         foreach ($this->rulesets() as $rule) {
             if ($rule === $self) {
                 continue;
             }
             foreach ($rule->selectors as $ruleSelector) {
                 /* @var $ruleSelector SelectorNode */
                 $match = $selector->match($ruleSelector);
                 if ($match) {
                     if (count($selector->elements) > $match) {
                         if (!$filter || call_user_func($filter, $rule)) {
                             /* @var $rule RulesetNode */
                             $foundMixins = $rule->find(new SelectorNode(array_slice($selector->elements, $match)), $context, $self, $filter);
                             for ($i = 0; $i < count($foundMixins); ++$i) {
                                 array_push($foundMixins[$i]['path'], $rule);
                             }
                             $rules = array_merge($rules, $foundMixins);
                         }
                     } else {
                         $rules[] = ['rule' => $rule, 'path' => []];
                     }
                     break;
                 }
             }
         }
         $this->lookups[$key] = $rules;
     }
     return $this->lookups[$key];
 }