mirror of
				https://github.com/Mibew/handlebars.php.git
				synced 2025-11-04 04:05:07 +03:00 
			
		
		
		
	phpcs approval
“oh the spacing!”
This commit is contained in:
		
							parent
							
								
									33c76738b4
								
							
						
					
					
						commit
						0070ad79c0
					
				@ -41,20 +41,22 @@ namespace Handlebars;
 | 
			
		||||
 | 
			
		||||
class ChildContext extends Context
 | 
			
		||||
{
 | 
			
		||||
	protected $parentContext = null;
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
	 * Sets a parent context in which
 | 
			
		||||
	 * we will case for the ../ in get()
 | 
			
		||||
	 *
 | 
			
		||||
	 * @param Context
 | 
			
		||||
	 * @return void
 | 
			
		||||
	 */
 | 
			
		||||
	public function setParent(Context $parent) {
 | 
			
		||||
		$this->parentContext = $parent;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/**
 | 
			
		||||
    protected $parentContext = null;
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Sets a parent context in which
 | 
			
		||||
     * we will case for the ../ in get()
 | 
			
		||||
     *
 | 
			
		||||
     * @param Context $parent parent context
 | 
			
		||||
     *
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function setParent(Context $parent) 
 | 
			
		||||
    {
 | 
			
		||||
        $this->parentContext = $parent;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * Get a available from current context
 | 
			
		||||
     * Supported types :
 | 
			
		||||
     * variable , ../variable , variable.variable , variable.[variable] , .
 | 
			
		||||
@ -69,17 +71,19 @@ class ChildContext extends Context
 | 
			
		||||
     */
 | 
			
		||||
    public function get($variableName, $strict = false)
 | 
			
		||||
    {
 | 
			
		||||
		//if the variable name starts with a ../
 | 
			
		||||
		//and we have a parent
 | 
			
		||||
		if(strpos($variableName, '../') === 0 && $this->parentContext instanceof Context) {
 | 
			
		||||
			//just remove the first ../
 | 
			
		||||
			$variableName = substr($variableName, 3);
 | 
			
		||||
			
 | 
			
		||||
			//and let the parent context handle the rest
 | 
			
		||||
			return $this->parentContext->get($variableName, $strict);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		//otherwise, it's business as usual
 | 
			
		||||
		return parent::get($variableName, $strict);
 | 
			
		||||
        //if the variable name starts with a ../
 | 
			
		||||
        //and we have a parent
 | 
			
		||||
        if (strpos($variableName, '../') === 0 
 | 
			
		||||
            && $this->parentContext instanceof Context
 | 
			
		||||
        ) {
 | 
			
		||||
            //just remove the first ../
 | 
			
		||||
            $variableName = substr($variableName, 3);
 | 
			
		||||
            
 | 
			
		||||
            //and let the parent context handle the rest
 | 
			
		||||
            return $this->parentContext->get($variableName, $strict);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        //otherwise, it's business as usual
 | 
			
		||||
        return parent::get($variableName, $strict);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -39,7 +39,7 @@ class Handlebars
 | 
			
		||||
    const VERSION = '1.0.0';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * factory method
 | 
			
		||||
     * Factory method
 | 
			
		||||
     *
 | 
			
		||||
     * @param array $options see __construct's options parameter
 | 
			
		||||
     *
 | 
			
		||||
@ -55,41 +55,57 @@ class Handlebars
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Current tokenizer instance
 | 
			
		||||
     *
 | 
			
		||||
     * @var Tokenizer
 | 
			
		||||
     */
 | 
			
		||||
    private $_tokenizer;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Current parser instance
 | 
			
		||||
     *
 | 
			
		||||
     * @var Parser
 | 
			
		||||
     */
 | 
			
		||||
    private $_parser;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Current helper list
 | 
			
		||||
     *
 | 
			
		||||
     * @var Helpers
 | 
			
		||||
     */
 | 
			
		||||
    private $_helpers;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Current loader instance
 | 
			
		||||
     *
 | 
			
		||||
     * @var Loader
 | 
			
		||||
     */
 | 
			
		||||
    private $_loader;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Current partial loader instance
 | 
			
		||||
     *
 | 
			
		||||
     * @var Loader
 | 
			
		||||
     */
 | 
			
		||||
    private $_partialsLoader;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Current cache instance
 | 
			
		||||
     *
 | 
			
		||||
     * @var Cache
 | 
			
		||||
     */
 | 
			
		||||
    private $_cache;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * The escape method
 | 
			
		||||
     *
 | 
			
		||||
     * @var callable escape function to use
 | 
			
		||||
     */
 | 
			
		||||
    private $_escape = 'htmlspecialchars';
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Parameters for the escpae method above
 | 
			
		||||
     *
 | 
			
		||||
     * @var array parametes to pass to escape function
 | 
			
		||||
     */
 | 
			
		||||
    private $_escapeArgs = array(
 | 
			
		||||
@ -165,8 +181,8 @@ class Handlebars
 | 
			
		||||
     * @param mixed  $data     data to use as context
 | 
			
		||||
     *
 | 
			
		||||
     * @return string Rendered template
 | 
			
		||||
     * @see Handlebars::loadTemplate
 | 
			
		||||
     * @see Template::render
 | 
			
		||||
     * @see    Handlebars::loadTemplate
 | 
			
		||||
     * @see    Template::render
 | 
			
		||||
     */
 | 
			
		||||
    public function render($template, $data)
 | 
			
		||||
    {
 | 
			
		||||
@ -235,8 +251,8 @@ class Handlebars
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getHelpers()->has($name);
 | 
			
		||||
    }
 | 
			
		||||
	
 | 
			
		||||
	 /**
 | 
			
		||||
    
 | 
			
		||||
     /**
 | 
			
		||||
     * Add a new helper.
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $name   helper name
 | 
			
		||||
@ -245,100 +261,99 @@ class Handlebars
 | 
			
		||||
     * @return void
 | 
			
		||||
     */
 | 
			
		||||
    public function registerHelper($name, $helper)
 | 
			
		||||
    {
 | 
			
		||||
        $this->addHelper($name, function($template, $context, $arg) use ($helper)
 | 
			
		||||
		{
 | 
			
		||||
			$args 	= $template->parseArguments($arg);
 | 
			
		||||
			$named 	= $template->parseNamedArguments($arg);
 | 
			
		||||
			
 | 
			
		||||
			foreach($args as $i => $arg) {
 | 
			
		||||
				//if it's literally string
 | 
			
		||||
				if($arg instanceof StringWrapper) {
 | 
			
		||||
					//we have no problems here
 | 
			
		||||
					$args[$i] = (string) $arg;
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				//not sure what to do if it's not a string or StringWrapper
 | 
			
		||||
				if(!is_string($arg)) {
 | 
			
		||||
					continue;
 | 
			
		||||
				}
 | 
			
		||||
				
 | 
			
		||||
				//it's a variable and we need to figure out the value of it
 | 
			
		||||
				$args[$i] = $context->get($arg);
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			//push the options	
 | 
			
		||||
			$args[] = array(
 | 
			
		||||
				//special fields
 | 
			
		||||
				'data' => array(
 | 
			
		||||
					'index' => $context->get('@index'),
 | 
			
		||||
					'key' => $context->get('@key'),
 | 
			
		||||
					'first' => $context->get('@first'),
 | 
			
		||||
					'last' => $context->get('@last')),
 | 
			
		||||
				// Named arguments
 | 
			
		||||
				'hash' => $named,
 | 
			
		||||
				// A renderer for block helper
 | 
			
		||||
				'fn' => function($inContext = null) use($context, $template) 
 | 
			
		||||
				{
 | 
			
		||||
					$defined = !!$inContext;
 | 
			
		||||
					
 | 
			
		||||
					if(!$defined) {
 | 
			
		||||
						$inContext = $context;
 | 
			
		||||
						$inContext->push($inContext->last());
 | 
			
		||||
					} else if (!$inContext instanceof Context) {
 | 
			
		||||
						$inContext = new ChildContext($inContext);
 | 
			
		||||
						$inContext->setParent($context);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					$template->setStopToken('else');
 | 
			
		||||
					$buffer = $template->render($inContext);
 | 
			
		||||
					$template->setStopToken(false);
 | 
			
		||||
					//what if it's a loop ?
 | 
			
		||||
					$template->rewind();
 | 
			
		||||
					//What's the point of this again?
 | 
			
		||||
					//I mean in this context (literally)
 | 
			
		||||
					//$template->discard($inContext);
 | 
			
		||||
					
 | 
			
		||||
					if($defined) {
 | 
			
		||||
						$inContext->pop();
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					return $buffer;
 | 
			
		||||
				},
 | 
			
		||||
				
 | 
			
		||||
				// A render for the else block
 | 
			
		||||
				'inverse' => function($inContext = null) use($context, $template) 
 | 
			
		||||
				{
 | 
			
		||||
					$defined = !!$inContext;
 | 
			
		||||
					
 | 
			
		||||
					if(!$defined) {
 | 
			
		||||
						$inContext = $context;
 | 
			
		||||
						$inContext->push($inContext->last());
 | 
			
		||||
					} else if (!$inContext instanceof Context) {
 | 
			
		||||
						$inContext = new ChildContext($inContext);
 | 
			
		||||
						$inContext->setParent($context);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					$template->setStopToken('else');
 | 
			
		||||
					$template->discard($inContext);
 | 
			
		||||
					$template->setStopToken(false);
 | 
			
		||||
					$buffer = $template->render($inContext);
 | 
			
		||||
					
 | 
			
		||||
					if($defined) {
 | 
			
		||||
						$inContext->pop();
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
					return $buffer;
 | 
			
		||||
				},
 | 
			
		||||
				
 | 
			
		||||
				// The current context.
 | 
			
		||||
				'context' => $context,
 | 
			
		||||
				// The current template
 | 
			
		||||
				'template' => $template);
 | 
			
		||||
			
 | 
			
		||||
			return call_user_func_array($helper, $args);
 | 
			
		||||
		});
 | 
			
		||||
    {    
 | 
			
		||||
        $callback = function ($template, $context, $arg) use ($helper) {
 | 
			
		||||
            $args = $template->parseArguments($arg);
 | 
			
		||||
            $named = $template->parseNamedArguments($arg);
 | 
			
		||||
            
 | 
			
		||||
            foreach ($args as $i => $arg) {
 | 
			
		||||
                //if it's literally string
 | 
			
		||||
                if ($arg instanceof StringWrapper) {
 | 
			
		||||
                    //we have no problems here
 | 
			
		||||
                    $args[$i] = (string) $arg;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                //not sure what to do if it's not a string or StringWrapper
 | 
			
		||||
                if (!is_string($arg)) {
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                //it's a variable and we need to figure out the value of it
 | 
			
		||||
                $args[$i] = $context->get($arg);
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            //push the options    
 | 
			
		||||
            $args[] = array(
 | 
			
		||||
                //special fields
 | 
			
		||||
                'data' => array(
 | 
			
		||||
                    'index' => $context->get('@index'),
 | 
			
		||||
                    'key' => $context->get('@key'),
 | 
			
		||||
                    'first' => $context->get('@first'),
 | 
			
		||||
                    'last' => $context->get('@last')),
 | 
			
		||||
                // Named arguments
 | 
			
		||||
                'hash' => $named,
 | 
			
		||||
                // A renderer for block helper
 | 
			
		||||
                'fn' => function ($inContext = null) use ($context, $template) {
 | 
			
		||||
                    $defined = !!$inContext;
 | 
			
		||||
                    
 | 
			
		||||
                    if (!$defined) {
 | 
			
		||||
                        $inContext = $context;
 | 
			
		||||
                        $inContext->push($inContext->last());
 | 
			
		||||
                    } else if (!$inContext instanceof Context) {
 | 
			
		||||
                        $inContext = new ChildContext($inContext);
 | 
			
		||||
                        $inContext->setParent($context);
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    $template->setStopToken('else');
 | 
			
		||||
                    $buffer = $template->render($inContext);
 | 
			
		||||
                    $template->setStopToken(false);
 | 
			
		||||
                    //what if it's a loop ?
 | 
			
		||||
                    $template->rewind();
 | 
			
		||||
                    //What's the point of this again?
 | 
			
		||||
                    //I mean in this context (literally)
 | 
			
		||||
                    //$template->discard($inContext);
 | 
			
		||||
                    
 | 
			
		||||
                    if ($defined) {
 | 
			
		||||
                        $inContext->pop();
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    return $buffer;
 | 
			
		||||
                },
 | 
			
		||||
                
 | 
			
		||||
                // A render for the else block
 | 
			
		||||
                'inverse' => function ($inContext = null) use ($context, $template) {
 | 
			
		||||
                    $defined = !!$inContext;
 | 
			
		||||
                    
 | 
			
		||||
                    if (!$defined) {
 | 
			
		||||
                        $inContext = $context;
 | 
			
		||||
                        $inContext->push($inContext->last());
 | 
			
		||||
                    } else if (!$inContext instanceof Context) {
 | 
			
		||||
                        $inContext = new ChildContext($inContext);
 | 
			
		||||
                        $inContext->setParent($context);
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    $template->setStopToken('else');
 | 
			
		||||
                    $template->discard($inContext);
 | 
			
		||||
                    $template->setStopToken(false);
 | 
			
		||||
                    $buffer = $template->render($inContext);
 | 
			
		||||
                    
 | 
			
		||||
                    if ($defined) {
 | 
			
		||||
                        $inContext->pop();
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    return $buffer;
 | 
			
		||||
                },
 | 
			
		||||
                
 | 
			
		||||
                // The current context.
 | 
			
		||||
                'context' => $context,
 | 
			
		||||
                // The current template
 | 
			
		||||
                'template' => $template);
 | 
			
		||||
            
 | 
			
		||||
            return call_user_func_array($helper, $args);
 | 
			
		||||
        };
 | 
			
		||||
    
 | 
			
		||||
        $this->addHelper($name, $callback);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@ -366,7 +381,7 @@ class Handlebars
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * get current loader
 | 
			
		||||
     * Get current loader
 | 
			
		||||
     *
 | 
			
		||||
     * @return Loader
 | 
			
		||||
     */
 | 
			
		||||
@ -392,7 +407,7 @@ class Handlebars
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * get current partials loader
 | 
			
		||||
     * Get current partials loader
 | 
			
		||||
     *
 | 
			
		||||
     * @return Loader
 | 
			
		||||
     */
 | 
			
		||||
@ -618,7 +633,7 @@ class Handlebars
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * try to tokenize source, or get them from cache if available
 | 
			
		||||
     * Try to tokenize source, or get them from cache if available
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $source handlebars source code
 | 
			
		||||
     *
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user