123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- <?php
- /* SVN FILE: $Id: SassContext.php 118 2010-09-21 09:45:11Z chris.l.yates@gmail.com $ */
- /**
- * SassContext 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
- */
- /**
- * SassContext class.
- * Defines the context that the parser is operating in and so allows variables
- * to be scoped.
- * A new context is created for Mixins and imported files.
- * @package PHamlP
- * @subpackage Sass.tree
- */
- class SassContext {
- /**
- * @var SassContext enclosing context
- */
- protected $parent;
- /**
- * @var array mixins defined in this context
- */
- protected $mixins = array();
- /**
- * @var array variables defined in this context
- */
- protected $variables = array();
- /**
- * @var SassNode the node being processed
- */
- public $node;
- /**
- * SassContext constructor.
- * @param SassContext - the enclosing context
- * @return SassContext
- */
- public function __construct($parent = null) {
- $this->parent = $parent;
- }
- /**
- * Adds a mixin
- * @param string name of mixin
- * @return SassMixinDefinitionNode the mixin
- */
- public function addMixin($name, $mixin) {
- $this->mixins[$name] = $mixin;
- return $this;
- }
- /**
- * Returns a mixin
- * @param string name of mixin to return
- * @return SassMixinDefinitionNode the mixin
- * @throws SassContextException if mixin not defined in this context
- */
- public function getMixin($name) {
- if (isset($this->mixins[$name])) {
- return $this->mixins[$name];
- }
- elseif (!empty($this->parent)) {
- return $this->parent->getMixin($name);
- }
- throw new SassContextException('Undefined {what}: {name}', array('{what}'=>'Mixin', '{name}'=>$name), $this->node);
- }
- /**
- * Returns a variable defined in this context
- * @param string name of variable to return
- * @return string the variable
- * @throws SassContextException if variable not defined in this context
- */
- public function getVariable($name) {
- if (isset($this->variables[$name])) {
- return $this->variables[$name];
- }
- elseif (!empty($this->parent)) {
- return $this->parent->getVariable($name);
- }
- else {
- throw new SassContextException('Undefined {what}: {name}', array('{what}'=>'Variable', '{name}'=>$name), $this->node);
- }
- }
- /**
- * Returns a value indicating if the variable exists in this context
- * @param string name of variable to test
- * @return boolean true if the variable exists in this context, false if not
- */
- public function hasVariable($name) {
- return isset($this->variables[$name]);
- }
- /**
- * Sets a variable to the given value
- * @param string name of variable
- * @param sassLiteral value of variable
- */
- public function setVariable($name, $value) {
- $this->variables[$name] = $value;
- return $this;
- }
- /**
- * Makes variables and mixins from this context available in the parent context.
- * Note that if there are variables or mixins with the same name in the two
- * contexts they will be set to that defined in this context.
- */
- public function merge() {
- $this->parent->variables =
- array_merge($this->parent->variables, $this->variables);
- $this->parent->mixins = array_merge($this->parent->mixins, $this->mixins);
- }
- }
|