Use callbacks without parameters either with or without parenthesis

This commit is contained in:
pantor
2018-03-19 10:46:49 +01:00
parent b68f745866
commit 776af96b0b
3 changed files with 10 additions and 8 deletions
+8 -7
View File
@@ -597,13 +597,14 @@ public:
*/
static Regex function_regex(std::string name, int number_arguments) {
std::string pattern = name;
if (number_arguments > 0) {
pattern.append("\\(");
for (int i = 0; i < number_arguments; i++) {
if (i != 0) pattern.append(",");
pattern.append("(.*)");
}
pattern.append("\\)");
pattern.append("\\(");
for (int i = 0; i < number_arguments; i++) {
if (i != 0) pattern.append(",");
pattern.append("(.*)");
}
pattern.append("\\)");
if (number_arguments == 0) { // Without arguments, allow to use the callback without parenthesis
pattern = "(?:" + name + "|" + pattern + ")";
}
return Regex{"\\s*" + pattern + "\\s*"};
}
+1
View File
@@ -229,6 +229,7 @@ TEST_CASE("callbacks") {
CHECK( env.render("{{ double(age) }}", data) == "56" );
CHECK( env.render("{{ half(age) }}", data) == "14" );
CHECK( env.render("{{ double-greetings }}", data) == "Hello Hello!" );
CHECK( env.render("{{ double-greetings() }}", data) == "Hello Hello!" );
CHECK( env.render("{{ multiply(4, 5) }}", data) == "20.0" );
CHECK( env.render("{{ multiply(3, 4, 5) }}", data) == "60.0" );
CHECK( env.render("{{ multiply }}", data) == "1.0" );
+1 -1
View File
@@ -159,6 +159,6 @@ TEST_CASE("match-functions") {
TEST_CASE("create-regex-functions") {
CHECK( inja::Parser::function_regex("upper", 1).pattern() == "\\s*upper\\((.*)\\)\\s*" );
CHECK( inja::Parser::function_regex("upper", 0).pattern() == "\\s*upper\\s*" );
CHECK( inja::Parser::function_regex("upper", 0).pattern() == "\\s*(?:upper|upper\\(\\))\\s*" );
CHECK( inja::Parser::function_regex("lower", 2).pattern() == "\\s*lower\\((.*),(.*)\\)\\s*" );
}