/**
  * Gets the relevant style rules from a media rule
  *
  * @param  \Crossjoin\Css\Format\Rule\AtMedia\MediaRule  $rule
  * @param  array                                         &$collection
  * @return void
  */
 protected function getRelevantMediaRule(MediaRule $rule, &$collection)
 {
     foreach ($rule->getQueries() as $media_query) {
         if (!$this->isAllowedMediaRule($media_query)) {
             continue;
         }
         foreach ($this->getRelevantStyleRules($rule->getRules()) as $style_rule) {
             $collection[] = $style_rule;
         }
         break;
     }
 }
예제 #2
0
 /**
  * Parses the import rule.
  *
  * @param string $ruleString
  */
 protected function parseRuleString($ruleString)
 {
     $charset = $this->getCharset();
     // Remove at-rule and unnecessary white-spaces
     $ruleString = preg_replace('/^[ \\r\\n\\t\\f]*@import[ \\r\\n\\t\\f]+/i', '', $ruleString);
     $ruleString = trim($ruleString, " \r\n\t\f");
     // Remove trailing semicolon
     $ruleString = rtrim($ruleString, ";");
     $isEscaped = false;
     $inFunction = false;
     $url = "";
     $mediaQuery = "";
     $currentPart = "";
     for ($i = 0, $j = mb_strlen($ruleString, $charset); $i < $j; $i++) {
         $char = mb_substr($ruleString, $i, 1, $charset);
         if ($char === "\\") {
             if ($isEscaped === false) {
                 $isEscaped = true;
             } else {
                 $isEscaped = false;
             }
         } else {
             if ($char === " ") {
                 if ($isEscaped === false) {
                     if ($inFunction == false) {
                         $currentPart = trim($currentPart, " \r\n\t\f");
                         if ($currentPart !== "") {
                             if ($url === "") {
                                 $url = trim($currentPart, " \r\n\t\f");
                             } else {
                                 $mediaQuery .= trim($currentPart, " \r\n\t\f");
                                 $mediaQuery .= $char;
                             }
                             $currentPart = "";
                         }
                     }
                 } else {
                     $currentPart .= $char;
                 }
             } elseif ($isEscaped === false && $char === "(") {
                 $inFunction = true;
                 $currentPart .= $char;
             } elseif ($isEscaped === false && $char === ")") {
                 $inFunction = false;
                 $currentPart .= $char;
             } else {
                 $currentPart .= $char;
             }
         }
         // Reset escaped flag
         if ($isEscaped === true && $char !== "\\") {
             $isEscaped = false;
         }
     }
     if ($currentPart !== "") {
         $currentPart = trim($currentPart, " \r\n\t\f");
         if ($currentPart !== "") {
             if ($url === "") {
                 $url = trim($currentPart, " \r\n\t\f");
             } else {
                 $mediaQuery .= trim($currentPart, " \r\n\t\f");
             }
         }
     }
     // Get URL value
     $url = Url::extractUrl($url);
     $this->setUrl($url);
     // Process media query
     $mediaRule = new MediaRule($mediaQuery);
     $this->setQueries($mediaRule->getQueries());
 }