From 776af96b0b1c0dd6f383f7734b48246d74a58101 Mon Sep 17 00:00:00 2001 From: pantor Date: Mon, 19 Mar 2018 10:46:49 +0100 Subject: [PATCH] Use callbacks without parameters either with or without parenthesis --- src/inja.hpp | 15 ++++++++------- test/src/unit-renderer.cpp | 1 + test/src/unit-string-helper.cpp | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) 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*" ); }