123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- /**
- * Rule
- *
- * @package Less
- * @subpackage tree
- */
- class Less_Tree_Rule extends Less_Tree {
- public $name;
- public $value;
- public $important;
- public $merge;
- public $index;
- public $inline;
- public $variable;
- public $currentFileInfo;
- public $type = 'Rule';
- /**
- * @param string $important
- */
- public function __construct( $name, $value = null, $important = null, $merge = null, $index = null, $currentFileInfo = null, $inline = false ) {
- $this->name = $name;
- $this->value = ( $value instanceof Less_Tree_Value || $value instanceof Less_Tree_Ruleset ) ? $value : new Less_Tree_Value( array( $value ) );
- $this->important = $important ? ' ' . trim( $important ) : '';
- $this->merge = $merge;
- $this->index = $index;
- $this->currentFileInfo = $currentFileInfo;
- $this->inline = $inline;
- $this->variable = ( is_string( $name ) && $name[0] === '@' );
- }
- public function accept( $visitor ) {
- $this->value = $visitor->visitObj( $this->value );
- }
- /**
- * @see Less_Tree::genCSS
- */
- public function genCSS( $output ) {
- $output->add( $this->name . Less_Environment::$_outputMap[': '], $this->currentFileInfo, $this->index );
- try{
- $this->value->genCSS( $output );
- }catch ( Less_Exception_Parser $e ) {
- $e->index = $this->index;
- $e->currentFile = $this->currentFileInfo;
- throw $e;
- }
- $output->add( $this->important . ( ( $this->inline || ( Less_Environment::$lastRule && Less_Parser::$options['compress'] ) ) ? "" : ";" ), $this->currentFileInfo, $this->index );
- }
- public function compile( $env ) {
- $name = $this->name;
- if ( is_array( $name ) ) {
- // expand 'primitive' name directly to get
- // things faster (~10% for benchmark.less):
- if ( count( $name ) === 1 && $name[0] instanceof Less_Tree_Keyword ) {
- $name = $name[0]->value;
- } else {
- $name = $this->CompileName( $env, $name );
- }
- }
- $strictMathBypass = Less_Parser::$options['strictMath'];
- if ( $name === "font" && !Less_Parser::$options['strictMath'] ) {
- Less_Parser::$options['strictMath'] = true;
- }
- try {
- $evaldValue = $this->value->compile( $env );
- if ( !$this->variable && $evaldValue->type === "DetachedRuleset" ) {
- throw new Less_Exception_Compiler( "Rulesets cannot be evaluated on a property.", null, $this->index, $this->currentFileInfo );
- }
- if ( Less_Environment::$mixin_stack ) {
- $return = new Less_Tree_Rule( $name, $evaldValue, $this->important, $this->merge, $this->index, $this->currentFileInfo, $this->inline );
- } else {
- $this->name = $name;
- $this->value = $evaldValue;
- $return = $this;
- }
- }catch ( Less_Exception_Parser $e ) {
- if ( !is_numeric( $e->index ) ) {
- $e->index = $this->index;
- $e->currentFile = $this->currentFileInfo;
- }
- throw $e;
- }
- Less_Parser::$options['strictMath'] = $strictMathBypass;
- return $return;
- }
- public function CompileName( $env, $name ) {
- $output = new Less_Output();
- foreach ( $name as $n ) {
- $n->compile( $env )->genCSS( $output );
- }
- return $output->toString();
- }
- public function makeImportant() {
- return new Less_Tree_Rule( $this->name, $this->value, '!important', $this->merge, $this->index, $this->currentFileInfo, $this->inline );
- }
- }
|