= $last_modified)) { header('HTTP/1.0 304 Not Modified'); exit; } print("/* Generated by CSS Mixin v2 http://habilis.net/cssmixin/ */\n"); if ($debug) print("/*\n PHP Style Script: {$_SERVER['PHP_SELF']}\n CSS Class File: $cssfile\n*/\n"); // load CSS $f = file_get_contents($cssfile); // Strip all the comments $f = preg_replace('/\/\*.*\*\//sU', '', $f); // Tokenize into class names, and declariations. // It's not a parser, it's a pharser (hackish, kludgy parser). preg_match_all('/\.([_a-z0-9-]+)|{([^}]+)}/si', $f, $out, PREG_SET_ORDER); // Construct classes by appending descriptors $class_list = array(); foreach ($out as $o) { $firstc = $o[0][0]; if ($firstc == '.') { $class = $o[1]; $class_list[] = $class; } else if ($firstc == '{') { $descriptor = trim(trim($o[2], ' '), "\n\r"); //$descriptor = preg_replace('/\n/m', 'X', $descriptor); foreach ($class_list as $c) { if ( array_key_exists($c, $cssclass) ) { if ($debug) $cssclass[$c] = $cssclass[$c] . "\n" . $descriptor; else $cssclass[$c] = $cssclass[$c] . $descriptor; } else $cssclass[$c] = $descriptor; } $class_list = array(); } } // print_r($cssclass); } // cssmixin creates a new style descriptor based on the $mixinclasses list. function cssmixin($newspec, $mixinclasses) { global $cssclass; global $debug; if ($debug) print("$newspec {\n"); else print("$newspec{"); $clist = explode(' ', $mixinclasses); $first = TRUE; foreach ($clist as $c) { if ($debug) { if ($first) $first = FALSE; else print("\n"); print("/* Class: $c */\n$cssclass[$c]\n"); } else print($cssclass[$c]); } if ($debug) print("}\n\n"); else print("}\n"); } ?>