diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2021-09-30 21:12:57 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2021-09-30 21:12:57 +0200 |
commit | 6c04dfe2caff1e03ba5c898b591327439452f616 (patch) | |
tree | 11c6f6955de188c48015641c1ae2e63b0d0e50d6 /src/TemplateManager.cpp | |
parent | ec7cfa85530082127703278cf1ae5167990c0f45 (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.cpp | 57 |
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; +} |