]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - vendor/oyejorge/less.php/lib/Less/Tree/Rule.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / oyejorge / less.php / lib / Less / Tree / Rule.php
diff --git a/vendor/oyejorge/less.php/lib/Less/Tree/Rule.php b/vendor/oyejorge/less.php/lib/Less/Tree/Rule.php
new file mode 100644 (file)
index 0000000..ee4a9e2
--- /dev/null
@@ -0,0 +1,115 @@
+<?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);
+       }
+
+}