/** * @param string $path * @return string */ protected function _compile($path) { try { $this->_processor->parseFile($path); $resultCss = $this->_processor->getCss(); $this->_cacheMix = $this->_processor->allParsedFiles(); return $resultCss; } catch (Exception $ex) { die('<strong>Less Error (JBlank):</strong><br/><pre>' . $ex->getMessage() . '</pre>'); } }
/** * {@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; }
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; }
/** * Compiles the LESS code into a single CSS file. */ public function compile() { try { $dest = $this->paths->get('css.compressed'); $compile = $this->params->get('compile_less', 1); $changed = (bool) $this->isLessUpdated(); $generateSourceMap = $this->params->get('generate_css_sourcemap', false); JLog::add('LESS cache changed: ' . ((bool) $changed ? 'true' : 'false'), JLog::DEBUG, $this->logger); $force = (bool) ($compile == 2); $changed = (bool) ($compile == 1 && $changed); JLog::add('Force LESS compilation: ' . ((bool) $force ? 'true' : 'false'), JLog::DEBUG, $this->logger); JLog::add('Compiling LESS: ' . ((bool) $changed ? 'true' : 'false'), JLog::DEBUG, $this->logger); if (!JFile::exists($dest) || $changed || $force) { JLog::add('Generate CSS sourcemap: ' . ((bool) $generateSourceMap ? 'true' : 'false'), JLog::DEBUG, $this->logger); $options = array('compress' => true); $cssSourceMapUri = str_replace(JPATH_ROOT, JURI::base(), $this->paths->get('css.sourcemap')); // Build source map with minified code. if ($this->params->get('generate_css_sourcemap', false)) { $options['sourceMap'] = true; $options['sourceMapWriteTo'] = $this->paths->get('css.sourcemap'); $options['sourceMapURL'] = $cssSourceMapUri; $options['sourceMapBasepath'] = JPATH_ROOT; $options['sourceMapRootpath'] = JUri::base(); } else { JFile::delete($this->paths->get('css.sourcemap')); } $less = new Less_Parser($options); $less->parseFile($this->paths->get('css.less'), JUri::base()); $css = $less->getCss(); JLog::add('Writing CSS to: ' . $dest, JLog::DEBUG, $this->logger); JFile::write($dest, $css); $files = $less->allParsedFiles(); // update cache. $this->updateCache(self::CACHEKEY . '.files.less', $files); } } catch (Exception $e) { JLog::add($e->getMessage(), JLog::ERROR, $this->logger); return false; } }
public static function Cache(&$less_files, $parser_options = array()) { // get less.php if it exists $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); // combine files 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(); $less_files = $parser->allParsedFiles(); return $compiled; }
/** * Handle the processing of multiple less files into css * * @return mixed Compiled css string or false * */ static function ParseLess(&$less_files) { global $dataDir; $compiled = false; // don't use less if the memory limit is less than 64M $limit = @ini_get('memory_limit'); if ($limit) { $limit = \gp\tool::getByteValue($limit); //if less than 64M, disable less compiler if we can't increase if ($limit < 67108864 && @ini_set('memory_limit', '96M') === false) { if (\gp\tool::LoggedIn()) { msg('LESS compilation disabled. Please increase php\'s memory_limit'); } return false; //if less than 96M, try to increase } elseif ($limit < 100663296) { @ini_set('memory_limit', '96M'); } } //compiler options $options = array(); //prepare the compiler includeFile('thirdparty/less.php/Less.php'); $parser = new \Less_Parser($options); $import_dirs[$dataDir] = \gp\tool::GetDir('/'); $parser->SetImportDirs($import_dirs); $parser->cache_method = 'php'; $parser->SetCacheDir($dataDir . '/data/_cache'); // combine files try { foreach ($less_files as $less) { //treat as less markup if there are newline characters if (strpos($less, "\n") !== false) { $parser->Parse($less); continue; } // handle relative and absolute paths if (!empty($dataDir) && strpos($less, $dataDir) === false) { $relative = $less; $less = $dataDir . '/' . ltrim($less, '/'); } else { $relative = substr($less, strlen($dataDir)); } $parser->ParseFile($less, \gp\tool::GetDir(dirname($relative))); } $compiled = $parser->getCss(); } catch (Exception $e) { if (\gp\tool::LoggedIn()) { msg('LESS Compile Failed: ' . $e->getMessage()); } return false; } // significant difference in used memory 15,000,000 -> 6,000,000. Max still @ 15,000,000 if (function_exists('gc_collect_cycles')) { gc_collect_cycles(); } $less_files = $parser->allParsedFiles(); return $compiled; }
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; }
$dirLen = $index - $lastOffset + 1; // include / $dir = substr($paths[0], $lastOffset, $dirLen); foreach ($paths as $path) { if (substr($path, $lastOffset, $dirLen) != $dir) { return $common; } } $common .= $dir; $lastOffset = $index + 1; } return substr($common, 0, -1); } if ($regenerate) { // chop absolute path to a common denominator $allIncluded = $parser->allParsedFiles(); $prefix = getCommonPath($allIncluded); $allIncluded = array_map(function ($x) use($prefix) { return substr($x, strlen($prefix)); }, $allIncluded); $allIncluded = implode(' ', $allIncluded); } else { $allIncluded = 'Can only say when regenerating.'; } if ($status_only) { if ($regenerated) { print "Regenerated CSS file."; } else { print "Did not regenerate CSS file. Would just output the cache file."; } exit;
if ($custom_css == 1 && $compile_css == 1) { $parser->ModifyVars(array('custom_css' => '"../../../../../../templates/' . $this->template . '/css/custom.css"')); } else { $parser->ModifyVars(array('custom_css' => '"custom.less"')); } if ($compile_css == 1) { $parser->ModifyVars(array('loadall' => 'true', 'bootstrap' => '"../less/bootstrap.less"', 'yjsgless' => '"yjsg.less"', 'sitelinkcolor' => '#' . $valid_color, 'normalize' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'normalize.css"', 'yjsg_layout' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'yjsg_layout.css"', 'newsitems' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'newsitems.css"', 'typo' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'typo.css"', 'joomladefaults' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'joomladefaults.css"', 'template_css' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'template.css"', 'yjsg_responsive' => '"../../../../../../plugins/system/yjsg' . $cssFolder . 'yjresponsive.css"', 'menus_css' => $menus, 'layout_css' => '"../../../../../../templates/' . $this->template . '/css/layout.css"', 'custom_responsive' => '"../../../../../../templates/' . $this->template . '/css/custom_responsive.css"', 'template_style' => '"../../../../../../templates/' . $this->template . '/css/' . $css_file . '.css"')); } else { $parser->ModifyVars(array('loadall' => 'false', 'bootstrap' => '"../less/bootstrap.less"', 'yjsgless' => '"yjsg.less"', 'sitelinkcolor' => '#' . $valid_color)); } $parser->parseFile($input_less, false); if ($selectors_override == 1 && $selectors_override_type == 3 && $compile_css == 1) { $parser->parseFile($fontfacekit, false); } $output_cssContents = $parser->getCss(); $imported_files = $parser->allParsedFiles(); $newCache = $yjsgLess->newCache($imported_files); // replace all calls for assets folder with actual path and remove @imports generated by compiler if we are compiling everything if ($compile_css == 1) { $output_cssContents = str_replace('../../../../../plugins/system/yjsg/assets/', YJSG_ASSETS, $output_cssContents); $output_cssContents = preg_replace('/(@import(.*?);)/s', '', $output_cssContents); } // replace @font-face kit font strings if the settings is on if ($selectors_override == 1 && $selectors_override_type == 3 && $compile_css == 1) { $output_cssContents = preg_replace("/(url\\('(?!\\.)(?!\\/))/s", "url('" . YJSGSITE_PATH . 'css/fontfacekits/' . $fontfacekit_font_family . '/', $output_cssContents); } // replace @font-face font strings for fontawesome $getfontawesome = ''; if ($compile_css == 1) { $getfontawesome = JFile::read($fontawesome); $getfontawesome = str_replace('../../../../../plugins/system/yjsg/assets/', YJSG_ASSETS, $getfontawesome);