/**
  * Rewrite file relative URIs as root relative in CSS files
  *
  * @param string $css
  *
  * @param string $currentDir The directory of the current CSS file.
  *
  * @param string $prependAbsolutePath
  *
  * @param string $prependAbsolutePathCallback
  *
  * @param string $docRoot 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>
  *
  * @param int $browserCacheId
  *
  * @param array $browserCacheExtensions
  *
  * @return string
  */
 private static function _rewrite($css, $currentDir, $prependAbsolutePath = null, $prependAbsolutePathCallback = null, $docRoot = null, $symlinks = array(), $browserCacheId = 0, $browserCacheExtensions = array())
 {
     self::$_docRoot = self::_realpath($docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']);
     self::$_currentDir = self::_realpath($currentDir);
     self::$_prependAbsolutePath = $prependAbsolutePath;
     self::$_prependAbsolutePathCallback = $prependAbsolutePathCallback;
     self::$_symlinks = array();
     self::$_browserCacheId = $browserCacheId;
     self::$_browserCacheExtensions = $browserCacheExtensions;
     // normalize symlinks
     foreach ($symlinks as $link => $target) {
         $link = $link === '//' ? self::$_docRoot : str_replace('//', self::$_docRoot . '/', $link);
         $link = strtr($link, '/', DIRECTORY_SEPARATOR);
         self::$_symlinks[$link] = self::_realpath($target);
     }
     self::$debugText .= "docRoot    : " . self::$_docRoot . "\n" . "currentDir : " . self::$_currentDir . "\n";
     if (self::$_symlinks) {
         self::$debugText .= "symlinks : " . implode(', ', self::$_symlinks) . "\n";
     }
     self::$debugText .= "\n";
     $css = self::_trimUrls($css);
     // rewrite
     $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/', array(self::$className, '_processUriCB'), $css);
     $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array(self::$className, '_processUriCB'), $css);
     return $css;
 }
    /**
     * Rewrite file relative URIs as root relative in CSS files
     * 
     * @param string $css
     * 
     * @param string $currentDir The directory of the current CSS file.
     * 
     * @param string $docRoot 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
     */
    static public function rewrite($css, $currentDir, $docRoot = null, $symlinks = array()) 
    {
        self::$_docRoot = self::_realpath(
            $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']
        );
        self::$_currentDir = self::_realpath($currentDir);
        self::$_symlinks = array();
        
        // normalize symlinks
        foreach ($symlinks as $link => $target) {
            $link = ($link === '//')
                ? self::$_docRoot
                : str_replace('//', self::$_docRoot . '/', $link);
            $link = strtr($link, '/', DIRECTORY_SEPARATOR);
            self::$_symlinks[$link] = self::_realpath($target);
        }
        
        self::$debugText .= "docRoot    : " . self::$_docRoot . "\n"
                          . "currentDir : " . self::$_currentDir . "\n";
        if (self::$_symlinks) {
            self::$debugText .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n";
        }
        self::$debugText .= "\n";
        
        $css = self::_trimUrls($css);
        
        // rewrite
        $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/'
            ,array(self::$className, '_processUriCB'), $css);
        $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
            ,array(self::$className, '_processUriCB'), $css);

        return $css;
    }
    /**
     * Rewrite file relative URIs as root relative in CSS files
     * 
     * @param string $css
     * 
     * @param string $currentDir The directory of the current CSS file.
     * 
     * @param string $docRoot 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, $currentDir, $docRoot = null, $symlinks = array()) 
    {
        self::$_docRoot = $docRoot
            ? $docRoot
            : $_SERVER['DOCUMENT_ROOT'];
        self::$_docRoot = realpath(self::$_docRoot);
        self::$_currentDir = realpath($currentDir);
        self::$_symlinks = array();
        
        // normalize symlinks
        foreach ($symlinks as $link => $target) {
            $link = str_replace('//', realpath(self::$_docRoot), $link);
            $link = strtr($link, '/', DIRECTORY_SEPARATOR);
            self::$_symlinks[$link] = realpath($target);
        }
        
        $css = self::_trimUrls($css);
        
        // rewrite
        $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/'
            ,array(self::$className, '_uriCB'), $css);
        $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
            ,array(self::$className, '_uriCB'), $css);

        return $css;
    }
Exemple #4
0
 /**
  * Rewrite file relative URIs as root relative in CSS files
  * 
  * @param string $css
  * 
  * @param string $currentDir The directory of the current CSS file.
  * 
  * @param string $docRoot The document root of the web site in which 
  * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']).
  * 
  * @return string
  */
 public static function rewrite($css, $currentDir, $docRoot = null, $prependPath = null)
 {
     self::$_docRoot = self::_realpath($docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']);
     self::$_currentDir = self::_realpath($currentDir);
     self::$_prependPath = $prependPath ? $prependPath : '';
     self::$debugText .= "docRoot    : " . self::$_docRoot . "\n" . "currentDir : " . self::$_currentDir . "\n";
     //        if (self::$_symlinks) {
     //            self::$debugText .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n";
     //        }
     self::$debugText .= "\n";
     $css = self::_trimUrls($css);
     // rewrite
     $css = preg_replace_callback('/@import\\s+(?:url)(.+);/', array(self::$className, '_processImportUriCB'), $css);
     $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array(self::$className, '_processUriCB'), $css);
     return $css;
 }
 /**
  * Rewrite file relative URIs as root relative in CSS files
  * 
  * @param string $css
  * 
  * @param string $currentDir The directory of the current CSS file.
  *
  * @param string $docRoot The document root of the web site in which 
  * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']).
  * 
  * @return string
  */
 public static function rewrite($css, $currentDir, $docRoot = null)
 {
     self::$_docRoot = $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT'];
     self::$_docRoot = realpath(self::$_docRoot);
     self::$_currentDir = realpath($currentDir);
     // remove ws around urls
     $css = preg_replace('/
             url\\(      # url(
             \\s*
             ([^\\)]+?)  # 1 = URI (really just a bunch of non right parenthesis)
             \\s*
             \\)         # )
         /x', 'url($1)', $css);
     // rewrite
     $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/', array('Minify_CSS_UriRewriter', '_uriCB'), $css);
     $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/', array('Minify_CSS_UriRewriter', '_uriCB'), $css);
     return $css;
 }