inja یک تمپلیت انجین برای سی پلاس پلاس مدرن است.
از قابلیتهای این ابزار میتوان به موارد زیر اشاره کرد:
- متغیرها
- حلقههای تکرار
- شروط
- include
- توابع
- توابع سفارشی
- کامنت
در ادامه برای هرکدام مثال آماده شده inja را میآوریم
متغیرها:
تعریف متغیرها با استفاده از {{ ... }}
صورت میپذیرد. مثال:
json data;
data["neighbour"] = "Peter";
data["guests"] = {"Jeff", "Tom", "Patrick"};
data["time"]["start"] = 16;
data["time"]["end"] = 22;
// Indexing in array
render("{{ guests.1 }}", data); // "Tom"
// Objects
render("{{ time.start }} to {{ time.end }}pm", data); // "16 to 22pm"
حلقهها:
تعریف حلقهها با استفاده از {% ... %}
یا ##
صورت میپذیرد. مثال:
// Combining loops and line statements
render(R"(Guest List:
## for guest in guests
{{ loop.index1 }}: {{ guest }}
## endfor )", data)
/* Guest List:
1: Jeff
2: Tom
3: Patrick */
شروط:
تعریف شروط نیز به صورتهای زیر امکان پذیر است:
// Standard comparisons with variable
render("{% if time.hour >= 18 %}…{% endif %}", data); // True
// Variable in list
render("{% if neighbour in guests %}…{% endif %}", data); // True
// Logical operations
render("{% if guest_count < 5 and all_tired %}…{% endif %}", data); // True
// Negations
render("{% if not guest_count %}…{% endif %}", data); // True
include:
به صورتهای زیر میتوانید دیگر فایلها یا فایلهای از قبل جایگذاری شده را include کنید:
// Other template files are included relative from the current file location
render("{% include \"footer.html\" %}", data);
// To include in-memory templates, add them to the environment first
inja::Template content_template = env.parse("Hello {{ neighbour }}!");
env.include_template("content", content_template);
render("Content: {% include \"content\" %}", data); // "Content: Hello Peter!"
توابع:
تعداد کمی تابع کاربردی از پیش تعریف شده توسط inja وجود دارد که میتوانید به صورت زیر آنها را فراخوانی کنید :
توابع سفارشی:
همچنین میتوانید توابع سفارشی خود را به صورت زیر تعریف کنید:
Environment env; /* * Callbacks are defined by its: * - name * - number of arguments * - callback function. Implemented with std::function, you can for example use lambdas. */ env.add_callback("double", 1, [](Arguments& args) { int number = args.at(0)->get<int>(); // Adapt the index and type of the argument return 2 * number; }); // You can then use a callback like a regular function env.render("{{ double(16) }}", data); // "32" // A callback without argument can be used like a dynamic variable: std::string greet = "Hello"; env.add_callback("double-greetings", 0, [greet](Arguments args) { return greet + " " + greet + "!"; }); env.render("{{ double-greetings }}", data); // "Hello Hello!"
کامنت:
کامنتها نیز میتوانند با {# ... #}
نوشته شوند. مثال:
render("Hello{# Todo #}!", data); // "Hello!"