12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <?php
- /* SVN FILE: $Id: SassMixinDefinitionNode.php 118 2010-09-21 09:45:11Z chris.l.yates@gmail.com $ */
- /**
- * SassMixinDefinitionNode class file.
- * @author Chris Yates <chris.l.yates@gmail.com>
- * @copyright Copyright (c) 2010 PBM Web Development
- * @license http://phamlp.googlecode.com/files/license.txt
- * @package PHamlP
- * @subpackage Sass.tree
- */
- /**
- * SassMixinDefinitionNode class.
- * Represents a Mixin definition.
- * @package PHamlP
- * @subpackage Sass.tree
- */
- class SassMixinDefinitionNode extends SassNode {
- const NODE_IDENTIFIER = '=';
- const MATCH = '/^(=|@mixin\s+)([-\w]+)\s*(?:\((.+?)\))?\s*$/i';
- const IDENTIFIER = 1;
- const NAME = 2;
- const ARGUMENTS = 3;
- /**
- * @var string name of the mixin
- */
- private $name;
- /**
- * @var array arguments for the mixin as name=>value pairs were value is the
- * default value or null for required arguments
- */
- private $args = array();
- /**
- * SassMixinDefinitionNode constructor.
- * @param object source token
- * @return SassMixinDefinitionNode
- */
- public function __construct($token) {
- if ($token->level !== 0) {
- throw new SassMixinDefinitionNodeException('Mixins can only be defined at root level', array(), $this);
- }
- parent::__construct($token);
- preg_match(self::MATCH, $token->source, $matches);
- if (empty($matches)) {
- throw new SassMixinDefinitionNodeException('Invalid {what}', array('{what}'=>'Mixin'), $this);
- }
- $this->name = $matches[self::NAME];
- if (isset($matches[self::ARGUMENTS])) {
- foreach (explode(',', $matches[self::ARGUMENTS]) as $arg) {
- $arg = explode(
- ($matches[self::IDENTIFIER] === self::NODE_IDENTIFIER ? '=' : ':'),
- trim($arg)
- );
- $this->args[substr(trim($arg[0]), 1)] = (count($arg) == 2 ? trim($arg[1]) : null);
- } // foreach
- }
- }
- /**
- * Parse this node.
- * Add this mixin to the current context.
- * @param SassContext the context in which this node is parsed
- * @return array the parsed node - an empty array
- */
- public function parse($context) {
- $context->addMixin($this->name, $this);
- return array();
- }
- /**
- * Returns the arguments with default values for this mixin
- * @return array the arguments with default values for this mixin
- */
- public function getArgs() {
- return $this->args;
- }
- /**
- * Returns a value indicating if the token represents this type of node.
- * @param object token
- * @return boolean true if the token represents this type of node, false if not
- */
- public static function isa($token, $syntax = '') {
- return $token->source[0] === self::NODE_IDENTIFIER;
- }
- }
|