summaryrefslogtreecommitdiffstats
path: root/vendor/wikimedia/less.php/lib/Less/Tree/Rule.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/wikimedia/less.php/lib/Less/Tree/Rule.php')
-rw-r--r--vendor/wikimedia/less.php/lib/Less/Tree/Rule.php115
1 files changed, 115 insertions, 0 deletions
diff --git a/vendor/wikimedia/less.php/lib/Less/Tree/Rule.php b/vendor/wikimedia/less.php/lib/Less/Tree/Rule.php
new file mode 100644
index 0000000..842ad0c
--- /dev/null
+++ b/vendor/wikimedia/less.php/lib/Less/Tree/Rule.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * @private
+ */
+class Less_Tree_Rule extends Less_Tree {
+
+ public $name;
+ /** @var Less_Tree $value */
+ 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
+ : new Less_Tree_Value( [ $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 );
+ }
+
+ /**
+ * @param Less_Environment $env
+ * @return Less_Tree_Rule
+ */
+ 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 );
+ }
+
+}