138 lines
3.3 KiB
PHP
138 lines
3.3 KiB
PHP
<?php
|
|
|
|
/*
|
|
class Less_Visitor_import extends Less_VisitorReplacing{
|
|
|
|
public $_visitor;
|
|
public $_importer;
|
|
public $importCount;
|
|
|
|
function __construct( $evalEnv ){
|
|
$this->env = $evalEnv;
|
|
$this->importCount = 0;
|
|
parent::__construct();
|
|
}
|
|
|
|
|
|
function run( $root ){
|
|
$root = $this->visitObj($root);
|
|
$this->isFinished = true;
|
|
|
|
//if( $this->importCount === 0) {
|
|
// $this->_finish();
|
|
//}
|
|
}
|
|
|
|
function visitImport($importNode, &$visitDeeper ){
|
|
$importVisitor = $this;
|
|
$inlineCSS = $importNode->options['inline'];
|
|
|
|
if( !$importNode->css || $inlineCSS ){
|
|
$evaldImportNode = $importNode->compileForImport($this->env);
|
|
|
|
if( $evaldImportNode && (!$evaldImportNode->css || $inlineCSS) ){
|
|
$importNode = $evaldImportNode;
|
|
$this->importCount++;
|
|
$env = clone $this->env;
|
|
|
|
if( (isset($importNode->options['multiple']) && $importNode->options['multiple']) ){
|
|
$env->importMultiple = true;
|
|
}
|
|
|
|
//get path & uri
|
|
$path_and_uri = null;
|
|
if( is_callable(Less_Parser::$options['import_callback']) ){
|
|
$path_and_uri = call_user_func(Less_Parser::$options['import_callback'],$importNode);
|
|
}
|
|
|
|
if( !$path_and_uri ){
|
|
$path_and_uri = $importNode->PathAndUri();
|
|
}
|
|
|
|
if( $path_and_uri ){
|
|
list($full_path, $uri) = $path_and_uri;
|
|
}else{
|
|
$full_path = $uri = $importNode->getPath();
|
|
}
|
|
|
|
|
|
//import once
|
|
if( $importNode->skip( $full_path, $env) ){
|
|
return array();
|
|
}
|
|
|
|
if( $importNode->options['inline'] ){
|
|
//todo needs to reference css file not import
|
|
//$contents = new Less_Tree_Anonymous($importNode->root, 0, array('filename'=>$importNode->importedFilename), true );
|
|
|
|
Less_Parser::AddParsedFile($full_path);
|
|
$contents = new Less_Tree_Anonymous( file_get_contents($full_path), 0, array(), true );
|
|
|
|
if( $importNode->features ){
|
|
return new Less_Tree_Media( array($contents), $importNode->features->value );
|
|
}
|
|
|
|
return array( $contents );
|
|
}
|
|
|
|
|
|
// css ?
|
|
if( $importNode->css ){
|
|
$features = ( $importNode->features ? $importNode->features->compile($env) : null );
|
|
return new Less_Tree_Import( $importNode->compilePath( $env), $features, $importNode->options, $this->index);
|
|
}
|
|
|
|
return $importNode->ParseImport( $full_path, $uri, $env );
|
|
}
|
|
|
|
}
|
|
|
|
$visitDeeper = false;
|
|
return $importNode;
|
|
}
|
|
|
|
|
|
function visitRule( $ruleNode, &$visitDeeper ){
|
|
$visitDeeper = false;
|
|
return $ruleNode;
|
|
}
|
|
|
|
function visitDirective($directiveNode, $visitArgs){
|
|
array_unshift($this->env->frames,$directiveNode);
|
|
return $directiveNode;
|
|
}
|
|
|
|
function visitDirectiveOut($directiveNode) {
|
|
array_shift($this->env->frames);
|
|
}
|
|
|
|
function visitMixinDefinition($mixinDefinitionNode, $visitArgs) {
|
|
array_unshift($this->env->frames,$mixinDefinitionNode);
|
|
return $mixinDefinitionNode;
|
|
}
|
|
|
|
function visitMixinDefinitionOut($mixinDefinitionNode) {
|
|
array_shift($this->env->frames);
|
|
}
|
|
|
|
function visitRuleset($rulesetNode, $visitArgs) {
|
|
array_unshift($this->env->frames,$rulesetNode);
|
|
return $rulesetNode;
|
|
}
|
|
|
|
function visitRulesetOut($rulesetNode) {
|
|
array_shift($this->env->frames);
|
|
}
|
|
|
|
function visitMedia($mediaNode, $visitArgs) {
|
|
array_unshift($this->env->frames, $mediaNode->ruleset);
|
|
return $mediaNode;
|
|
}
|
|
|
|
function visitMediaOut($mediaNode) {
|
|
array_shift($this->env->frames);
|
|
}
|
|
|
|
}
|
|
*/
|