/** * 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(); } }
/** * 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; }
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'); } }
/** * @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 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(); }
public static function Cache(&$less_files, $parser_options = array()) { //prepare the processor if (!class_exists('Less_Parser')) { include_once 'Less.php'; } $parser = new Less_Parser($parser_options); $parser->SetCacheDir(self::$cache_dir); $parser->SetImportDirs(self::$import_dirs); // combine files try { foreach ($less_files as $file_path => $uri_or_less) { //treat as less markup if there are newline characters if (strpos($uri_or_less, "\n") !== false) { $parser->Parse($uri_or_less); continue; } $parser->ParseFile($file_path, $uri_or_less); } $compiled = $parser->getCss(); } catch (Exception $e) { self::$error = $e; return false; } $less_files = $parser->allParsedFiles(); return $compiled; }
/** * @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); }
/** * 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, $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; }
/** * 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()); }
public static function compile($source, $importdirs) { $parser = new Less_Parser(); $parser->SetImportDirs($importdirs); $parser->parse($source); $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); }
/** * Runs `lessc` against any files that match the configured extension. * * @param string $filename The name of the input file. * @param string $input The content of the file. * @return string * @throws \Exception */ public function input($filename, $input) { if (substr($filename, strlen($this->_settings['ext']) * -1) !== $this->_settings['ext']) { return $input; } if (!class_exists('\\Less_Parser')) { throw new \Exception('Cannot not load "\\Less_Parser" class. Make sure https://github.com/oyejorge/less.php is installed.'); } $parser = new \Less_Parser(); return $parser->parseFile($filename)->getCss(); }
/** * 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; } }
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(); }
function css($file, $media = null) { /** * Only initiate automatically if: * - webiste is in dev mode * - or a ?flush is called */ if (preg_match('/\\.less$/i', $file) || Director::isDev() || isset($_GET['flush'])) { /* If file is CSS, check if there is a LESS file */ if (preg_match('/\\.css$/i', $file)) { $less = preg_replace('/\\.css$/i', '.less', $file); if (is_file(Director::getAbsFile($less))) { $file = $less; } } /* If less file exists, then check/compile it */ if (preg_match('/\\.less$/i', $file)) { $out = preg_replace('/\\.less$/i', '.css', $file); $css_file = Director::getAbsFile($out); $options = array(); /* Automatically compress if in live mode */ if (Director::isLive()) { $options['compress'] = true; } try { /* Force recompile & only write to css if updated */ if (isset($_GET['flush']) || !Director::isLive()) { /* Create instance */ $parser = new Less_Parser($options); if (!empty(self::$variables)) { $parser->ModifyVars(self::$variables); } /* calculate the LESS file's parent URL */ $css_dir = rtrim(Director::baseURL(), '/') . Director::makeRelative(dirname(Director::getAbsFile($file)) . '/'); $parser->parseFile(Director::getAbsFile($file), $css_dir); $css = $parser->getCss(); if (!is_file($css_file) || md5_file($css_file) != md5($css)) { file_put_contents($css_file, $css); } } } catch (Exception $ex) { trigger_error("Less.php fatal error: " . $ex->getMessage(), E_USER_ERROR); } $file = $out; } } /* Return css path */ return parent::css($file, $media); }
public static function Cache(&$less_files, $parser_options = array()) { $file = dirname(__FILE__) . '/Less.php'; if (file_exists($file) && !class_exists('Less_Parser')) { require_once($file); }$parser_options['cache_dir'] = Less_Cache::$cache_dir; $parser = new Less_Parser($parser_options); foreach ($less_files as $file_path => $uri_or_less) { if (strpos($uri_or_less, "\n") !== false) { $parser->Parse($uri_or_less); continue; }$parser->ParseFile($file_path, $uri_or_less); }$compiled = $parser->getCss(); $less_files = $parser->allParsedFiles(); return $compiled; }
function processSubmit($mode) { $data = get_option('Lesser_APF'); $less = $data['lesser_' . $mode . '_less']; $parser = new Less_Parser(); try { $parser->parse($less); $css = $parser->getCss(); $data['lesser_' . $mode . '_css'] = $css; $data = apply_filters('lesser_before_' . $mode . '_save', $data); update_option('Lesser_APF', $data); } catch (Exception $e) { $this->setSettingNotice('LESS parse error: ' . $e->getMessage()); } }
public function compile($env) { $a = $this->lvalue->compile($env); $b = $this->rvalue->compile($env); switch ($this->op) { case 'and': $result = $a && $b; break; case 'or': $result = $a || $b; break; default: if (Less_Parser::is_method($a, 'compare')) { $result = $a->compare($b); } elseif (Less_Parser::is_method($b, 'compare')) { $result = $b->compare($a); } else { throw new Less_Exception_Compiler('Unable to perform comparison', null, $this->index); } switch ($result) { case -1: $result = $this->op === '<' || $this->op === '=<' || $this->op === '<='; break; case 0: $result = $this->op === '=' || $this->op === '>=' || $this->op === '=<' || $this->op === '<='; break; case 1: $result = $this->op === '>' || $this->op === '>='; break; } break; } return $this->negate ? !$result : $result; }
public function compile($env) { if (Less_Parser::is_method($this->value, 'compile')) { return new Less_Tree_Assignment($this->key, $this->value->compile($env)); } return $this; }