Source of file SassMixinNode.php
Size: 2,481 Bytes - Last Modified: 2021-12-23T10:32:55+00:00
/var/www/docs.ssmods.com/process/src/code/phpsass/tree/SassMixinNode.php
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | <?php /* SVN FILE: $Id$ */ /** * SassMixinNode 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 */ /** * SassMixinNode class. * Represents a Mixin. * @package PHamlP * @subpackage Sass.tree */ class SassMixinNode extends SassNode { const NODE_IDENTIFIER = '+'; const MATCH = '/^(\+|@include\s+)([a-z0-9_-]+)\s*(?:\((.*?)\))?\s*$/i'; const IDENTIFIER = 1; const NAME = 2; const ARGS = 3; /** * @var string name of the mixin */ private $name; /** * @var array arguments for the mixin */ private $args = array(); /** * SassMixinDefinitionNode constructor. * @param object source token * @return SassMixinNode */ public function __construct($token) { parent::__construct($token); preg_match(self::MATCH, $token->source, $matches); if (!isset($matches[self::NAME])) { throw new SassMixinNodeException('Invalid mixin invocation: ($token->source)', $this); } $this->name = $matches[self::NAME]; if (isset($matches[self::ARGS]) && strlen($matches[self::ARGS])) { $this->args = SassScriptFunction::extractArgs($matches[self::ARGS], false); } } /** * Parse this node. * Set passed arguments and any optional arguments not passed to their * defaults, then render the children of the mixin definition. * @param SassContext the context in which this node is parsed * @return array the parsed node */ public function parse($pcontext) { $mixin = $pcontext->getMixin($this->name); $context = new SassContext($pcontext); $context->content = $this->children; $argc = count($this->args); $count = 0; list($arguments) = SassScriptFunction::fill_parameters($mixin->args, $this->args, $context, $this); $context->setVariables($arguments); $children = array(); foreach ($mixin->children as $child) { $child->parent = $this; $children = array_merge($children, $child->parse($context)); } // $context->merge(); return $children; } /** * 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) { return $token->source[0] === self::NODE_IDENTIFIER; } } |