View source
<?php
function _less_build(&$vars, $hook) {
$css = $vars['css'];
$file_path = file_directory_path();
foreach ($css as $media => $types) {
foreach ($types as $type => $files) {
$files_keys = array_keys($files);
foreach ($files_keys as $key => $input_file) {
if (substr($input_file, -5) == '.less') {
$css_path = $file_path . '/less/' . dirname($input_file);
if (!is_dir($css_path)) {
@mkdir($css_path, 0775, TRUE);
}
$output_file = $css_path . '/' . basename($input_file, '.less') . '.css';
$real_output_file = realpath($output_file);
if (!file_exists($real_output_file) || filemtime(realpath($input_file)) > filemtime($real_output_file)) {
require_once 'lessphp/lessc.inc.php';
$less = new lessc();
$contents = drupal_load_stylesheet($input_file, false);
$base = base_path() . dirname($input_file) . '/';
_drupal_build_css_path(NULL, $base);
$data = preg_replace_callback('/url\\([\'"]?(?![a-z]+:|\\/+)([^\'")]+)[\'"]?\\)/i', '_drupal_build_css_path', $contents);
file_save_data($less
->parse($data), $output_file, FILE_EXISTS_REPLACE);
}
if (file_exists($real_output_file)) {
array_splice($files_keys, $key, 1, $output_file);
}
}
}
if (!empty($files)) {
$css[$media][$type] = array_combine($files_keys, $files);
}
}
}
$vars['messages'] .= theme('status_messages');
$vars['css'] = $css;
$vars['styles'] = drupal_get_css($vars['css']);
}
function less_preprocess_page(&$vars, $hook) {
_less_build($vars, $hook);
}
function less_preprocess_maintenance_page(&$vars, $hook) {
_less_build($vars, $hook);
}
function less_enable() {
drupal_rebuild_theme_registry();
}