Example #1
0
 /**
  * Converts the ruleset to CSS.
  *
  * @param RulesetNode $ruleset
  * @param array $variables
  *
  * @return string The generated CSS code
  *
  * @throws
  */
 protected function toCSS(RulesetNode $ruleset, array $variables)
 {
     $precision = ini_set('precision', 16);
     $locale = setlocale(LC_NUMERIC, 0);
     setlocale(LC_NUMERIC, 'C');
     if (extension_loaded('xdebug')) {
         $level = ini_set('xdebug.max_nesting_level', PHP_INT_MAX);
     }
     $e = $css = null;
     try {
         $this->prepareVariables($this->context, $variables);
         // pre compilation visitors
         foreach ($this->getPreCompileVisitors() as $visitor) {
             /* @var $visitor Visitor */
             $visitor->run($ruleset);
         }
         // compile the ruleset
         $compiled = $ruleset->compile($this->context);
         // post compilation visitors
         foreach ($this->getPostCompileVisitors() as $visitor) {
             /* @var $visitor Visitor */
             $visitor->run($compiled);
         }
         $context = $this->getContext();
         $context->numPrecision = 8;
         // less.js compatibility
         if ($context->sourceMap) {
             $generator = new Generator($compiled, $this->context->getContentsMap(), $this->context->sourceMapOptions);
             // will also save file
             $css = $generator->generateCSS($this->context);
         } else {
             $generator = null;
             $css = $compiled->toCSS($this->context);
         }
         if ($this->pluginManager) {
             // post process
             $postProcessors = $this->pluginManager->getPostProcessors();
             foreach ($postProcessors as $postProcessor) {
                 /* @var $postProcessor PostProcessorInterface */
                 $css = $postProcessor->process($css, ['context' => $this->context, 'source_map' => $generator, 'importer' => $this->importer]);
             }
         }
         if ($this->context->compress) {
             $css = preg_replace('/(^(\\s)+)|((\\s)+$)/', '', $css);
         }
     } catch (\Exception $e) {
     }
     // restore
     setlocale(LC_NUMERIC, $locale);
     ini_set('precision', $precision);
     if (extension_loaded('xdebug')) {
         ini_set('xdebug.max_nesting_level', $level);
     }
     if ($e) {
         throw $e;
     }
     return $css;
 }