mirror of
https://github.com/Mibew/handlebars.php.git
synced 2025-04-17 19:57:24 +03:00
Adding Handlebars_String to fix #12
If a helper return a Handlebars_String, then the result is compiled again.
This commit is contained in:
parent
63cd738e64
commit
65eb09d101
@ -418,6 +418,20 @@ class Handlebars_Engine
|
||||
return new Handlebars_Template($this, $tree, $source);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load string into a template object
|
||||
*
|
||||
* @param string $source string to load
|
||||
*
|
||||
* @return Handlebars_Template
|
||||
*/
|
||||
public function loadString($source)
|
||||
{
|
||||
$tree = $this->_tokenize($source);
|
||||
return new Handlebars_Template($this, $tree, $source);
|
||||
}
|
||||
|
||||
/**
|
||||
* try to tokenize source, or get them from cache if available
|
||||
*
|
||||
|
@ -2,9 +2,9 @@
|
||||
/**
|
||||
* This file is part of Handlebars-php
|
||||
* Base on mustache-php https://github.com/bobthecow/mustache.php
|
||||
*
|
||||
*
|
||||
* PHP version 5.3
|
||||
*
|
||||
*
|
||||
* @category Xamin
|
||||
* @package Handlebars
|
||||
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
/**
|
||||
* Handlebars loader interface
|
||||
*
|
||||
*
|
||||
* @category Xamin
|
||||
* @package Handlebars
|
||||
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||
@ -34,7 +34,7 @@ interface Handlebars_Loader
|
||||
*
|
||||
* @param string $name template name to load
|
||||
*
|
||||
* @return string Mustache Template source
|
||||
* @return Handlebars_String
|
||||
*/
|
||||
public function load($name);
|
||||
}
|
||||
|
@ -84,15 +84,14 @@ class Handlebars_Loader_FilesystemLoader implements Handlebars_Loader
|
||||
*
|
||||
* @param string $name template name
|
||||
*
|
||||
* @return string Handlebars Template source
|
||||
* @return Handlebars_String Handlebars Template source
|
||||
*/
|
||||
public function load($name)
|
||||
{
|
||||
if (!isset($this->_templates[$name])) {
|
||||
$this->_templates[$name] = $this->loadFile($name);
|
||||
}
|
||||
|
||||
return $this->_templates[$name];
|
||||
return new Handlebars_String($this->_templates[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2,9 +2,9 @@
|
||||
/**
|
||||
* This file is part of Handlebars-php
|
||||
* Base on mustache-php https://github.com/bobthecow/mustache.php
|
||||
*
|
||||
*
|
||||
* PHP version 5.3
|
||||
*
|
||||
*
|
||||
* @category Xamin
|
||||
* @package Handlebars
|
||||
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||
@ -34,10 +34,10 @@ class Handlebars_Loader_StringLoader implements Handlebars_Loader
|
||||
*
|
||||
* @param string $name Handlebars Template source
|
||||
*
|
||||
* @return string Handlebars Template source
|
||||
* @return Handlebars_string Handlebars Template source
|
||||
*/
|
||||
public function load($name)
|
||||
{
|
||||
return $name;
|
||||
return new Handlebars_String($name);
|
||||
}
|
||||
}
|
||||
|
74
src/Handlebars/String.php
Normal file
74
src/Handlebars/String.php
Normal file
@ -0,0 +1,74 @@
|
||||
<?php
|
||||
/**
|
||||
* This file is part of Handlebars-php
|
||||
*
|
||||
* PHP version 5.3
|
||||
*
|
||||
* @category Xamin
|
||||
* @package Handlebars
|
||||
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||
* @copyright 2013 Authors
|
||||
* @license GPLv3 <http://www.gnu.org/licenses/gpl-3.0.html>
|
||||
* @version GIT: $Id$
|
||||
* @link http://xamin.ir
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Handlebars string
|
||||
*
|
||||
* @category Xamin
|
||||
* @package Handlebars
|
||||
* @author fzerorubigd <fzerorubigd@gmail.com>
|
||||
* @copyright 2013 Authors
|
||||
* @license GPLv3 <http://www.gnu.org/licenses/gpl-3.0.html>
|
||||
* @version Release: @package_version@
|
||||
* @link http://xamin.ir
|
||||
*/
|
||||
|
||||
class Handlebars_String
|
||||
{
|
||||
private $_string;
|
||||
|
||||
/**
|
||||
* Create new string
|
||||
*
|
||||
* @param string $string input source
|
||||
*/
|
||||
public function __construct($string)
|
||||
{
|
||||
$this->_string = $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* To String
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->getString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get string
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getString()
|
||||
{
|
||||
return $this->_string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new string
|
||||
*
|
||||
* @param string $string input source
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setString($string)
|
||||
{
|
||||
$this->_string = $string;
|
||||
}
|
||||
}
|
@ -154,7 +154,7 @@ class Handlebars_Template
|
||||
array_push($this->_stack, array(0, $newStack, false));
|
||||
$buffer .= $this->_inverted($context, $current);
|
||||
array_pop($this->_stack);
|
||||
break;
|
||||
break;
|
||||
case Handlebars_Tokenizer::T_COMMENT :
|
||||
$buffer .= '';
|
||||
break;
|
||||
@ -249,7 +249,12 @@ class Handlebars_Template
|
||||
$current[Handlebars_Tokenizer::ARGS], //Arguments
|
||||
$source
|
||||
);
|
||||
return call_user_func_array($helpers->$sectionName, $params);
|
||||
$return = call_user_func_array($helpers->$sectionName, $params);
|
||||
if ($return instanceof Handlebars_String) {
|
||||
return $this->handlebars->loadString($return)->render($context);
|
||||
} else {
|
||||
return $return;
|
||||
}
|
||||
} elseif (trim($current[Handlebars_Tokenizer::ARGS]) == '') {
|
||||
//Fallback for mustache style each/with/for just if there is no argument at all.
|
||||
try {
|
||||
@ -297,7 +302,7 @@ class Handlebars_Template
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Process partial section
|
||||
*
|
||||
|
@ -106,6 +106,9 @@ class Handlebars_Tokenizer
|
||||
*/
|
||||
public function scan($text, $delimiters = null)
|
||||
{
|
||||
if ($text instanceof Handlebars_String) {
|
||||
$text = $text->getString();
|
||||
}
|
||||
$this->reset();
|
||||
|
||||
if ($delimiters = trim($delimiters)) {
|
||||
|
Loading…
Reference in New Issue
Block a user