Expression.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. /**
  3. * Expression
  4. *
  5. * @package Less
  6. * @subpackage tree
  7. */
  8. class Less_Tree_Expression extends Less_Tree {
  9. public $value = array();
  10. public $parens = false;
  11. public $parensInOp = false;
  12. public $type = 'Expression';
  13. public function __construct( $value, $parens = null ) {
  14. $this->value = $value;
  15. $this->parens = $parens;
  16. }
  17. public function accept( $visitor ) {
  18. $this->value = $visitor->visitArray( $this->value );
  19. }
  20. public function compile( $env ) {
  21. $doubleParen = false;
  22. if ( $this->parens && !$this->parensInOp ) {
  23. Less_Environment::$parensStack++;
  24. }
  25. $returnValue = null;
  26. if ( $this->value ) {
  27. $count = count( $this->value );
  28. if ( $count > 1 ) {
  29. $ret = array();
  30. foreach ( $this->value as $e ) {
  31. $ret[] = $e->compile( $env );
  32. }
  33. $returnValue = new Less_Tree_Expression( $ret );
  34. } else {
  35. if ( ( $this->value[0] instanceof Less_Tree_Expression ) && $this->value[0]->parens && !$this->value[0]->parensInOp ) {
  36. $doubleParen = true;
  37. }
  38. $returnValue = $this->value[0]->compile( $env );
  39. }
  40. } else {
  41. $returnValue = $this;
  42. }
  43. if ( $this->parens ) {
  44. if ( !$this->parensInOp ) {
  45. Less_Environment::$parensStack--;
  46. } elseif ( !Less_Environment::isMathOn() && !$doubleParen ) {
  47. $returnValue = new Less_Tree_Paren( $returnValue );
  48. }
  49. }
  50. return $returnValue;
  51. }
  52. /**
  53. * @see Less_Tree::genCSS
  54. */
  55. public function genCSS( $output ) {
  56. $val_len = count( $this->value );
  57. for ( $i = 0; $i < $val_len; $i++ ) {
  58. $this->value[$i]->genCSS( $output );
  59. if ( $i + 1 < $val_len ) {
  60. $output->add( ' ' );
  61. }
  62. }
  63. }
  64. public function throwAwayComments() {
  65. if ( is_array( $this->value ) ) {
  66. $new_value = array();
  67. foreach ( $this->value as $v ) {
  68. if ( $v instanceof Less_Tree_Comment ) {
  69. continue;
  70. }
  71. $new_value[] = $v;
  72. }
  73. $this->value = $new_value;
  74. }
  75. }
  76. }