Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Support/JSConstantGenerator.php
Строк: 138
<?php
namespace ConcreteCoreSupport;

class 
JSConstantGenerator
{
    private 
$_constants = array();

    private 
$_register null;


    public function 
__construct ( array $constants = array() )
    {
        
$this->setConstants($constants);
    }

    public function 
setConstants( array $constants = array() )
    {
        
$this->_constants $constants;
        
$this->_register null;
    }

    public function 
scanSourceTree$sourceDir )
    {
        
$fh Core::make'helper/file' );

        echo 
"Scanning $sourceDir n";

        
$list $fh->getDirectoryContents$sourceDir, array(), true );

        foreach ( 
$list as $file )
        {
            if ( !
preg_match '/.php$/'$file ) ) continue;

            
$content $fh->getContents($file);
            if ( !
preg_match',^s*consts*.*s*//!<s*@javascript-exported,m'$content)) continue;

            
$ns '';
            
$class '';
            
$var '';

            
$content str_replace"nr""n"$content );
            
$ln 0;
            foreach ( 
explode"n"$content ) as $line )
            {
                
$ln ++;
                if ( 
preg_match'/s*namespace .*;/'$line ) ) $ns preg_replace',s*namespaces+([^ -;]+);.*$,''1'$line );

                if ( 
preg_match'/^s*class.*/'$line ) )       $class preg_replace',s*classs+([^ -;{]+).*$,''1'$line );

                if ( 
preg_match',^s*consts*.*s*//!<s*@javascript-exported,'$line))
                {
                    
$var preg_replace',s*consts+([^ ]+)s*=.*$,''1'$line );
                    
$const "$ns\$class::$var";
                    
$this->addConstant($const);
                }
            }
        }

        
    }

    public function 
addConstant$const ) { $this->_constants[] = $const; }
    public function 
addConstants( array $consts ) { $this->_constants array_merge$this->_constants$consts); }

    protected function 
_populateRegister()
    {
        
$register = array();
        foreach ( 
$this->_constants as $constant )
        {
            
$value = eval(" return $constant;");
            
$pathArray preg_split',\\|::,'$constant );

            
$current = &$register;
            while ( 
count($pathArray) )
            {
                
$key '';
                while ( 
'' == $key && count($pathArray) ) $key array_shift($pathArray);

                if ( 
count$pathArray) )
                {
                    if ( !
array_key_exists($key$current ) || !is_array$current[$key] ) ) $current[$key] = array();
                    
$current = &$current[$key];
                }
                else
                {
                    
$current[$key] = $value;
                    break;
                }
            }
        }

        return 
$register;
    }

    public function 
getConstantList() { return $this->_constants; }

    public function 
getRegister()
    {
        if ( 
is_null($this->_register) )
        {
            
$this->_register $this->_populateRegister();
        }
        return 
$this->_register;
    }


    public function 
render$path 'Concrete' )
    {
        
$register $this->getRegister();

        
$extract $register;
        if ( 
$path )
        {
            
$pathArray preg_split',\\|::,'$path );
            while ( 
count($pathArray) )
            {
                
$key '';
                while ( 
'' == $key && count($pathArray) ) $key array_shift($pathArray);
                if ( 
$key $extract $register[$key];
            }
        }


        return 
json_encode$extractJSON_FORCE_OBJECT JSON_PRETTY_PRINT );
    }
}
Онлайн: 0
Реклама