SassMixinNode.php in Sassy 7.3
File
phpsass/tree/SassMixinNode.php
View source
<?php
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;
private $name;
private $args = array();
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])) {
$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 {
print_r($this->name);
print_r($mixin->token);
throw new SassMixinNodeException("Mixin::{$name}: Required variable ({$this->name}) not given.\nMixin defined: ' . {$mixin->token}->filename . '::' . {$mixin->token}->line . '\nMixin used", $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 |