You are here

function ctools_css_disassemble in Chaos Tool Suite (ctools) 7

Same name and namespace in other branches
  1. 6 includes/css.inc \ctools_css_disassemble()

Disassemble the css string.

Strip the css of irrelevant characters, invalid/malformed selectors and declarations, and otherwise prepare it for processing.

Parameters

string $css: A string containing the css to be disassembled.

Return value

array An array of disassembled, slightly cleaned-up/formatted css statements.

2 calls to ctools_css_disassemble()
CtoolsCssTestCase::testCssFilterURLHandling in tests/css.test
Test that in case that url is used, the colons survives filtering.
ctools_css_filter in includes/css.inc
Filter a chunk of CSS text.

File

includes/css.inc, line 284
CSS filtering functions. Contains a disassembler, filter, compressor, and decompressor.

Code

function ctools_css_disassemble($css) {
  $disassembled_css = array();

  // Remove comments.
  $css = preg_replace("/\\/\\*(.*)?\\*\\//Usi", "", $css);

  // Split out each statement. Match either a right curly brace or a semi-colon
  // that precedes a left curly brace with no right curly brace separating them.
  $statements = preg_split('/}|;(?=[^}]*{)/', $css);

  // If we have any statements, parse them.
  if (!empty($statements)) {

    // Iterate through all of the statements.
    foreach ($statements as $statement) {

      // Get the selector(s) and declaration.
      if (empty($statement) || !strpos($statement, '{')) {
        continue;
      }
      list($selector_str, $declaration) = explode('{', $statement);

      // If the selector exists, then disassemble it, check it, and regenerate
      // the selector string.
      $selector_str = empty($selector_str) ? FALSE : _ctools_css_disassemble_selector($selector_str);
      if (empty($selector_str)) {

        // No valid selectors. Bomb out and start the next item.
        continue;
      }

      // Disassemble the declaration, check it and tuck it into an array.
      if (!isset($disassembled_css[$selector_str])) {
        $disassembled_css[$selector_str] = array();
      }
      $disassembled_css[$selector_str] += _ctools_css_disassemble_declaration($declaration);
    }
  }
  return $disassembled_css;
}