import.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <?php
  2. /*
  3. class Less_Visitor_import extends Less_VisitorReplacing{
  4. public $_visitor;
  5. public $_importer;
  6. public $importCount;
  7. function __construct( $evalEnv ){
  8. $this->env = $evalEnv;
  9. $this->importCount = 0;
  10. parent::__construct();
  11. }
  12. function run( $root ){
  13. $root = $this->visitObj($root);
  14. $this->isFinished = true;
  15. //if( $this->importCount === 0) {
  16. // $this->_finish();
  17. //}
  18. }
  19. function visitImport($importNode, &$visitDeeper ){
  20. $importVisitor = $this;
  21. $inlineCSS = $importNode->options['inline'];
  22. if( !$importNode->css || $inlineCSS ){
  23. $evaldImportNode = $importNode->compileForImport($this->env);
  24. if( $evaldImportNode && (!$evaldImportNode->css || $inlineCSS) ){
  25. $importNode = $evaldImportNode;
  26. $this->importCount++;
  27. $env = clone $this->env;
  28. if( (isset($importNode->options['multiple']) && $importNode->options['multiple']) ){
  29. $env->importMultiple = true;
  30. }
  31. //get path & uri
  32. $path_and_uri = null;
  33. if( is_callable(Less_Parser::$options['import_callback']) ){
  34. $path_and_uri = call_user_func(Less_Parser::$options['import_callback'],$importNode);
  35. }
  36. if( !$path_and_uri ){
  37. $path_and_uri = $importNode->PathAndUri();
  38. }
  39. if( $path_and_uri ){
  40. list($full_path, $uri) = $path_and_uri;
  41. }else{
  42. $full_path = $uri = $importNode->getPath();
  43. }
  44. //import once
  45. if( $importNode->skip( $full_path, $env) ){
  46. return array();
  47. }
  48. if( $importNode->options['inline'] ){
  49. //todo needs to reference css file not import
  50. //$contents = new Less_Tree_Anonymous($importNode->root, 0, array('filename'=>$importNode->importedFilename), true );
  51. Less_Parser::AddParsedFile($full_path);
  52. $contents = new Less_Tree_Anonymous( file_get_contents($full_path), 0, array(), true );
  53. if( $importNode->features ){
  54. return new Less_Tree_Media( array($contents), $importNode->features->value );
  55. }
  56. return array( $contents );
  57. }
  58. // css ?
  59. if( $importNode->css ){
  60. $features = ( $importNode->features ? $importNode->features->compile($env) : null );
  61. return new Less_Tree_Import( $importNode->compilePath( $env), $features, $importNode->options, $this->index);
  62. }
  63. return $importNode->ParseImport( $full_path, $uri, $env );
  64. }
  65. }
  66. $visitDeeper = false;
  67. return $importNode;
  68. }
  69. function visitRule( $ruleNode, &$visitDeeper ){
  70. $visitDeeper = false;
  71. return $ruleNode;
  72. }
  73. function visitDirective($directiveNode, $visitArgs){
  74. array_unshift($this->env->frames,$directiveNode);
  75. return $directiveNode;
  76. }
  77. function visitDirectiveOut($directiveNode) {
  78. array_shift($this->env->frames);
  79. }
  80. function visitMixinDefinition($mixinDefinitionNode, $visitArgs) {
  81. array_unshift($this->env->frames,$mixinDefinitionNode);
  82. return $mixinDefinitionNode;
  83. }
  84. function visitMixinDefinitionOut($mixinDefinitionNode) {
  85. array_shift($this->env->frames);
  86. }
  87. function visitRuleset($rulesetNode, $visitArgs) {
  88. array_unshift($this->env->frames,$rulesetNode);
  89. return $rulesetNode;
  90. }
  91. function visitRulesetOut($rulesetNode) {
  92. array_shift($this->env->frames);
  93. }
  94. function visitMedia($mediaNode, $visitArgs) {
  95. array_unshift($this->env->frames, $mediaNode->ruleset);
  96. return $mediaNode;
  97. }
  98. function visitMediaOut($mediaNode) {
  99. array_shift($this->env->frames);
  100. }
  101. }
  102. */