You are here

function _less_build in Less CSS Preprocessor 6

Same name and namespace in other branches
  1. 6.3 less.module \_less_build()
  2. 6.2 less.module \_less_build()

Builds the less cache

2 calls to _less_build()
less_preprocess_maintenance_page in ./less.module
Implements MODULE_preprocess_maintenance_page().
less_preprocess_page in ./less.module
Implements MODULE_preprocess_page().

File

./less.module, line 6

Code

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);

            // Prefix all paths within this CSS file, ignoring external and absolute paths.
            $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);
}