mirror of
https://github.com/pantor/inja.git
synced 2026-10-21 19:18:11 +00:00
add replace function (#306)
Co-authored-by: Felix Maier <fm41@mailbox.org>
This commit is contained in:
1 parent
593ff96024
commit
2d6b382e2a
5 files changed
+24
No files matched your search
@@ -212,6 +212,9 @@ render("Hello {{ upper(neighbour) }}!", data); // "Hello PETER!"
|
|||||||
render("Hello {{ lower(neighbour) }}!", data); // "Hello peter!"
|
render("Hello {{ lower(neighbour) }}!", data); // "Hello peter!"
|
||||||
render("Hello {{ capitalize(neighbour) }}!", data); // "Hello Peter!"
|
render("Hello {{ capitalize(neighbour) }}!", data); // "Hello Peter!"
|
||||||
|
|
||||||
|
// Replace characters in a string
|
||||||
|
render("{{ replace(neighbour, \"e\", \"3\")}}", data); // "P3t3r"
|
||||||
|
|
||||||
// Range function, useful for loops
|
// Range function, useful for loops
|
||||||
render("{% for i in range(4) %}{{ loop.index1 }}{% endfor %}", data); // "1234"
|
render("{% for i in range(4) %}{{ loop.index1 }}{% endfor %}", data); // "1234"
|
||||||
render("{% for i in range(3) %}{{ at(guests, i) }} {% endfor %}", data); // "Jeff Tom Patrick "
|
render("{% for i in range(3) %}{{ at(guests, i) }} {% endfor %}", data); // "Jeff Tom Patrick "
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ public:
|
|||||||
Min,
|
Min,
|
||||||
Odd,
|
Odd,
|
||||||
Range,
|
Range,
|
||||||
|
Replace,
|
||||||
Round,
|
Round,
|
||||||
Sort,
|
Sort,
|
||||||
Upper,
|
Upper,
|
||||||
@@ -106,6 +107,7 @@ private:
|
|||||||
{std::make_pair("min", 1), FunctionData {Operation::Min}},
|
{std::make_pair("min", 1), FunctionData {Operation::Min}},
|
||||||
{std::make_pair("odd", 1), FunctionData {Operation::Odd}},
|
{std::make_pair("odd", 1), FunctionData {Operation::Odd}},
|
||||||
{std::make_pair("range", 1), FunctionData {Operation::Range}},
|
{std::make_pair("range", 1), FunctionData {Operation::Range}},
|
||||||
|
{std::make_pair("replace", 3), FunctionData {Operation::Replace}},
|
||||||
{std::make_pair("round", 2), FunctionData {Operation::Round}},
|
{std::make_pair("round", 2), FunctionData {Operation::Round}},
|
||||||
{std::make_pair("sort", 1), FunctionData {Operation::Sort}},
|
{std::make_pair("sort", 1), FunctionData {Operation::Sort}},
|
||||||
{std::make_pair("upper", 1), FunctionData {Operation::Upper}},
|
{std::make_pair("upper", 1), FunctionData {Operation::Upper}},
|
||||||
|
|||||||
@@ -414,6 +414,12 @@ class Renderer : public NodeVisitor {
|
|||||||
std::iota(result.begin(), result.end(), 0);
|
std::iota(result.begin(), result.end(), 0);
|
||||||
make_result(std::move(result));
|
make_result(std::move(result));
|
||||||
} break;
|
} break;
|
||||||
|
case Op::Replace: {
|
||||||
|
const auto args = get_arguments<3>(node);
|
||||||
|
auto result = args[0]->get<std::string>();
|
||||||
|
replace_substring(result, args[1]->get<std::string>(), args[2]->get<std::string>());
|
||||||
|
make_result(std::move(result));
|
||||||
|
} break;
|
||||||
case Op::Round: {
|
case Op::Round: {
|
||||||
const auto args = get_arguments<2>(node);
|
const auto args = get_arguments<2>(node);
|
||||||
const auto precision = args[1]->get<const json::number_integer_t>();
|
const auto precision = args[1]->get<const json::number_integer_t>();
|
||||||
|
|||||||
@@ -170,6 +170,7 @@ public:
|
|||||||
Min,
|
Min,
|
||||||
Odd,
|
Odd,
|
||||||
Range,
|
Range,
|
||||||
|
Replace,
|
||||||
Round,
|
Round,
|
||||||
Sort,
|
Sort,
|
||||||
Upper,
|
Upper,
|
||||||
@@ -213,6 +214,7 @@ private:
|
|||||||
{std::make_pair("min", 1), FunctionData {Operation::Min}},
|
{std::make_pair("min", 1), FunctionData {Operation::Min}},
|
||||||
{std::make_pair("odd", 1), FunctionData {Operation::Odd}},
|
{std::make_pair("odd", 1), FunctionData {Operation::Odd}},
|
||||||
{std::make_pair("range", 1), FunctionData {Operation::Range}},
|
{std::make_pair("range", 1), FunctionData {Operation::Range}},
|
||||||
|
{std::make_pair("replace", 3), FunctionData {Operation::Replace}},
|
||||||
{std::make_pair("round", 2), FunctionData {Operation::Round}},
|
{std::make_pair("round", 2), FunctionData {Operation::Round}},
|
||||||
{std::make_pair("sort", 1), FunctionData {Operation::Sort}},
|
{std::make_pair("sort", 1), FunctionData {Operation::Sort}},
|
||||||
{std::make_pair("upper", 1), FunctionData {Operation::Upper}},
|
{std::make_pair("upper", 1), FunctionData {Operation::Upper}},
|
||||||
@@ -2521,6 +2523,12 @@ class Renderer : public NodeVisitor {
|
|||||||
std::iota(result.begin(), result.end(), 0);
|
std::iota(result.begin(), result.end(), 0);
|
||||||
make_result(std::move(result));
|
make_result(std::move(result));
|
||||||
} break;
|
} break;
|
||||||
|
case Op::Replace: {
|
||||||
|
const auto args = get_arguments<3>(node);
|
||||||
|
auto result = args[0]->get<std::string>();
|
||||||
|
replace_substring(result, args[1]->get<std::string>(), args[2]->get<std::string>());
|
||||||
|
make_result(std::move(result));
|
||||||
|
} break;
|
||||||
case Op::Round: {
|
case Op::Round: {
|
||||||
const auto args = get_arguments<2>(node);
|
const auto args = get_arguments<2>(node);
|
||||||
const auto precision = args[1]->get<const json::number_integer_t>();
|
const auto precision = args[1]->get<const json::number_integer_t>();
|
||||||
|
|||||||
@@ -108,6 +108,11 @@ TEST_CASE("functions") {
|
|||||||
// [json.exception.type_error.302] type must be array, but is number" );
|
// [json.exception.type_error.302] type must be array, but is number" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SUBCASE("replace") {
|
||||||
|
CHECK(env.render("{{ replace(name, \"e\", \"3\") }}", data) == "P3t3r");
|
||||||
|
CHECK(env.render("{{ replace(city, \" \", \"_\") }}", data) == "New_York");
|
||||||
|
}
|
||||||
|
|
||||||
SUBCASE("round") {
|
SUBCASE("round") {
|
||||||
CHECK(env.render("{{ round(4, 0) }}", data) == "4");
|
CHECK(env.render("{{ round(4, 0) }}", data) == "4");
|
||||||
CHECK(env.render("{{ round(temperature, 2) }}", data) == "25.68");
|
CHECK(env.render("{{ round(temperature, 2) }}", data) == "25.68");
|
||||||
|
|||||||
Reference in new issue
Block a user