class SassEachNode in Sassy 7.3
Same name and namespace in other branches
- 7 phamlp/sass/tree/SassEachNode.php \SassEachNode
SassEachNode class. Represents a Sass @each loop. @package PHamlP @subpackage Sass.tree
Hierarchy
- class \SassNode
- class \SassEachNode
Expanded class hierarchy of SassEachNode
File
- phpsass/
tree/ SassEachNode.php, line 25
View source
class SassEachNode extends SassNode {
const MATCH = '/@each\\s+[!\\$](.+?)in\\s+(.+)$/i';
const VARIABLE = 1;
const IN = 2;
/**
* @var string variable name for the loop
*/
private $variable;
/**
* @var string expression that provides the loop values
*/
private $in;
/**
* SassEachNode constructor.
* @param object source token
* @return SassEachNode
*/
public function __construct($token) {
parent::__construct($token);
if (!preg_match(self::MATCH, $token->source, $matches)) {
if ($GLOBALS['SassParser_debug']) {
throw new SassEachNodeException('Invalid @each directive', $this);
}
}
else {
$this->variable = trim($matches[self::VARIABLE]);
if (count($bits = explode(',', $this->variable)) > 1) {
$this->variable = trim(array_pop($bits), ' $,');
$this->index_name = trim($bits[0], ' $,');
}
else {
$this->index_name = 'i';
}
$this->in = $matches[self::IN];
}
}
public function getIndex_name() {
return isset($this->index_name) ? $this->index_name : 'i';
}
public function setIndex_name($value) {
$this->index_name = $value;
}
/**
* Parse this node.
* @param SassContext the context in which this node is parsed
* @return array parsed child nodes
*/
public function parse($context) {
$children = array();
if ($this->variable && $this->in) {
$context = new SassContext($context);
try {
$eval_in = $this
->evaluate($this->in, $context->parent)->value;
} catch (Exception $e) {
$eval_in = $this->in;
}
$eval_in = $this
->parse_in($eval_in);
foreach ($eval_in as $i => $in) {
$context
->setVariable($this->index_name, new SassNumber($i));
$context
->setVariable($this->variable, new SassString(trim($in)));
$children = array_merge($children, $this
->parseChildren($context));
}
}
return $children;
}
private function parse_in($string) {
$current = '';
$in_brace = FALSE;
$list = array();
if (strpos($string, '(') === FALSE) {
return explode(',', $string);
}
for ($i = 0; $i < strlen($string); $i++) {
$char = $string[$i];
if ($in_brace) {
if ($char == ')') {
$list[] = trim($current);
if (strlen($string) < $i + 1 && $string[$i + 1] == ',') {
$i++;
# skip the comma
}
$current = '';
$in_brace = FALSE;
}
else {
$current .= $char;
}
continue;
}
if ($char == '(') {
$in_brace = TRUE;
continue;
}
if ($char == ',') {
$list[] = trim($current);
$current = '';
continue;
}
$current .= $char;
}
$list[] = trim($current);
$real_list = array();
foreach ($list as $k => $v) {
if (strlen(trim($v))) {
$real_list[] = $v;
}
}
return $real_list;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
SassEachNode:: |
private | property | ||
SassEachNode:: |
private | property | ||
SassEachNode:: |
public | function | ||
SassEachNode:: |
constant | |||
SassEachNode:: |
constant | |||
SassEachNode:: |
public | function | Parse this node. | |
SassEachNode:: |
private | function | ||
SassEachNode:: |
public | function | ||
SassEachNode:: |
constant | |||
SassEachNode:: |
public | function |
SassEachNode constructor. Overrides SassNode:: |
|
SassNode:: |
public | property | ||
SassNode:: |
public | property | 1 | |
SassNode:: |
public | property | ||
SassNode:: |
public | property | ||
SassNode:: |
public | function | Adds a child to this node. | |
SassNode:: |
public | function | Adds a warning to the node. | |
SassNode:: |
public | function | Evaluates a SassScript expression. | |
SassNode:: |
public | function | Returns the node's children | |
SassNode:: |
public | function | Returns the debug_info option setting for this node | |
SassNode:: |
public | function | Returns the filename for this node | |
SassNode:: |
public | function | Returns the last child node of this node. | |
SassNode:: |
public | function | Returns the level of this node. | |
SassNode:: |
public | function | Returns the line number for this node | |
SassNode:: |
public | function | Returns the line_numbers option setting for this node | |
SassNode:: |
public | function | Returns the node's parent | |
SassNode:: |
public | function | Returns the Sass parser. | |
SassNode:: |
public | function | Returns the property syntax being used. | |
SassNode:: |
public | function | Returns the renderer. | |
SassNode:: |
public | function | Returns the SassScript parser. | |
SassNode:: |
public | function | Returns the source for this node | |
SassNode:: |
public | function | Returns the render style of the document tree. | |
SassNode:: |
public | function | Returns vendor specific properties | |
SassNode:: |
public | function | Returns a value indicating if this node has children | |
SassNode:: |
public | function | Return a value indicating if this node has a parent | |
SassNode:: |
public | function | Returns a value indicating whether this node is in a directive | |
SassNode:: |
public | function | Returns a value indicating whether this node is in a SassScript directive | |
SassNode:: |
public | function | Replace interpolated SassScript contained in '#{}' with the parsed value. | |
SassNode:: |
public static | function | Returns a value indicating if the token represents this type of node. | 9 |
SassNode:: |
public | function | Returns a value indicating if this node is a child of the passed node. This just checks the levels of the nodes. If this node is at a greater level than the passed node if is a child of it. | |
SassNode:: |
public | function | Parse the children of the node. | |
SassNode:: |
public | function | Resets children when cloned | |
SassNode:: |
public | function | Getter. | |
SassNode:: |
public | function | Setter. |