diff --git a/src/inja.hpp b/src/inja.hpp index 49595fd..105f6a6 100644 --- a/src/inja.hpp +++ b/src/inja.hpp @@ -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*"}; } diff --git a/test/src/unit-renderer.cpp b/test/src/unit-renderer.cpp index 9c4f19f..ffc3331 100644 --- a/test/src/unit-renderer.cpp +++ b/test/src/unit-renderer.cpp @@ -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" ); diff --git a/test/src/unit-string-helper.cpp b/test/src/unit-string-helper.cpp index 2eadc45..4696a21 100644 --- a/test/src/unit-string-helper.cpp +++ b/test/src/unit-string-helper.cpp @@ -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*" ); }