123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?php
- /* SVN FILE: $Id: SassVariableNode.php 118 2010-09-21 09:45:11Z chris.l.yates@gmail.com $ */
- /**
- * SassVariableNode class file.
- * @author Chris Yates <chris.l.yates@gmail.com>
- * @copyright Copyright (c) 2010 PBM Web Development
- * @license http://phamlp.googlecode.com/files/license.txt
- * @package PHamlP
- * @subpackage Sass.tree
- */
- /**
- * SassVariableNode class.
- * Represents a variable.
- * @package PHamlP
- * @subpackage Sass.tree
- */
- class SassVariableNode extends SassNode {
- const MATCH = '/^([!$])([\w-]+)\s*:?\s*((\|\|)?=)?\s*(.+?)\s*(!default)?;?$/i';
- const IDENTIFIER = 1;
- const NAME = 2;
- const SASS_ASSIGNMENT = 3;
- const SASS_DEFAULT = 4;
- const VALUE = 5;
- const SCSS_DEFAULT = 6;
- const SASS_IDENTIFIER = '!';
- const SCSS_IDENTIFIER = '$';
- /**
- * @var string name of the variable
- */
- private $name;
- /**
- * @var string value of the variable or expression to evaluate
- */
- private $value;
- /**
- * @var boolean whether the variable is optionally assigned
- */
- private $isDefault;
- /**
- * SassVariableNode constructor.
- * @param object source token
- * @return SassVariableNode
- */
- public function __construct($token) {
- parent::__construct($token);
- preg_match(self::MATCH, $token->source, $matches);
- if (empty($matches[self::NAME]) || ($matches[self::VALUE] === '')) {
- throw new SassVariableNodeException('Invalid variable definition; name and expression required', array(), $this);
- }
- $this->name = $matches[self::NAME];
- $this->value = $matches[self::VALUE];
- $this->isDefault = (!empty($matches[self::SASS_DEFAULT]) || !empty($matches[self::SCSS_DEFAULT]));
-
- // Warn about deprecated features
- if ($matches[self::IDENTIFIER] === self::SASS_IDENTIFIER) {
- $this->addWarning('Variables prefixed with "!" is deprecated; use "${name}"', array('{name}'=>$this->name));
- }
- if (!empty($matches[SassVariableNode::SASS_ASSIGNMENT])) {
- $this->addWarning('Setting variables with "{sassDefault}=" is deprecated; use "${name}: {value}{scssDefault}"', array('{sassDefault}'=>(!empty($matches[SassVariableNode::SASS_DEFAULT])?'||':''), '{name}'=>$this->name, '{value}'=>$this->value, '{scssDefault}'=>(!empty($matches[SassVariableNode::SASS_DEFAULT])?' !default':'')));
- }
- }
- /**
- * Parse this node.
- * Sets the variable in the current context.
- * @param SassContext the context in which this node is parsed
- * @return array the parsed node - an empty array
- */
- public function parse($context) {
- if (!$this->isDefault || !$context->hasVariable($this->name)) {
- $context->setVariable(
- $this->name, $this->evaluate($this->value, $context)
- );
- }
- $this->parseChildren($context); // Parse any warnings
- return array();
- }
- /**
- * Returns a value indicating if the token represents this type of node.
- * @param object token
- * @return boolean true if the token represents this type of node, false if not
- */
- public static function isa($token, $syntax = '') {
- return $token->source[0] === self::SASS_IDENTIFIER || $token->source[0] === self::SCSS_IDENTIFIER;
- }
- }
|