You are here

function _less_process_file in Less CSS Preprocessor 7.4

Same name and namespace in other branches
  1. 8 includes/less.process.inc \_less_process_file()
  2. 7.3 less.process.inc \_less_process_file()

Process a .less file and save the compiled styles.

Parameters

array[] $item:

string $key:

See also

\LessEngineInterface

1 string reference to '_less_process_file'
_less_pre_render in ./less.module
Pre-render function for 'style' elements.

File

includes/less.process.inc, line 117
Contains functions related to compiling .less files.

Code

function _less_process_file(&$item, $key) {
  $less_settings = $item['less'];

  // $output_file doesn't exist or is flagged for build.
  if (!is_file($item['less']['output_file']) || !empty($item['less']['build_required'])) {
    $output_data = NULL;
    try {
      $engine = less_get_engine($less_settings['input_file']);
      $engine
        ->setImportDirectories($less_settings['paths']);
      if ($less_settings[LESS_DEVEL]) {
        $engine
          ->setSourceMaps($less_settings[LESS_SOURCE_MAPS], DRUPAL_ROOT, base_path());
      }
      $engine
        ->modifyVariables($less_settings['variables']);
      $output_data = $engine
        ->compile();
      if ($less_settings[LESS_DEVEL]) {
        _less_cache_dependencies($less_settings['input_file'], $engine
          ->getDependencies());
      }
    } catch (Exception $e) {
      $message_vars = array(
        '@message' => $e
          ->getMessage(),
        '%input_file' => $item['less']['input_file'],
      );
      watchdog('LESS', 'LESS error: @message, %input_file', $message_vars, WATCHDOG_ERROR);
      if (user_access(LESS_PERMISSION)) {
        drupal_set_message(t('LESS error: @message, %input_file', $message_vars), 'error');
      }
    }
    if (isset($output_data)) {

      // Fix paths for images as .css is in different location.
      $output_data = _less_rewrite_paths($item['less']['input_file'], $output_data);

      // Ensure the destination directory exists.
      if (_less_ensure_directory(dirname($item['less']['output_file']))) {
        file_unmanaged_save_data($output_data, $item['less']['output_file'], FILE_EXISTS_REPLACE);
      }
    }
    if (is_file($item['less']['output_file']) && $item['less'][LESS_AUTOPREFIXER]) {
      if (($lessautoprefixer_library = libraries_load('lessautoprefixer')) && $lessautoprefixer_library['installed']) {
        try {
          LessAutoprefixer::create(drupal_realpath($item['less']['output_file']))
            ->compile();
        } catch (Exception $e) {
          $message_vars = array(
            '@message' => $e
              ->getMessage(),
            '%input_file' => $item['less']['output_file'],
          );
          watchdog('LESS', 'Autoprefixer error: @message, %input_file', $message_vars, WATCHDOG_ERROR);
          if (user_access(LESS_PERMISSION)) {
            drupal_set_message(t('Autoprefixer error: @message, %input_file', $message_vars), 'error');
          }
        }
      }
    }
  }
  if (is_file($item['less']['output_file'])) {

    // Set render path of the stylesheet to the compiled output.
    $item['data'] = $item['less']['output_file'];
  }
}