mirror of
https://github.com/pantor/inja.git
synced 2026-10-13 07:47:15 +00:00
use get_argument function in callbacks
This commit is contained in:
1 parent
693bf63493
commit
f931a95800
3 files changed
+16
-12
No files matched your search
@@ -201,7 +201,7 @@ Environment env = Environment();
|
|||||||
* - callback function. Implemented with std::function, you can for example use lambdas.
|
* - callback function. Implemented with std::function, you can for example use lambdas.
|
||||||
*/
|
*/
|
||||||
env.add_callback("double", 1, [&env](Parsed::Arguments args, json data) {
|
env.add_callback("double", 1, [&env](Parsed::Arguments args, json data) {
|
||||||
const int number = env.renderer.eval_expression<int>(args[0], data); // Adapt the type and index of the argument
|
int number = env.get_argument<int>(args, 0, data); // Adapt the type and index of the argument
|
||||||
return 2 * number;
|
return 2 * number;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+11
-7
@@ -193,7 +193,6 @@ inline MatchType<T> match(const std::string& input, std::map<T, Regex> regexes)
|
|||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// throw std::runtime_error("Could not match input: " + input);
|
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -447,7 +446,7 @@ public:
|
|||||||
case Parsed::Function::Default: {
|
case Parsed::Function::Default: {
|
||||||
try {
|
try {
|
||||||
return eval_expression(element.args[0], data);
|
return eval_expression(element.args[0], data);
|
||||||
} catch (std::exception e) {
|
} catch (std::exception& exception) {
|
||||||
return eval_expression(element.args[1], data);
|
return eval_expression(element.args[1], data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -842,17 +841,22 @@ public:
|
|||||||
return parser.load_file(input_path + filename);
|
return parser.load_file(input_path + filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_callback(std::string name, int number_arguments, std::function<json(Parsed::Arguments, json)> callback) {
|
|
||||||
parser.regex_map_callbacks[name] = Parser::function_regex(name, number_arguments);
|
|
||||||
renderer.map_callbacks[name] = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
json load_json(const std::string& filename) {
|
json load_json(const std::string& filename) {
|
||||||
std::ifstream file(input_path + filename);
|
std::ifstream file(input_path + filename);
|
||||||
json j;
|
json j;
|
||||||
file >> j;
|
file >> j;
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_callback(std::string name, int number_arguments, std::function<json(Parsed::Arguments, json)> callback) {
|
||||||
|
parser.regex_map_callbacks[name] = Parser::function_regex(name, number_arguments);
|
||||||
|
renderer.map_callbacks[name] = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
T get_argument(Parsed::Arguments args, int index, json data) {
|
||||||
|
return renderer.eval_expression<T>(args[index], data);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -150,12 +150,12 @@ TEST_CASE("callbacks") {
|
|||||||
data["age"] = 28;
|
data["age"] = 28;
|
||||||
|
|
||||||
env.add_callback("double", 1, [&env](inja::Parsed::Arguments args, json data) {
|
env.add_callback("double", 1, [&env](inja::Parsed::Arguments args, json data) {
|
||||||
const int number = env.renderer.eval_expression<int>(args[0], data);
|
int number = env.get_argument<double>(args, 0, data);
|
||||||
return 2 * number;
|
return 2 * number;
|
||||||
});
|
});
|
||||||
|
|
||||||
env.add_callback("half", 1, [&env](inja::Parsed::Arguments args, json data) {
|
env.add_callback("half", 1, [&env](inja::Parsed::Arguments args, json data) {
|
||||||
const int number = env.renderer.eval_expression<int>(args[0], data);
|
int number = env.get_argument<double>(args, 0, data);
|
||||||
return number / 2;
|
return number / 2;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -165,8 +165,8 @@ TEST_CASE("callbacks") {
|
|||||||
});
|
});
|
||||||
|
|
||||||
env.add_callback("multiply", 2, [&env](inja::Parsed::Arguments args, json data) {
|
env.add_callback("multiply", 2, [&env](inja::Parsed::Arguments args, json data) {
|
||||||
const double number1 = env.renderer.eval_expression<double>(args[0], data);
|
double number1 = env.get_argument<double>(args, 0, data);
|
||||||
const double number2 = env.renderer.eval_expression<double>(args[1], data);
|
double number2 = env.get_argument<double>(args, 1, data);
|
||||||
return number1 * number2;
|
return number1 * number2;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user