Fix failing partials example.
Only prepend $indent to the first output on a new line.
This commit is contained in:
@@ -20,6 +20,7 @@ class Compiler {
|
|||||||
|
|
||||||
private $sections;
|
private $sections;
|
||||||
private $source;
|
private $source;
|
||||||
|
private $indentNextLine;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compile a Mustache token parse tree into PHP source code.
|
* Compile a Mustache token parse tree into PHP source code.
|
||||||
@@ -31,8 +32,9 @@ class Compiler {
|
|||||||
* @return string Generated PHP source code
|
* @return string Generated PHP source code
|
||||||
*/
|
*/
|
||||||
public function compile($source, array $tree, $name) {
|
public function compile($source, array $tree, $name) {
|
||||||
$this->sections = array();
|
$this->sections = array();
|
||||||
$this->source = $source;
|
$this->source = $source;
|
||||||
|
$this->indentNextLine = true;
|
||||||
|
|
||||||
return $this->writeCode($tree, $name);
|
return $this->writeCode($tree, $name);
|
||||||
}
|
}
|
||||||
@@ -243,7 +245,7 @@ class Compiler {
|
|||||||
->loadLambda((string) call_user_func($value))
|
->loadLambda((string) call_user_func($value))
|
||||||
->renderInternal($context, $indent);
|
->renderInternal($context, $indent);
|
||||||
}
|
}
|
||||||
$buffer .= $indent . %s;
|
$buffer .= %s%s;
|
||||||
';
|
';
|
||||||
const VARIABLE_ESCAPED = 'htmlspecialchars($value, ENT_COMPAT, $this->mustache->getCharset())';
|
const VARIABLE_ESCAPED = 'htmlspecialchars($value, ENT_COMPAT, $this->mustache->getCharset())';
|
||||||
|
|
||||||
@@ -259,13 +261,13 @@ class Compiler {
|
|||||||
private function variable($id, $escape, $level) {
|
private function variable($id, $escape, $level) {
|
||||||
$method = $this->getFindMethod($id);
|
$method = $this->getFindMethod($id);
|
||||||
$id = ($method !== 'last') ? var_export($id, true) : '';
|
$id = ($method !== 'last') ? var_export($id, true) : '';
|
||||||
$escape = $escape ? self::VARIABLE_ESCAPED : '$value';
|
$value = $escape ? self::VARIABLE_ESCAPED : '$value';
|
||||||
|
|
||||||
return sprintf($this->prepare(self::VARIABLE, $level), $method, $id, $escape);
|
return sprintf($this->prepare(self::VARIABLE, $level), $method, $id, $this->flushIndent(), $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
const LINE = '$buffer .= "\n";';
|
const LINE = '$buffer .= "\n";';
|
||||||
const TEXT = '$buffer .= $indent . %s;';
|
const TEXT = '$buffer .= %s%s;';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generate Mustache Template output Buffer call PHP source.
|
* Generate Mustache Template output Buffer call PHP source.
|
||||||
@@ -277,9 +279,11 @@ class Compiler {
|
|||||||
*/
|
*/
|
||||||
private function text($text, $level) {
|
private function text($text, $level) {
|
||||||
if ($text === "\n") {
|
if ($text === "\n") {
|
||||||
|
$this->indentNextLine = true;
|
||||||
|
|
||||||
return $this->prepare(self::LINE, $level);
|
return $this->prepare(self::LINE, $level);
|
||||||
} else {
|
} else {
|
||||||
return sprintf($this->prepare(self::TEXT, $level), var_export($text, true));
|
return sprintf($this->prepare(self::TEXT, $level), $this->flushIndent(), var_export($text, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -323,4 +327,21 @@ class Compiler {
|
|||||||
return 'findDot';
|
return 'findDot';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const LINE_INDENT = '$indent . ';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current $indent prefix to write to the buffer.
|
||||||
|
*
|
||||||
|
* @return string "$indent . " or ""
|
||||||
|
*/
|
||||||
|
private function flushIndent() {
|
||||||
|
if ($this->indentNextLine) {
|
||||||
|
$this->indentNextLine = false;
|
||||||
|
|
||||||
|
return self::LINE_INDENT;
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,9 +65,9 @@ class CompilerTest extends \PHPUnit_Framework_TestCase {
|
|||||||
'$buffer .= $indent . \'foo\'',
|
'$buffer .= $indent . \'foo\'',
|
||||||
'$buffer .= "\n"',
|
'$buffer .= "\n"',
|
||||||
'$value = $context->find(\'name\');',
|
'$value = $context->find(\'name\');',
|
||||||
'$buffer .= $indent . htmlspecialchars($value, ENT_COMPAT, $this->mustache->getCharset());',
|
'$buffer .= htmlspecialchars($value, ENT_COMPAT, $this->mustache->getCharset());',
|
||||||
'$value = $context->last();',
|
'$value = $context->last();',
|
||||||
'$buffer .= $indent . \'\\\'bar\\\'\';',
|
'$buffer .= \'\\\'bar\\\'\';',
|
||||||
'return $buffer;',
|
'return $buffer;',
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user