Ejemplo n.º 1
0
 /**
  * Rewrite file relative URIs as root relative in CSS files
  * 
  * @param string $css
  * 
  * @param string $current_dir The directory of the current CSS file.
  * 
  * @param string $doc_root The document root of the web site in which 
  * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']).
  * 
  * @param array $symlinks (default = array()) If the CSS file is stored in 
  * a symlink-ed directory, provide an array of link paths to
  * target paths, where the link paths are within the document root. Because 
  * paths need to be normalized for this to work, use "//" to substitute 
  * the doc root in the link paths (the array keys). E.g.:
  * <code>
  * array('//symlink' => '/real/target/path') // unix
  * array('//static' => 'D:\\staticStorage')  // Windows
  * </code>
  * 
  * @return string
  */
 public static function rewrite($css, $current_dir, $doc_root = null, $symlinks = array())
 {
     self::$_doc_root = self::_realpath($doc_root ? $doc_root : $_SERVER['DOCUMENT_ROOT']);
     self::$_current_dir = self::_realpath($current_dir);
     self::$_symlinks = array();
     // normalize symlinks
     foreach ($symlinks as $link => $target) {
         $link = $link === '//' ? self::$_doc_root : str_replace('//', self::$_doc_root . '/', $link);
         $link = strtr($link, '/', DIRECTORY_SEPARATOR);
         self::$_symlinks[$link] = self::_realpath($target);
     }
     self::$debug_text .= "doc_root    : " . self::$_doc_root . "\n" . "current_dir : " . self::$_current_dir . "\n";
     if (self::$_symlinks) {
         self::$debug_text .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n";
     }
     self::$debug_text .= "\n";
     $css = self::_trim_urls($css);
     // rewrite
     $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/', array(self::$class_name, '_process_uri_cb'), $css);
     $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array(self::$class_name, '_process_uri_cb'), $css);
     $css = preg_replace_callback('/src=\'\\s*([^\\)\\s]+)\\s*\'/', array(self::$class_name, '_process_src_cb'), $css);
     return $css;
 }