/** * Filters an asset after it has been loaded. * * @param \Assetic\Asset\AssetInterface $asset * @return void */ public function filterLoad(AssetInterface $asset) { $max_nesting_level = ini_get('xdebug.max_nesting_level'); $memory_limit = ini_get('memory_limit'); if ($max_nesting_level && $max_nesting_level < 200) { ini_set('xdebug.max_nesting_level', 200); } if ($memory_limit && $memory_limit < 256) { ini_set('memory_limit', '256M'); } $root = $asset->getSourceRoot(); $path = $asset->getSourcePath(); $dirs = array(); $lc = new \Less_Parser(array('compress' => true)); if ($root && $path) { $dirs[] = dirname($root . '/' . $path); } foreach ($this->loadPaths as $loadPath) { $dirs[] = $loadPath; } $lc->SetImportDirs($dirs); $url = parse_url($this->getRequest()->getUriForPath('')); $absolutePath = str_replace(public_path(), '', $root); if (isset($url['path'])) { $absolutePath = $url['path'] . $absolutePath; } $lc->parseFile($root . '/' . $path, $absolutePath); $asset->setContent($lc->getCss()); }
/** * @param string $sourceFilePath * @return string */ public function process($sourceFilePath) { $options = ['relativeUrls' => false, 'compress' => $this->appState->getMode() !== State::MODE_DEVELOPER]; try { $parser = new \Less_Parser($options); $parser->parseFile($sourceFilePath, ''); return $parser->getCss(); } catch (\Exception $e) { $messagePrefix = 'CSS compilation from LESS '; $this->logger->critical($messagePrefix . $e->getMessage()); return $messagePrefix . $e->getMessage(); } }
/** * {@inheritdoc} */ protected function _compile($fullPath, $relPath) { $this->_initCompiler(); $this->_compiler->parseFile($fullPath, $relPath); $resultCss = $this->_compiler->getCss(); return $resultCss; }
/** * @param string $path * @return string */ protected function _compile($path) { try { $this->_processor->parseFile($path, $this->_tpl->less); $resultCss = $this->_processor->getCss(); return $resultCss; } catch (Exception $ex) { die('<strong>Less Error (JBlank):</strong><br/><pre>' . $ex->getMessage() . '</pre>'); } }
/** * Parse given css file with given vars. * * @param string $file * @param array $vars * * @return string */ public function parse($file, array $vars, $custom) { $this->parser->parseFile($this->app['base_dir'] . '/assets/less/vendor/bootstrap/' . $file . '.less', $this->app['base_url']); $this->parser->modifyVars($vars); $css = $this->parser->getCss(); //parse custom less if any passed if ($custom) { $this->parser->reset(); $customCss = $this->parser->parse($custom)->getCss(); } else { $customCss = ''; } return $css . $customCss; }
/** * Make a css file compiled from the LESS files collection * * @param array $lessFiles LESS files structures array * * @return array */ public function makeCSS($lessFiles) { $file = $this->makeLESSResourcePath($lessFiles); $path = $this->getCSSResource($lessFiles); $url = $this->getCSSResourceURL($path); $data = array('file' => $path, 'media' => 'screen', 'url' => $url); if ($this->needToCompileLessResource($lessFiles)) { try { $originalPath = $this->getCSSResource($lessFiles, true); if ($path != $originalPath && $this->getLESSResourceHash($lessFiles, true) && $this->getLESSResourceHash($lessFiles, true) == $this->calcLESSResourceHash($lessFiles) && \Includes\Utils\FileManager::isFileReadable($originalPath)) { $content = \Includes\Utils\FileManager::read($originalPath); } else { // Need recreate parser for every parseFile $this->parser = new \Less_Parser($this->getLessParserOptions()); $this->parser->parseFile($file, ''); $this->parser->ModifyVars($this->getModifiedLESSVars($data)); $content = $this->prepareLESSContent($this->parser->getCss(), $path, $data); $this->setLESSResourceHash($lessFiles); } \Includes\Utils\FileManager::mkdirRecursive(dirname($path)); \Includes\Utils\FileManager::write($path, $content); } catch (\Exception $e) { \XLite\Logger::getInstance()->registerException($e); $data = null; } } return $data; }
/** * Compare the parser results with the expected css * */ function CompareFile($expected_file) { $less_file = $this->TranslateFile($expected_file); $expected_css = trim(file_get_contents($expected_file)); // Check with standard parser echo "\n " . basename($expected_file); echo "\n - Standard Compiler"; $parser = new Less_Parser(); $parser->parseFile($less_file); $css = $parser->getCss(); $css = trim($css); $this->assertEquals($expected_css, $css); // Check with cache if ($this->cache_dir) { $options = array('cache_dir' => $this->cache_dir); $files = array($less_file => ''); echo "\n - Regenerating Cache"; $css_file_name = Less_Cache::Regen($files, $options); $css = file_get_contents($this->cache_dir . '/' . $css_file_name); $css = trim($css); $this->assertEquals($expected_css, $css); // Check using the cached data echo "\n - Using Cache"; $css_file_name = Less_Cache::Get($files, $options); $css = file_get_contents($this->cache_dir . '/' . $css_file_name); $css = trim($css); $this->assertEquals($expected_css, $css); } }
function CssPreprocessor($content, $type) { if ($type == 'css') { } else { if ($type == 'less') { try { $parser = new Less_Parser(); $parser->parse($content); $content = $parser->getCss(); } catch (Exception $e) { var_dump($e->getMessage()); } } else { if ($type == 'sass') { $scss = new scssc(); $content = $scss->compile($content); } else { if ($type == 'stylus') { $stylus = new Stylus(); $content = $stylus->fromString($content)->toString(); } } } } return $content; }
/** * @return string */ public function getFile() { // TODO use caching from plugin instead of custom caching to avoid import errors // Create less parser $parser = new \Less_Parser(); try { // Parse file using direct file path $parser->parseFile($this->file['path'], '/'); // Turn less into css $contents = $parser->getCss(); // get all parsed files $parsed_files = $parser::AllParsedFiles(); // reformat to make them the same format as the scss result parsed files list $new_list = array(); foreach ($parsed_files as $parse_file) { $new_list[$parse_file] = filemtime($parse_file); } // store the new list $this->cache->save($this->file['hash'] . "parsed_files", $new_list); } catch (\Exception $e) { return false; } // fix absolute paths $contents = str_replace(array('../'), str_replace(ROOT, "", dirname($this->file['path'])) . '/../', $contents); // return css return $contents; }
/** * @inheritdoc * @throws ContentProcessorException */ public function processContent(File $asset) { $path = $asset->getPath(); try { $parser = new \Less_Parser(['relativeUrls' => false, 'compress' => $this->appState->getMode() !== State::MODE_DEVELOPER]); $content = $this->assetSource->getContent($asset); if (trim($content) === '') { return ''; } $tmpFilePath = $this->temporaryFile->createFile($path, $content); gc_disable(); $parser->parseFile($tmpFilePath, ''); $content = $parser->getCss(); gc_enable(); if (trim($content) === '') { $errorMessage = PHP_EOL . self::ERROR_MESSAGE_PREFIX . PHP_EOL . $path; $this->logger->critical($errorMessage); throw new ContentProcessorException(new Phrase($errorMessage)); } return $content; } catch (\Exception $e) { $errorMessage = PHP_EOL . self::ERROR_MESSAGE_PREFIX . PHP_EOL . $path . PHP_EOL . $e->getMessage(); $this->logger->critical($errorMessage); throw new ContentProcessorException(new Phrase($errorMessage)); } }
public function compileFile($fname, $outFname = null) { if (!is_readable($fname)) { throw new Exception('load error: failed to find ' . $fname); } $pi = pathinfo($fname); $oldImport = $this->importDir; $this->importDir = (array) $this->importDir; $this->importDir[] = realpath($pi['dirname']) . '/'; $this->allParsedFiles = array(); $this->addParsedFile($fname); $parser = new Less_Parser(array('sourceMap' => $this->sourceMap)); $parser->SetImportDirs($this->getImportDirs()); if (count($this->registeredVars)) { $parser->ModifyVars($this->registeredVars); } foreach ($this->libFunctions as $name => $func) { $parser->registerFunction($name, $func); } $parser->parseFile($fname); $out = $parser->getCss(); $parsed = Less_Parser::AllParsedFiles(); foreach ($parsed as $file) { $this->addParsedFile($file); } $this->importDir = $oldImport; if ($outFname !== null) { return file_put_contents($outFname, $out); } return $out; }
function parse_less($filename, $file) { global $less_file, $is_dev; $options = array(); if ($is_dev) { $options['sourceMap'] = true; $options['sourceMapWriteTo'] = '../css/' . $file . '.map'; $options['sourceMapURL'] = '../css/' . $file . '.map'; } else { $options['compress'] = true; } $options['cache_dir'] = '../css_cache'; try { $parser = new Less_Parser($options); $parser->parseFile($less_file, '../css/'); ob_start(); echo $parser->getCss(); $css = ob_get_contents(); ob_end_clean(); header("Content-type: text/css"); @file_put_contents('../css/' . $file . '.css', $css); return $css; } catch (Exception $e) { header("Content-type: text/css"); echo '/* LESS ERROR : ' . "\n\n" . $e->getMessage() . "\n\n" . '*/'; showError($file . '.less'); } }
public function getFormDynamicStyle($id) { $this->lessParser->parseFile($this->getBaseDir() . '/assets/less/style.less'); $styleSettings = SCFP()->getSettings()->getStyleSettings(); $this->lessParser->ModifyVars(array('id' => $id, 'no_border' => !empty($styleSettings['no_border']) ? $styleSettings['no_border'] : '', 'border_size' => !empty($styleSettings['border_size']) ? $styleSettings['border_size'] : '', 'border_style' => !empty($styleSettings['border_style']) ? $styleSettings['border_style'] : '', 'border_color' => !empty($styleSettings['border_color']) ? $styleSettings['border_color'] : '', 'field_label_text_color' => !empty($styleSettings['field_label_text_color']) ? $styleSettings['field_label_text_color'] : '', 'field_label_marker_text_color' => !empty($styleSettings['field_label_marker_text_color']) ? $styleSettings['field_label_marker_text_color'] : '', 'field_text_color' => !empty($styleSettings['field_text_color']) ? $styleSettings['field_text_color'] : '', 'no_background' => !empty($styleSettings['no_background']) ? $styleSettings['no_background'] : '', 'background_color' => !empty($styleSettings['background_color']) ? $styleSettings['background_color'] : '', 'button_color' => !empty($styleSettings['button_color']) ? $styleSettings['button_color'] : '', 'text_color' => !empty($styleSettings['text_color']) ? $styleSettings['text_color'] : '', 'hover_button_color' => !empty($styleSettings['hover_button_color']) ? $styleSettings['hover_button_color'] : '', 'hover_text_color' => !empty($styleSettings['hover_text_color']) ? $styleSettings['hover_text_color'] : '')); return '<style type="text/css" >' . $this->lessParser->getCss() . '</style>'; }
public function compile($source, $pathname) { $less = new \Less_Parser(); $less->SetImportDirs(array(dirname($pathname) => './')); $less->parse($source); return $less->getCss(); }
function compile_botstrap_less_adm($theme, $input, $output = '', $compress = false) { global $cfg; $output = empty($output) ? $input : $output; $output = $cfg['themes_dir'] . '/admin/' . $theme . '/css/' . $output . '.css'; $input = $cfg['themes_dir'] . '/admin/' . $theme . '/less/' . $input . '.less'; if (file_exists($output) && file_exists($input)) { $filetimecss = filemtime($output); $filetimeless = filemtime($input); // cot_print('css', cot_date('datetime_full', $filetimecss), 'less', cot_date('datetime_full', $filetimeless), cot_date('datetime_full'), $filetimecss > $filetimeless); if ($filetimecss > $filetimeless) { return false; } else { unlink($output); // cot_print("deleted"); } } $options = array('relativeUrls' => false); if ($compress) { $options['compress'] = true; } $parser = new Less_Parser($options); $parser->SetImportDirs(array($cfg['themes_dir'] . '/admin/' . $theme . '/less' => $cfg['themes_dir'] . '/admin/' . $theme . '/less', $cfg['plugins_dir'] . "/bootstrap/bootstrap/less" => $cfg['plugins_dir'] . "/bootstrap/bootstrap/less")); $parser->parseFile($input); $css = $parser->getCss(); if (!file_exists($cfg['themes_dir'] . '/admin/' . $theme . '/css')) { mkdir($cfg['themes_dir'] . '/admin/' . $theme . '/css'); } file_put_contents($output, $css); return true; }
/** * @param string $sourceFilePath * @return string */ public function process($sourceFilePath) { $options = ['relativeUrls' => false, 'compress' => $this->appState->getMode() !== State::MODE_DEVELOPER]; $parser = new \Less_Parser($options); $parser->parseFile($sourceFilePath, ''); return $parser->getCss(); }
/** * @param string $themeName * @param string $lessFile * @return string */ public function compileFile($themeName, $lessFile) { $model = Model::instance(); $theme = $model->getTheme($themeName); $options = $theme->getOptionsAsArray(); $configModel = ConfigModel::instance(); $config = $configModel->getAllConfigValues($themeName); $less = "@import '{$lessFile}';"; $less .= $this->generateLessVariables($options, $config); $css = ''; try { require_once ipFile('Ip/Lib/less.php/Less.php'); $themeDir = ipFile('Theme/' . $themeName . '/assets/'); $ipContentDir = ipFile('Ip/Internal/Core/assets/ipContent/'); // creating new context to pass theme assets directory dynamically to a static callback function $context = $this; $callback = function ($parseFile) use($context, $themeDir) { return $context->overrideImportDirectory($themeDir, $parseFile); }; $parserOptions = array('import_callback' => $callback, 'cache_dir' => ipFile('file/tmp/less/'), 'relativeUrls' => false, 'sourceMap' => true); $parser = new \Less_Parser($parserOptions); $directories = array($themeDir => '', $ipContentDir => ''); $parser->SetImportDirs($directories); $parser->parse($less); $css = $parser->getCss(); $css = "/* Edit {$lessFile}, not this file. */" . "\n" . $css; } catch (\Exception $e) { ipLog()->error('Less compilation error: Theme - ' . $e->getMessage()); } return $css; }
public function Compile($less_files, $out_name, $modify_vars = [], $bootstrap_less = "mixins", $mediawiki_less = "mixins") { $lessphp = new \Less_Parser($this->cache_dir); switch ($bootstrap_less) { case "mixins": $lessphp->parseFile($this->bootstrap_dir . "/variables.less", ""); $lessphp->parseFile(__DIR__ . "/custom_variables.less", ""); $lessphp->parseFile($this->bootstrap_mixin, $this->bootstrap_mixin_url); break; case "full": $lessphp->SetImportDirs([$this->bootstrap_dir]); $lessphp->parseFile(__DIR__ . "/bootstrap.less", ""); break; case "off": break; } switch ($mediawiki_less) { case "mixins": $lessphp->parseFile($this->mediawiki_mixin, $this->mediawiki_mixin_url); break; case "off": break; } foreach ($less_files as $less => $url) { $lessphp->parseFile($less, $url); } if ($modify_vars) { $lessphp->ModifyVars($modify_vars); } $css = $lessphp->getCss(); file_put_contents($out_name, $css); }
/** * Compile the asset and return true on success * * @throws \Exception */ protected function compile() { require_once TL_ROOT . '/' . $this->getParserPath(); $parser = new \Less_Parser(); $parser->parseFile(TL_ROOT . '/' . $this->getSourceFile()->path); $file = $this->getTemporaryFile(); $file->write($parser->getCss()); }
/** * Convert LESS to CSS * @param string $string * @return string */ public static function compile($string) { self::init(); $parser = new \Less_Parser(); $parser->SetOptions(['compress' => !Debugger::isEnabled()]); $parser->parse($string); return $parser->getCss(); }
public static function compile($source, $importdirs) { $parser = new Less_Parser(); $parser->SetImportDirs($importdirs); $parser->parse($source); $output = $parser->getCss(); return $output; }
public static function compile($source, $path, $todir, $importdirs) { $parser = new Less_Parser(); $parser->SetImportDirs($importdirs); $parser->parse($source, CANVASLess::relativePath($todir, dirname($path)) . basename($path)); $output = $parser->getCss(); return $output; }
/** * This function generates from the customized bootstrap.less und font-awesome.less a combined css file * * @param string|null $writeTo Where to dump the generated file. */ public static function generateCombinedBootstrapFontAwesomeCSS($writeTo = null) { // Also change build.xml if you change the default writeTo path here! $writeTo = is_string($writeTo) ? $writeTo : 'src/web/bootstrap-font-awesome.css'; $parser = new \Less_Parser(); $parser->setOptions(array('relativeUrls' => false, 'compress' => true)); $parser->parseFile('src/style/bootstrap-font-awesome.less'); file_put_contents($writeTo, $parser->getCss()); }
/** * Execute this filter. * * @param FilterChain The filter chain. * * @return void * * @throws <b>FilterException</b> If an erro occurs during execution. */ public function execute($filterChain) { static $loaded; if (!isset($loaded)) { // load the filter $start_time = microtime(true); $need_to_rebuild = true; $loaded = true; $css_file = $this->getParameter('css_file', null); $less_file = $this->getParameter('less_file', null); if (!is_null($css_file) && !is_null($less_file)) { if (file_exists($less_file)) { if (file_exists($css_file)) { if (filemtime($css_file) >= filemtime($less_file)) { // css file is newer, so skip to the next filter $filterChain->execute(); $need_to_rebuild = false; } } if ($need_to_rebuild) { if (file_exists(MO_WEBAPP_DIR . "/vendor/oyejorge/less.php/lib/Less/Autoloader.php")) { \Mojavi\Logging\LoggerManager::error(__METHOD__ . " :: " . sprintf("Building new CSS file because date is %s and less file date is %s", filemtime($css_file), filemtime($less_file))); try { require_once MO_WEBAPP_DIR . "/vendor/oyejorge/less.php/lib/Less/Autoloader.php"; \Less_Autoloader::register(); $parser = new \Less_Parser(array('compress' => true)); $parser->parseFile($less_file, '/'); $css = $parser->getCss(); file_put_contents($css_file, $css); \Mojavi\Logging\LoggerManager::error(__METHOD__ . " :: " . sprintf("Generated less file in %ss", number_format(microtime(true) - $start_time, 4))); } catch (\Exception $e) { \Mojavi\Logging\LoggerManager::error(__METHOD__ . " :: " . $e->getMessage()); } // completed the caching, move on to the next filter $filterChain->execute(); } else { // we already loaded this filter, skip to the next filter \Mojavi\Logging\LoggerManager::error(__METHOD__ . " :: " . "Missing Less vendor library, use composer require oyejorge/less.php"); $filterChain->execute(); } } } else { // less file doesn't exist so skip to the next filter \Mojavi\Logging\LoggerManager::error(__METHOD__ . " :: " . "Cannot find less file to compile: " . $less_file); $filterChain->execute(); } } else { // less file or css file is not defined, so skip to the next filter \Mojavi\Logging\LoggerManager::error(__METHOD__ . " :: " . "less_file or css_file parameter is not defined"); $filterChain->execute(); } } else { // we already loaded this filter, skip to the next filter $filterChain->execute(); } }
/** * main() method. * * @return bool|int Success or error code. */ public function main() { $config = ['custom_bootstrap_less' => Configure::read('App.webroot') . '/css/vendor/bootstrap/less/custom_bootstrap.less', 'target_css' => Configure::read('App.webroot') . '/css/vendor/bootstrap/css/bootstrap_custom.css', 'compress' => false]; $this->out('Using custom bootstrap.less: ' . $config['custom_bootstrap_less']); $lessPhpOptions = ['compress' => $config['compress']]; $parser = new \Less_Parser($lessPhpOptions); $parser->parseFile($config['custom_bootstrap_less']); file_put_contents($config['target_css'], $parser->getCss()); $this->out('Wrote compiled file to: ' . $config['target_css']); }
/** * Test */ public function testFunction() { echo "\nBegin Tests"; $less_file = $this->fixtures_dir . '/functions/less/f1.less'; $expected_css = file_get_contents($this->fixtures_dir . '/functions/css/f1.css'); $parser = new Less_Parser(); $parser->registerFunction('myfunc-reverse', array(__CLASS__, 'reverse')); $parser->parseFile($less_file); $generated_css = $parser->getCss(); $this->assertEquals($expected_css, $generated_css); }
/** * Created by PhpStorm. * User: duonglh * Date: 8/23/14 * Time: 3:01 PM */ function cupid_generate_less() { require_once 'Less.php'; $cupid_data = of_get_options(); try { $primary_color = $cupid_data['primary-color']; $secondary_color = $cupid_data['secondary-color']; $button_color = $cupid_data['button-color']; $bullet_color = $cupid_data['bullet-color']; $icon_box_color = $cupid_data['icon-box-color']; $site_logo_url = $cupid_data['site-logo']; $site_logo_white_url = $cupid_data['site-logo-white']; $site_logo_url = str_replace(THEME_URL, '', $site_logo_url); $site_logo_white_url = str_replace(THEME_URL, '', $site_logo_white_url); $css = '@primary_color:' . $primary_color . ';'; $css .= '@secondary_color:' . $secondary_color . ';'; $css .= '@button_color:' . $button_color . ';'; $css .= '@bullet_color:' . $bullet_color . ';'; $css .= '@icon_box_color:' . $icon_box_color . ';'; $css .= "@logo_url : '" . $site_logo_url . "';@logo_white_url : '" . $site_logo_white_url . "';"; $css .= '@theme_url:"' . THEME_URL . '";'; $style = $css; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once THEME_DIR . "lib/inc-generate-less/custom-css.php"; $custom_css = cupid_custom_css(); WP_Filesystem(); global $wp_filesystem; $options = array('compress' => true); $parser = new Less_Parser($options); $parser->parse($css); $parser->parseFile(THEME_DIR . 'assets/css/less/style.less'); $parser->parse($custom_css); $css = $parser->getCss(); if (!$wp_filesystem->put_contents(THEME_DIR . "style.min.css", $css, FS_CHMOD_FILE)) { echo __('Could not save file', 'cupid'); return '0'; } /*$theme_info = $wp_filesystem->get_contents( THEME_DIR . "theme-info.txt" ); $parser = new Less_Parser(); $parser->parse($style); $parser->parseFile(THEME_DIR . 'assets/css/less/style.less',THEME_URL); $style = $parser->getCss(); $parser->parse($custom_css); $style = $theme_info . "\n" . $style; $style = str_replace("\r\n","\n", $style); $wp_filesystem->put_contents( THEME_DIR. "style.css", $style, FS_CHMOD_FILE);*/ return '1'; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; return '0'; } }
/** * @param string $sourceFilePath * @return string */ public function process($sourceFilePath) { $options = ['relativeUrls' => false, 'compress' => $this->appState->getMode() !== State::MODE_DEVELOPER]; try { $parser = new \Less_Parser($options); $parser->parseFile($sourceFilePath, ''); return $parser->getCss(); } catch (\Exception $e) { $errorMessage = self::ERROR_MESSAGE_PREFIX . $e->getMessage(); $this->logger->critical($errorMessage); return $errorMessage; } }
/** * {@inheritdoc} */ public function compile($path, $relativePath) { $this->parsedFiles = array(); $parser = new \Less_Parser(array('compress' => true)); if (!empty($this->importDirs)) { $parser->SetImportDirs($this->importDirs); } $parser->parseFile($path); $parser->ModifyVars($this->variables); $css = $parser->getCss(); $this->parsedFiles = $parser->allParsedFiles(); return $css; }
protected function _getInlineCSS() { require_once $this->_sDirPlugins . 'lessphp/Less.php'; $oLessParser = new Less_Parser(); $oConfigBase = new BxBaseConfig(); $oLessParser->ModifyVars($oConfigBase->aLessConfig); foreach ($this->_aFilesCss as $sFile) { if (substr($sFile, -5) !== '.less') { continue; } $oLessParser->parseFile($this->_sPathCss . $sFile, $this->_sUrlCss); } return $oLessParser->getCss(); }