SassMixinNode.php in Sassy 7
File
phamlp/sass/tree/SassMixinNode.php
View source
<?php
class SassMixinNode extends SassNode {
const NODE_IDENTIFIER = '+';
const MATCH = '/^(\\+|@include\\s+)([-\\w]+)\\s*(?:\\((.*?)\\))?$/i';
const IDENTIFIER = 1;
const NAME = 2;
const ARGS = 3;
private $name;
private $args = array();
public function __construct($token) {
parent::__construct($token);
preg_match(self::MATCH, $token->source, $matches);
$this->name = $matches[self::NAME];
if (isset($matches[self::ARGS])) {
$this->args = SassScriptFunction::extractArgs($matches[self::ARGS]);
}
}
public function parse($pcontext) {
$mixin = $pcontext
->getMixin($this->name);
$context = new SassContext($pcontext);
$argc = count($this->args);
$count = 0;
foreach ($mixin->args as $name => $value) {
if ($count < $argc) {
$context
->setVariable($name, $this
->evaluate($this->args[$count++], $context));
}
elseif (!is_null($value)) {
$context
->setVariable($name, $this
->evaluate($value, $context));
}
else {
throw new SassMixinNodeException("Mixin::{mname}: Required variable ({vname}) not given.\nMixin defined: {dfile}::{dline}\nMixin used", array(
'{vname}' => $name,
'{mname}' => $this->name,
'{dfile}' => $mixin->token->filename,
'{dline}' => $mixin->token->line,
), $this);
}
}
$children = array();
foreach ($mixin->children as $child) {
$child->parent = $this;
$children = array_merge($children, $child
->parse($context));
}
return $children;
}
public static function isa($token) {
return $token->source[0] === self::NODE_IDENTIFIER;
}
}
Classes
Name |
Description |
SassMixinNode |
SassMixinNode class.
Represents a Mixin.
@package PHamlP
@subpackage Sass.tree |