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!"

Inja in Github