Вход Регистрация
Файл: min/lib/Minify/Lines.php
Строк: 229
<?php
/**
 * Class Minify_Lines  
 * @package Minify
 */

/**
 * Add line numbers in C-style comments for easier debugging of combined content
 *
 * @package Minify
 * @author Stephen Clay <steve@mrclay.org>
 * @author Adam Pedersen (Issue 55 fix)
 */
class Minify_Lines {

    
/**
     * Add line numbers in C-style comments
     *
     * This uses a very basic parser easily fooled by comment tokens inside
     * strings or regexes, but, otherwise, generally clean code will not be 
     * mangled. URI rewriting can also be performed.
     *
     * @param string $content
     * 
     * @param array $options available options:
     * 
     * 'id': (optional) string to identify file. E.g. file name/path
     *
     * 'currentDir': (default null) if given, this is assumed to be the
     * directory of the current CSS file. Using this, minify will rewrite
     * all relative URIs in import/url declarations to correctly point to
     * the desired files, and prepend a comment with debugging information about
     * this process.
     * 
     * @return string 
     */
    
public static function minify($content$options = array()) 
    {
        
$id = (isset($options['id']) && $options['id'])
            ? 
$options['id']
            : 
'';
        
$content str_replace("rn""n"$content);
        
$lines explode("n"$content);
        
$numLines count($lines);
        
// determine left padding
        
$padTo strlen($numLines);
        
$inComment false;
        
$i 0;
        
$newLines = array();
        while (
null !== ($line array_shift($lines))) {
            if ((
'' !== $id) && (== $i 50)) {
                
array_push($newLines''"/* {$id} */"'');
            }
            ++
$i;
            
$newLines[] = self::_addNote($line$i$inComment$padTo);
            
$inComment self::_eolInComment($line$inComment);
        }
        
$content implode("n"$newLines) . "n";
        
        
// check for desired URI rewriting
        
if (isset($options['currentDir'])) {
            require_once 
'Minify/CSS/UriRewriter.php';
            
Minify_CSS_UriRewriter::$debugText '';
            
$content Minify_CSS_UriRewriter::rewrite(
                 
$content
                
,$options['currentDir']
                ,isset(
$options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']
                ,isset(
$options['symlinks']) ? $options['symlinks'] : array()
            );
            
$content "/* Minify_CSS_UriRewriter::$debugTextnn
                     
Minify_CSS_UriRewriter::$debugText "*/n"
                     
$content;
        }
        
        return 
$content;
    }
    
    
/**
     * Is the parser within a C-style comment at the end of this line?
     *
     * @param string $line current line of code
     * 
     * @param bool $inComment was the parser in a comment at the
     * beginning of the line?
     * 
     * @return bool
     */
    
private static function _eolInComment($line$inComment)
    {
        while (
strlen($line)) {
            
$search $inComment
                
'*/'
                
'/*';
            
$pos strpos($line$search);
            if (
false === $pos) {
                return 
$inComment;
            } else {
                if (
$pos == 0
                    
|| ($inComment
                        
substr($line$pos3)
                        : 
substr($line$pos-13)) != '*/*')
                {
                        
$inComment = ! $inComment;
                }
                
$line substr($line$pos 2);
            }
        }
        return 
$inComment;
    }
    
    
/**
     * Prepend a comment (or note) to the given line
     *
     * @param string $line current line of code
     *
     * @param string $note content of note/comment
     * 
     * @param bool $inComment was the parser in a comment at the
     * beginning of the line?
     *
     * @param int $padTo minimum width of comment
     * 
     * @return string
     */
    
private static function _addNote($line$note$inComment$padTo)
    {
        return 
$inComment
            
'/* ' str_pad($note$padTo' 'STR_PAD_RIGHT) . ' *| ' $line
            
'/* ' str_pad($note$padTo' 'STR_PAD_RIGHT) . ' */ ' $line;
    }
}
Онлайн: 2
Реклама