public function parseDirective($token, $parent)
{
switch (SassDirectiveNode::extractDirective($token)) {
case '@charset':
return new SassCharsetNode($token);
break;
case '@content':
return new SassContentNode($token);
break;
case '@extend':
return new SassExtendNode($token);
break;
case '@function':
return new SassFunctionDefinitionNode($token);
break;
case '@return':
return new SassReturnNode($token);
break;
case '@media':
case '@supports':
return new SassMediaNode($token);
break;
case '@mixin':
return new SassMixinDefinitionNode($token);
break;
case '@include':
return new SassMixinNode($token);
break;
case '@import':
if ($this->syntax == SassFile::SASS) {
$i = 0;
$source = '';
while (sizeof($this->source) > $i && empty($source) && isset($this->source[$i + 1])) {
$source = $this->source[$i++];
}
if (!empty($source) && $this->getLevel($source) > $token->level) {
if ($this->debug) {
throw new SassException('Nesting not allowed beneath @import directive', $token);
}
}
}
return new SassImportNode($token, $parent);
break;
case '@each':
return new SassEachNode($token);
break;
case '@for':
return new SassForNode($token);
break;
case '@if':
return new SassIfNode($token);
break;
case '@else':
// handles else and else if directives
return new SassElseNode($token);
break;
case '@do':
case '@while':
return new SassWhileNode($token);
break;
case '@warn':
return new SassWarnNode($token);
break;
case '@debug':
return new SassDebugNode($token);
break;
default:
return new SassDirectiveNode($token);
break;
}
}