aboutsummaryrefslogtreecommitdiff
path: root/src/TemplateManager.cpp
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2021-09-30 21:12:57 +0200
committerToni Uhlig <matzeton@googlemail.com>2021-09-30 21:12:57 +0200
commit6c04dfe2caff1e03ba5c898b591327439452f616 (patch)
tree11c6f6955de188c48015641c1ae2e63b0d0e50d6 /src/TemplateManager.cpp
parentec7cfa85530082127703278cf1ae5167990c0f45 (diff)
CMS functionality works just find..minimal-working-example
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'src/TemplateManager.cpp')
-rw-r--r--src/TemplateManager.cpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/TemplateManager.cpp b/src/TemplateManager.cpp
new file mode 100644
index 0000000..06771ea
--- /dev/null
+++ b/src/TemplateManager.cpp
@@ -0,0 +1,57 @@
+#include "TemplateManager.hpp"
+
+#include <filesystem>
+
+TemplateManager::TemplateManager()
+{
+ AddInjaCallback("test_fn", 0, [](inja::Arguments & args) {
+ (void)args;
+ return "Just a test fn.";
+ });
+ AddInjaCallback("test_return_true", 0, [](inja::Arguments & args) {
+ (void)args;
+ return true;
+ });
+}
+
+void TemplateManager::ParseTemplates(Filesystem const & fs)
+{
+ for (auto & tpl : fs.GetFiles())
+ {
+ std::string tmpl(tpl.second.data.data(), tpl.second.data.data() + tpl.second.data.size());
+ m_Templates[tpl.first] = m_Inja.parse(tmpl);
+ std::cout << "File: " << tpl.first << " may contain a renderable template." << std::endl;
+ }
+}
+
+void TemplateManager::AddInjaCallback(std::string functionName,
+ std::size_t numberOfArgs,
+ inja::CallbackFunction function)
+{
+ m_Inja.add_callback(functionName, numberOfArgs, function);
+}
+
+void TemplateManager::AddVoidInjaCallback(std::string functionName,
+ std::size_t numberOfArgs,
+ inja::VoidCallbackFunction function)
+{
+ m_Inja.add_void_callback(functionName, numberOfArgs, function);
+}
+
+bool TemplateManager::TemplateExists(std::string const & templatePath)
+{
+ return m_Templates.find(templatePath) != m_Templates.end();
+}
+
+bool TemplateManager::RenderTemplate(std::string const & templatePath, RenderData const & rd, std::string & out)
+{
+ if (TemplateExists(templatePath) == false)
+ {
+ return false;
+ }
+
+ inja::json ij(rd);
+ out = m_Inja.render(m_Templates[templatePath].content, ij);
+
+ return true;
+}