/** * Parse the import url and return the rules * * @return Less_Tree_Media|array */ public function ParseImport($full_path, $uri, $env) { $import_env = clone $env; if (isset($this->options['reference']) && $this->options['reference'] || isset($this->currentFileInfo['reference'])) { $import_env->currentFileInfo['reference'] = true; } if (isset($this->options['multiple']) && $this->options['multiple']) { $import_env->importMultiple = true; } $parser = new Less_Parser($import_env); $root = $parser->parseFile($full_path, $uri, true); $ruleset = new Less_Tree_Ruleset(array(), $root->rules); $ruleset->evalImports($import_env); return $this->features ? new Less_Tree_Media($ruleset->rules, $this->features->value) : $ruleset->rules; }
function compile($env) { $evald = $this->compileForImport($env); $uri = $full_path = false; //get path & uri $evald_path = $evald->getPath(); if ($evald_path && $env->isPathRelative($evald_path)) { foreach (Less_Parser::$import_dirs as $rootpath => $rooturi) { $temp = $rootpath . $evald_path; if (file_exists($temp)) { $full_path = Less_Environment::NormPath($temp); $uri = Less_Environment::NormPath(dirname($rooturi . $evald_path)); break; } } } if (!$full_path) { $uri = $evald_path; $full_path = $evald_path; } //import once $realpath = realpath($full_path); if (!isset($evald->options['multiple']) && $realpath && Less_Parser::FileParsed($realpath)) { $evald->skip = true; } $features = $evald->features ? $evald->features->compile($env) : null; if ($evald->skip) { return array(); } if ($evald->css) { $temp = $this->compilePath($env); return new Less_Tree_Import($this->compilePath($env), $features, $this->options, $this->index); } $parser = new Less_Parser($env); $evald->root = $parser->parseFile($full_path, $uri, true); $ruleset = new Less_Tree_Ruleset(array(), $evald->root->rules); $ruleset->evalImports($env); return $this->features ? new Less_Tree_Media($ruleset->rules, $this->features->value) : $ruleset->rules; }