Commit 97c7d6c3 authored by Taddeus Kroes's avatar Taddeus Kroes

Added default value to template expression grammar.

parent ba551f93
...@@ -71,9 +71,11 @@ require_once 'node.php'; ...@@ -71,9 +71,11 @@ require_once 'node.php';
* curly brackets: *{expression}*. The grammar of all expressions that are * curly brackets: *{expression}*. The grammar of all expressions that are
* currently supported can be described as follows: * currently supported can be described as follows:
* <code> * <code>
* &lt;expression&gt; : {&lt;nested_exp&gt;} * &lt;expression&gt; : {&lt;exp&gt;}
* | {&lt;nested_exp&gt;?&lt;nested_exp&gt;:&lt;nested_exp&gt;} # Conditional statement * &lt;exp&gt; : &lt;nested_exp&gt;
* | &lt;nested_exp&gt;?&lt;nested_exp&gt;:&lt;nested_exp&gt; # Conditional statement
* &lt;nested_exp&gt; : &lt;variable&gt; * &lt;nested_exp&gt; : &lt;variable&gt;
* | &lt;nested_exp&gt;||&lt;nested_exp&gt; # Default value
* | &lt;function&gt;(&lt;nested_exp&gt;) # Static function call * | &lt;function&gt;(&lt;nested_exp&gt;) # Static function call
* | &lt;constant&gt; * | &lt;constant&gt;
* | &lt;html&gt; * | &lt;html&gt;
...@@ -83,7 +85,7 @@ require_once 'node.php'; ...@@ -83,7 +85,7 @@ require_once 'node.php';
* &lt;function&gt; : &lt;name&gt; # Global function * &lt;function&gt; : &lt;name&gt; # Global function
* | &lt;name&gt;::&lt;name&gt; # Static class method * | &lt;name&gt;::&lt;name&gt; # Static class method
* &lt;constant&gt; : An all-caps PHP constant: [A-Z0-9_]+ * &lt;constant&gt; : An all-caps PHP constant: [A-Z0-9_]+
* &lt;html&gt; : A string without parentheses, curly brackets or semicolons: [^(){}:]* * &lt;html&gt; : A string without parentheses, pipes, curly brackets or semicolons: [^()|{}:]*
* &lt;name&gt; : A non-empty variable/method name consisting of [a-zA-Z0-9-_]+ * &lt;name&gt; : A non-empty variable/method name consisting of [a-zA-Z0-9-_]+
* </code> * </code>
* *
...@@ -423,6 +425,13 @@ class Template extends Node { ...@@ -423,6 +425,13 @@ class Template extends Node {
} elseif( preg_match("/^([A-Z0-9_]+)$/", $expression, $matches) ) { } elseif( preg_match("/^([A-Z0-9_]+)$/", $expression, $matches) ) {
// <constant> // <constant>
return self::evaluate_constant($expression, $root_level); return self::evaluate_constant($expression, $root_level);
} elseif( ($split_at = strpos($expression, '||', 1)) !== false ) {
// <nested_exp>||<nested_exp>
try {
return self::evaluate_expression(substr($expression, 0, $split_at), $data, false);
} catch(\RuntimeException $e) {
return self::evaluate_expression(substr($expression, $split_at + 2), $data, false);
}
} }
} }
......
...@@ -334,11 +334,18 @@ class TemplateTest extends PHPUnit_Framework_TestCase { ...@@ -334,11 +334,18 @@ class TemplateTest extends PHPUnit_Framework_TestCase {
$this->assert_evaluates('Bar', 'ucfirst(strtolower($FOO))'); $this->assert_evaluates('Bar', 'ucfirst(strtolower($FOO))');
} }
function test_evaluate_default_value() {
$this->assert_evaluates('bar', '$foo||fallback');
$this->assert_evaluates('fallback', '$foo.bar||fallback');
$this->assert_evaluates('', '$foo.bar||');
}
/** /**
* @depends test_evaluate_variable_success * @depends test_evaluate_variable_success
* @depends test_evaluate_no_expression * @depends test_evaluate_no_expression
* @depends test_evaluate_condition_spaces * @depends test_evaluate_condition_spaces
* @depends test_evaluate_function_success * @depends test_evaluate_function_success
* @depends test_evaluate_default_value
*/ */
function test_evaluate_expression_combined() { function test_evaluate_expression_combined() {
$this->assert_evaluates('Bar', '$true?ucfirst($foo)'); $this->assert_evaluates('Bar', '$true?ucfirst($foo)');
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment