View source
<?php
function _less_build(&$vars, $hook) {
module_load_include('php', 'less', 'lessc.inc');
$css = $vars['css'];
$css_path = file_create_path('less');
file_check_directory($css_path, FILE_CREATE_DIRECTORY);
$base_path = $_SERVER['DOCUMENT_ROOT'] . base_path();
$less = new lessc();
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') {
$output_file = $css_path . '/' . 'less_' . md5_file($base_path . $input_file) . '.css';
if (!file_exists($base_path . $output_file)) {
$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($base_path . $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['styles'] = drupal_get_css($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();
}