9 class Less_Tree_Unit extends Less_Tree{
11 var $numerator = array();
12 var $denominator = array();
14 public $type = 'Unit';
16 public function __construct($numerator = array(), $denominator = array(), $backupUnit = null ){
17 $this->numerator = $numerator;
18 $this->denominator = $denominator;
19 $this->backupUnit = $backupUnit;
22 public function __clone(){
26 * @see Less_Tree::genCSS
28 public function genCSS( $output ){
30 if( $this->numerator ){
31 $output->add( $this->numerator[0] );
32 }elseif( $this->denominator ){
33 $output->add( $this->denominator[0] );
34 }elseif( !Less_Parser::$options['strictUnits'] && $this->backupUnit ){
35 $output->add( $this->backupUnit );
40 public function toString(){
41 $returnStr = implode('*',$this->numerator);
42 foreach($this->denominator as $d){
48 public function __toString(){
49 return $this->toString();
54 * @param Less_Tree_Unit $other
56 public function compare($other) {
57 return $this->is( $other->toString() ) ? 0 : -1;
60 public function is($unitString){
61 return $this->toString() === $unitString;
64 public function isLength(){
65 $css = $this->toCSS();
66 return !!preg_match('/px|em|%|in|cm|mm|pc|pt|ex/',$css);
69 public function isAngle() {
70 return isset( Less_Tree_UnitConversions::$angle[$this->toCSS()] );
73 public function isEmpty(){
74 return !$this->numerator && !$this->denominator;
77 public function isSingular() {
78 return count($this->numerator) <= 1 && !$this->denominator;
82 public function usedUnits(){
85 foreach(Less_Tree_UnitConversions::$groups as $groupName){
86 $group = Less_Tree_UnitConversions::${$groupName};
88 foreach($this->numerator as $atomicUnit){
89 if( isset($group[$atomicUnit]) && !isset($result[$groupName]) ){
90 $result[$groupName] = $atomicUnit;
94 foreach($this->denominator as $atomicUnit){
95 if( isset($group[$atomicUnit]) && !isset($result[$groupName]) ){
96 $result[$groupName] = $atomicUnit;
104 public function cancel(){
108 foreach($this->numerator as $atomicUnit){
110 $backup = $atomicUnit;
112 $counter[$atomicUnit] = ( isset($counter[$atomicUnit]) ? $counter[$atomicUnit] : 0) + 1;
115 foreach($this->denominator as $atomicUnit){
117 $backup = $atomicUnit;
119 $counter[$atomicUnit] = ( isset($counter[$atomicUnit]) ? $counter[$atomicUnit] : 0) - 1;
122 $this->numerator = array();
123 $this->denominator = array();
125 foreach($counter as $atomicUnit => $count){
127 for( $i = 0; $i < $count; $i++ ){
128 $this->numerator[] = $atomicUnit;
130 }elseif( $count < 0 ){
131 for( $i = 0; $i < -$count; $i++ ){
132 $this->denominator[] = $atomicUnit;
137 if( !$this->numerator && !$this->denominator && $backup ){
138 $this->backupUnit = $backup;
141 sort($this->numerator);
142 sort($this->denominator);