Advertisement
Guest User

jaw_css_to_array

a guest
Sep 12th, 2014
269
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.34 KB | None | 0 0
  1. function jaw_css_to_array($css) {
  2.     if (empty($css)) return array();
  3.     $css_array = array();
  4.     $css = preg_replace('#/\*.*\*/#U', '', str_replace(array("\n","\r",';base64'), array('','','-base64'), $css));
  5.     preg_match_all("/([^{}]*)\{(([^{}]*|(?R))*)\}/",$css,$matches);
  6.     foreach ($matches[2] as $key => $rules) {
  7.         $rules = trim($rules,"; \t\n\r\0\x0B");
  8.         if (strpos($rules,'{') !== false) {
  9.             $css_array[trim($matches[1][$key])] = jaw_css_to_array($rules);
  10.         } else {
  11.             $selectors = explode(',',$matches[1][$key]);
  12.             $rules = explode(';',$rules);
  13.             $rules_array = array();
  14.             foreach ($rules as $rule) {
  15.                 if (!empty($rule)) {
  16.                     $rule = explode(':', $rule, 2);
  17.                     $rules_array[] = strtolower(trim($rule[0])) . ': ' . str_replace(array('-base64'), array(';base64'), trim($rule[1]));
  18.                 }
  19.             }
  20.             foreach ($selectors as $selector) {
  21.                 $selector = trim($selector);
  22.                 $selector = preg_replace_callback('/(\:)([a-z0-9\-]+)(\(|>|#|\.|\:|\s|$)/i', function ($matches) { return strtolower($matches[0]); }, $selector);
  23.                 $selector = preg_replace_callback('/(^|\s|>)([a-z0-9\s>]+)(>|#|\.|\:|\s|$)/i', function ($matches) { return strtoupper($matches[0]); }, $selector);
  24.                 $css_array[$selector] = (is_array($css_array[$selector]) ? array_merge($css_array[$selector],$rules_array) : $rules_array);
  25.             }
  26.         }
  27.     }
  28.     return $css_array;
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement