public function sass2Token()
{
$statement = '';
// source line being tokenised
$token = null;
while ($token === null && !empty($this->source)) {
while (empty($statement) && is_array($this->source) && !empty($this->source)) {
$source = array_shift($this->source);
$statement = trim($source);
$this->line++;
}
if (empty($statement)) {
break;
}
$level = $this->getLevel($source);
// Comment statements can span multiple lines
if ($statement[0] === self::BEGIN_COMMENT) {
// Consume Sass comments
if (substr($statement, 0, strlen(self::BEGIN_SASS_COMMENT)) === self::BEGIN_SASS_COMMENT) {
unset($statement);
while ($this->getLevel($this->source[0]) > $level) {
array_shift($this->source);
$this->line++;
}
continue;
} elseif (substr($statement, 0, strlen(self::BEGIN_CSS_COMMENT)) === self::BEGIN_CSS_COMMENT) {
while ($this->getLevel($this->source[0]) > $level) {
$statement .= "\n" . ltrim(array_shift($this->source));
$this->line++;
}
} else {
$this->source = $statement;
if ($this->debug) {
throw new SassException('Illegal comment type', $this);
}
}
} elseif (substr($statement, -1) === SassRuleNode::CONTINUED) {
// Build the selector statement
while ($this->getLevel($this->source[0]) === $level) {
$statement .= ltrim(array_shift($this->source));
$this->line++;
}
}
$token = (object) array('source' => $statement, 'level' => $level, 'filename' => $this->filename, 'line' => $this->line - 1);
}
return $token;
}