/** * Creates and returns the next SassNode. * The tpye of SassNode depends on the content of the SassToken. * @return SassNode a SassNode of the appropriate type. Null when no more * source to parse. */ public function getNode($node) { $token = $this->getToken(); if (empty($token)) { return null; } switch (true) { case SassDirectiveNode::isa($token): return $this->parseDirective($token, $node); case SassCommentNode::isa($token): return new SassCommentNode($token); case SassVariableNode::isa($token): return new SassVariableNode($token); case SassPropertyNode::isa(array('token' => $token, 'syntax' => $this->property_syntax)): return new SassPropertyNode($token, $this->property_syntax); case SassFunctionDefinitionNode::isa($token): return new SassFunctionDefinitionNode($token); case SassMixinDefinitionNode::isa($token): if ($this->syntax === SassFile::SCSS) { if ($this->debug) { throw new SassException('Mixin definition shortcut not allowed in SCSS', $this); } return; } else { return new SassMixinDefinitionNode($token); } case SassMixinNode::isa($token): if ($this->syntax === SassFile::SCSS) { if ($this->debug) { throw new SassException('Mixin include shortcut not allowed in SCSS', $this); } return; } else { return new SassMixinNode($token); } default: return new SassRuleNode($token); break; } // switch }
/** * Parses a variable * @param array line to parse * @return SassVariableNode variable node */ private function parseVariable($line) { $matches = SassVariableNode::match($line); return new SassVariableNode($matches[SassVariableNode::NAME], $matches[SassVariableNode::VALUE], $matches[SassVariableNode::ASSIGNMENT] === SassVariableNode::IS_OPTIONAL); }
/** * Creates and returns the next SassNode. * The tpye of SassNode depends on the content of the SassToken. * @return SassNode a SassNode of the appropriate type. Null when no more * source to parse. */ private function getNode($node) { $token = $this->getToken(); if (empty($token)) { return null; } switch (true) { case SassDirectiveNode::isa($token): return $this->parseDirective($token, $node); break; case SassCommentNode::isa($token): return new SassCommentNode($token); break; case SassVariableNode::isa($token): return new SassVariableNode($token); break; case SassPropertyNode::isa($token, $this->property_syntax): return new SassPropertyNode($token, $this->property_syntax); break; case SassMixinDefinitionNode::isa($token): if ($this->syntax === SassFile::SCSS) { throw new SassException('Mixin {which} shortcut not allowed in SCSS', array('{which}' => 'definition'), $this); } return new SassMixinDefinitionNode($token); break; case SassMixinNode::isa($token): if ($this->syntax === SassFile::SCSS) { throw new SassException('Mixin {which} shortcut not allowed in SCSS', array('{which}' => 'include'), $this); } return new SassMixinNode($token); break; default: return new SassRuleNode($token); break; } // switch }
/** * Parses a variable * @param array line to parse * @return SassVariableNode variable node */ private function parseVariable($line) { $matches = SassVariableNode::match($line, $this->options['propertySyntax']); return new SassVariableNode($matches[SassVariableNode::NAME], $matches[SassVariableNode::VALUE], $matches[SassVariableNode::ASSIGNMENT] === SassVariableNode::IS_OPTIONAL); }