You are here

function drupal_load_stylesheet_content in Drupal 7

Processes the contents of a stylesheet for aggregation.

Parameters

$contents: The contents of the stylesheet.

$optimize: (optional) Boolean whether CSS contents should be minified. Defaults to FALSE.

Return value

Contents of the stylesheet including the imported stylesheets.

4 calls to drupal_load_stylesheet_content()
CascadingStylesheetsTestCase::testRenderInlinePreprocess in modules/simpletest/tests/common.test
Tests rendering inline stylesheets with preprocessing on.
CascadingStylesheetsTestCase::testRenderRemoveCharsetPreprocess in modules/simpletest/tests/common.test
Tests removing charset when rendering stylesheets with preprocessing on.
drupal_aggregate_css in includes/common.inc
Default callback to aggregate CSS files and inline content.
drupal_load_stylesheet in includes/common.inc
Loads the stylesheet and resolves all @import commands.

File

includes/common.inc, line 3844
Common functions that many Drupal modules will need to reference.

Code

function drupal_load_stylesheet_content($contents, $optimize = FALSE) {

  // Remove multiple charset declarations for standards compliance (and fixing Safari problems).
  $contents = preg_replace('/^@charset\\s+[\'"](\\S*?)\\b[\'"];/i', '', $contents);
  if ($optimize) {

    // Perform some safe CSS optimizations.
    // Regexp to match comment blocks.
    $comment = '/\\*[^*]*\\*+(?:[^/*][^*]*\\*+)*/';

    // Regexp to match double quoted strings.
    $double_quot = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"';

    // Regexp to match single quoted strings.
    $single_quot = "'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'";

    // Strip all comment blocks, but keep double/single quoted strings.
    $contents = preg_replace("<({$double_quot}|{$single_quot})|{$comment}>Ss", "\$1", $contents);

    // Remove certain whitespace.
    // There are different conditions for removing leading and trailing
    // whitespace.
    // @see http://php.net/manual/regexp.reference.subpatterns.php
    $contents = preg_replace('<
      # Do not strip any space from within single or double quotes
        (' . $double_quot . '|' . $single_quot . ')
      # Strip leading and trailing whitespace.
      | \\s*([@{};,])\\s*
      # Strip only leading whitespace from:
      # - Closing parenthesis: Retain "@media (bar) and foo".
      | \\s+([\\)])
      # Strip only trailing whitespace from:
      # - Opening parenthesis: Retain "@media (bar) and foo".
      # - Colon: Retain :pseudo-selectors.
      | ([\\(:])\\s+
    >xSs', '$1$2$3$4', $contents);

    // End the file with a new line.
    $contents = trim($contents);
    $contents .= "\n";
  }

  // Replaces @import commands with the actual stylesheet content.
  // This happens recursively but omits external files.
  $contents = preg_replace_callback('/@import\\s*(?:url\\(\\s*)?[\'"]?(?![a-z]+:)(?!\\/\\/)([^\'"\\()]+)[\'"]?\\s*\\)?\\s*;/', '_drupal_load_stylesheet', $contents);
  return $contents;
}