104nlohmann::json InjaBridge::toInjaJson(
const QJsonObject &obj)
106 nlohmann::json result = nlohmann::json::object();
108 for (
const auto &[key, value] : obj.asKeyValueRange())
109 result[key.toString().toUtf8().toStdString()] = toInjaJson(value);
143QString InjaBridge::render(
const QString &templateStr,
const QJsonObject &data)
145 inja::Environment env;
150 env.set_line_statement(
"%!");
151 env.set_trim_blocks(
true);
152 env.set_lstrip_blocks(
true);
153 registerCallbacks(env);
154 nlohmann::json jsonData = toInjaJson(data);
156 std::string templateUtf8 = templateStr.toUtf8().toStdString();
157 std::string resultUtf8 = env.render(templateUtf8, jsonData);
159 return QString::fromUtf8(resultUtf8.c_str());
177QString InjaBridge::render(
const QString &templateStr,
const QJsonObject &data,
178 const IncludeCallback &includeCallback)
180 inja::Environment env;
181 env.set_line_statement(
"%!");
182 env.set_trim_blocks(
true);
183 env.set_lstrip_blocks(
true);
184 registerCallbacks(env);
185 env.set_search_included_templates_in_files(
false);
186 env.set_include_callback(
187 [&includeCallback, &env](
const std::filesystem::path & ,
188 const std::string &name) -> inja::Template {
189 QString content = includeCallback(QString::fromStdString(name));
190 if (content.isEmpty()) {
192 inja::FileError(
"include not found: '" + name +
"'"));
194 return env.parse(content.toUtf8().toStdString());
197 nlohmann::json jsonData = toInjaJson(data);
198 std::string templateUtf8 = templateStr.toUtf8().toStdString();
199 std::string resultUtf8 = env.render(templateUtf8, jsonData);
201 return QString::fromUtf8(resultUtf8.c_str());
213QString InjaBridge::renderFile(
const QString &templatePath,
const QJsonObject &data)
215 inja::Environment env;
216 env.set_line_statement(
"%!");
217 env.set_trim_blocks(
true);
218 env.set_lstrip_blocks(
true);
219 registerCallbacks(env);
220 nlohmann::json jsonData = toInjaJson(data);
222 std::string pathUtf8 = templatePath.toUtf8().toStdString();
223 std::string resultUtf8 = env.render_file(pathUtf8, jsonData);
225 return QString::fromUtf8(resultUtf8.c_str());