123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- /**
- * Unit
- *
- * @package Less
- * @subpackage tree
- */
- class Less_Tree_Unit extends Less_Tree {
- var $numerator = array();
- var $denominator = array();
- public $backupUnit;
- public $type = 'Unit';
- public function __construct( $numerator = array(), $denominator = array(), $backupUnit = null ) {
- $this->numerator = $numerator;
- $this->denominator = $denominator;
- $this->backupUnit = $backupUnit;
- }
- public function __clone() {
- }
- /**
- * @see Less_Tree::genCSS
- */
- public function genCSS( $output ) {
- if ( $this->numerator ) {
- $output->add( $this->numerator[0] );
- } elseif ( $this->denominator ) {
- $output->add( $this->denominator[0] );
- } elseif ( !Less_Parser::$options['strictUnits'] && $this->backupUnit ) {
- $output->add( $this->backupUnit );
- return;
- }
- }
- public function toString() {
- $returnStr = implode( '*', $this->numerator );
- foreach ( $this->denominator as $d ) {
- $returnStr .= '/'.$d;
- }
- return $returnStr;
- }
- public function __toString() {
- return $this->toString();
- }
- /**
- * @param Less_Tree_Unit $other
- */
- public function compare( $other ) {
- return $this->is( $other->toString() ) ? 0 : -1;
- }
- public function is( $unitString ) {
- return $this->toString() === $unitString;
- }
- public function isLength() {
- $css = $this->toCSS();
- return !!preg_match( '/px|em|%|in|cm|mm|pc|pt|ex/', $css );
- }
- public function isAngle() {
- return isset( Less_Tree_UnitConversions::$angle[$this->toCSS()] );
- }
- public function isEmpty() {
- return !$this->numerator && !$this->denominator;
- }
- public function isSingular() {
- return count( $this->numerator ) <= 1 && !$this->denominator;
- }
- public function usedUnits() {
- $result = array();
- foreach ( Less_Tree_UnitConversions::$groups as $groupName ) {
- $group = Less_Tree_UnitConversions::${$groupName};
- foreach ( $this->numerator as $atomicUnit ) {
- if ( isset( $group[$atomicUnit] ) && !isset( $result[$groupName] ) ) {
- $result[$groupName] = $atomicUnit;
- }
- }
- foreach ( $this->denominator as $atomicUnit ) {
- if ( isset( $group[$atomicUnit] ) && !isset( $result[$groupName] ) ) {
- $result[$groupName] = $atomicUnit;
- }
- }
- }
- return $result;
- }
- public function cancel() {
- $counter = array();
- $backup = null;
- foreach ( $this->numerator as $atomicUnit ) {
- if ( !$backup ) {
- $backup = $atomicUnit;
- }
- $counter[$atomicUnit] = ( isset( $counter[$atomicUnit] ) ? $counter[$atomicUnit] : 0 ) + 1;
- }
- foreach ( $this->denominator as $atomicUnit ) {
- if ( !$backup ) {
- $backup = $atomicUnit;
- }
- $counter[$atomicUnit] = ( isset( $counter[$atomicUnit] ) ? $counter[$atomicUnit] : 0 ) - 1;
- }
- $this->numerator = array();
- $this->denominator = array();
- foreach ( $counter as $atomicUnit => $count ) {
- if ( $count > 0 ) {
- for ( $i = 0; $i < $count; $i++ ) {
- $this->numerator[] = $atomicUnit;
- }
- } elseif ( $count < 0 ) {
- for ( $i = 0; $i < -$count; $i++ ) {
- $this->denominator[] = $atomicUnit;
- }
- }
- }
- if ( !$this->numerator && !$this->denominator && $backup ) {
- $this->backupUnit = $backup;
- }
- sort( $this->numerator );
- sort( $this->denominator );
- }
- }
|