12 env.add_callback(
"escape_html", 1, [](inja::Arguments &args) {
13 auto input = args.at(0)->get<std::string>();
15 buffer.reserve(input.size() + input.size() / 8);
16 for (
char c : input) {
18 case '&': buffer +=
"&";
break;
19 case '"': buffer +=
""";
break;
20 case '\'': buffer +=
"'";
break;
21 case '<': buffer +=
"<";
break;
22 case '>': buffer +=
">";
break;
23 default: buffer += c;
break;
29 env.add_callback(
"escape_md_table", 1, [](inja::Arguments &args) {
30 auto input = args.at(0)->get<std::string>();
32 buffer.reserve(input.size() + input.size() / 8);
33 for (
char c : input) {
35 case '|': buffer +=
"\\|";
break;
36 case '\n': buffer +=
' ';
break;
38 default: buffer += c;
break;
124nlohmann::json InjaBridge::toInjaJson(
const QJsonObject &obj)
126 nlohmann::json result = nlohmann::json::object();
128 for (
const auto &[key, value] : obj.asKeyValueRange())
129 result[key.toString().toUtf8().toStdString()] = toInjaJson(value);
163QString InjaBridge::render(
const QString &templateStr,
const QJsonObject &data)
165 inja::Environment env;
170 env.set_line_statement(
"%!");
171 env.set_trim_blocks(
true);
172 env.set_lstrip_blocks(
true);
173 registerCallbacks(env);
174 nlohmann::json jsonData = toInjaJson(data);
176 std::string templateUtf8 = templateStr.toUtf8().toStdString();
177 std::string resultUtf8 = env.render(templateUtf8, jsonData);
179 return QString::fromUtf8(resultUtf8.c_str());
197QString InjaBridge::render(
const QString &templateStr,
const QJsonObject &data,
198 const IncludeCallback &includeCallback)
200 inja::Environment env;
201 env.set_line_statement(
"%!");
202 env.set_trim_blocks(
true);
203 env.set_lstrip_blocks(
true);
204 registerCallbacks(env);
205 env.set_search_included_templates_in_files(
false);
206 env.set_include_callback(
207 [&includeCallback, &env](
const std::filesystem::path & ,
208 const std::string &name) -> inja::Template {
209 QString content = includeCallback(QString::fromStdString(name));
210 if (content.isEmpty()) {
212 inja::FileError(
"include not found: '" + name +
"'"));
214 return env.parse(content.toUtf8().toStdString());
217 nlohmann::json jsonData = toInjaJson(data);
218 std::string templateUtf8 = templateStr.toUtf8().toStdString();
219 std::string resultUtf8 = env.render(templateUtf8, jsonData);
221 return QString::fromUtf8(resultUtf8.c_str());
233QString InjaBridge::renderFile(
const QString &templatePath,
const QJsonObject &data)
235 inja::Environment env;
236 env.set_line_statement(
"%!");
237 env.set_trim_blocks(
true);
238 env.set_lstrip_blocks(
true);
239 registerCallbacks(env);
240 nlohmann::json jsonData = toInjaJson(data);
242 std::string pathUtf8 = templatePath.toUtf8().toStdString();
243 std::string resultUtf8 = env.render_file(pathUtf8, jsonData);
245 return QString::fromUtf8(resultUtf8.c_str());