144 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/**
 | 
						|
 * This file is part of the Peast package
 | 
						|
 *
 | 
						|
 * (c) Marco Marchiò <marco.mm89@gmail.com>
 | 
						|
 *
 | 
						|
 * For the full copyright and license information refer to the LICENSE file
 | 
						|
 * distributed with this source code
 | 
						|
 */
 | 
						|
namespace Peast\Syntax\Node;
 | 
						|
 | 
						|
/**
 | 
						|
 * A node that represents a template literal.
 | 
						|
 * For example: `this is a ${test()} template`
 | 
						|
 * 
 | 
						|
 * @author Marco Marchiò <marco.mm89@gmail.com>
 | 
						|
 */
 | 
						|
class TemplateLiteral extends Node implements Expression
 | 
						|
{
 | 
						|
    /**
 | 
						|
     * Map of node properties
 | 
						|
     * 
 | 
						|
     * @var array 
 | 
						|
     */
 | 
						|
    protected $propertiesMap = array(
 | 
						|
        "parts" => true,
 | 
						|
        "quasis" => false,
 | 
						|
        "expressions" => false
 | 
						|
    );
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Array of quasis that are the literal parts of the template
 | 
						|
     * 
 | 
						|
     * @var TemplateElement[] 
 | 
						|
     */
 | 
						|
    protected $quasis = array();
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Array of expressions inside the template
 | 
						|
     * 
 | 
						|
     * @var Expression[] 
 | 
						|
     */
 | 
						|
    protected $expressions = array();
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Returns the array of quasis that are the literal parts of the template
 | 
						|
     * 
 | 
						|
     * @return TemplateElement[] 
 | 
						|
     */
 | 
						|
    public function getQuasis()
 | 
						|
    {
 | 
						|
        return $this->quasis;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Sets the array of quasis that are the literal parts of the template
 | 
						|
     * 
 | 
						|
     * @param TemplateElement[] $quasis Quasis
 | 
						|
     * 
 | 
						|
     * @return $this
 | 
						|
     */
 | 
						|
    public function setQuasis($quasis)
 | 
						|
    {
 | 
						|
        $this->assertArrayOf($quasis, "TemplateElement");
 | 
						|
        $this->quasis = $quasis;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Returns the array of expressions inside the template
 | 
						|
     * 
 | 
						|
     * @return Expression[]
 | 
						|
     */
 | 
						|
    public function getExpressions()
 | 
						|
    {
 | 
						|
        return $this->expressions;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Sets the array of expressions inside the template
 | 
						|
     * 
 | 
						|
     * @param Expression[] $expressions Expressions
 | 
						|
     * 
 | 
						|
     * @return $this
 | 
						|
     */
 | 
						|
    public function setExpressions($expressions)
 | 
						|
    {
 | 
						|
        $this->assertArrayOf($expressions, "Expression");
 | 
						|
        $this->expressions = $expressions;
 | 
						|
        return $this;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Returns an array of the template parts (quasis and expressions)
 | 
						|
     * 
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    public function getParts()
 | 
						|
    {
 | 
						|
        // It must be a list of quasis and expressions alternated
 | 
						|
        $parts = array();
 | 
						|
        foreach ($this->quasis as $k => $val) {
 | 
						|
            $parts[] = $val;
 | 
						|
            if (isset($this->expressions[$k])) {
 | 
						|
                $parts[] = $this->expressions[$k];
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return $parts;
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Sets the array of the template parts (quasis and expressions)
 | 
						|
     * 
 | 
						|
     * @param array Template parts
 | 
						|
     * 
 | 
						|
     * @return $this
 | 
						|
     */
 | 
						|
    public function setParts($parts)
 | 
						|
    {
 | 
						|
        $this->assertArrayOf($parts, array("Expression", "TemplateElement"));
 | 
						|
        $quasis = $expressions = array();
 | 
						|
        foreach ($parts as $part) {
 | 
						|
            if ($part instanceof TemplateElement) {
 | 
						|
                $quasis[] = $part;
 | 
						|
            } else {
 | 
						|
                $expressions[] = $part;
 | 
						|
            }
 | 
						|
        }
 | 
						|
        return $this->setQuasis($quasis)->setExpressions($expressions);
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * Returns a serializable version of the node
 | 
						|
     * 
 | 
						|
     * @return array
 | 
						|
     */
 | 
						|
    #[\ReturnTypeWillChange]
 | 
						|
    public function jsonSerialize()
 | 
						|
    {
 | 
						|
        $ret = parent::jsonSerialize();
 | 
						|
        unset($ret["parts"]);
 | 
						|
        return $ret;
 | 
						|
    }
 | 
						|
} |