cemplate

Simple C++ template engine
git clone git://git.dimitrijedobrota.com/cemplate.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING

commit 8af41f111c5fd88053b3276b7c6de4e8da9fa40e
parent 0f85cc52df5322f9dc9cfdf6db2b1d912338575e
author Dimitrije Dobrota < mail@dimitrijedobrota.com >
date Sat, 22 Feb 2025 21:44:03 +0100

Extract .hpp and .cpp files

Diffstat:
M .clang-tidy | ++ -
M CMakeLists.txt | + -
M example/example.cpp | + ----------------------------------------------------------
M include/cemplate/cemplate.hpp | +++++++++++++++++++++ ---------
M source/cemplate.cpp | +++++++++++++++++++++++++++++++++++++++++++++ -----

5 files changed, 70 insertions(+), 74 deletions(-)


diff --git a/ .clang-tidy b/ .clang-tidy

@@ -13,9 +13,10 @@ Checks: "*,\

-llvm-header-guard,\
-llvm-include-order,\
-llvmlibc-*,\
-modernize-use-designated-initializers,\
-modernize-use-nodiscard,\
-modernize-use-trailing-return-type,\
-modernize-use-ranges,\
-modernize-use-trailing-return-type,\
-misc-include-cleaner,\
"
WarningsAsErrors: ''

diff --git a/ CMakeLists.txt b/ CMakeLists.txt

@@ -4,7 +4,7 @@ include(cmake/prelude.cmake)


project(
cemplate
VERSION 0.1.1
VERSION 0.1.2
DESCRIPTION "Simple C++ template engine"
HOMEPAGE_URL "https://git.dimitrijedobrota.com/cemplate.git"
LANGUAGES CXX

diff --git a/ example/example.cpp b/ example/example.cpp

@@ -1,63 +1,6 @@

#include <format>
#include <iostream>
#include <string>
#include <vector>

namespace cemplate
{

std::string pragma_once()
{
return "#pragma once\n\n";
}

std::string include(const std::string& header, bool local = false)
{
return local ? std::format("#include \"{}\"\n", header)
: std::format("#include <{}>\n", header);
}

std::string nspace(const std::string& name)
{
return std::format("namespace {}\n{{\n\n\n", name);
}

std::string nspace_close(const std::string& name)
{
return std::format("\n}} // namespace {}\n\n", name);
}

struct param_t
{
std::string type;
std::string name;
};

std::string func(const std::string& ret,
const std::string& name,
std::vector<param_t> params)
{
std::string res;

res += ret + ' ';
res += name + '(';
if (!params.empty()) {
res += params[0].type + ' ' + params[0].name;
for (std::size_t i = 1; i < params.size(); i++) {
res += ", " + params[i].type + ' ' + params[i].name;
}
}
res += ") {\n";

return res;
}

std::string func_close()
{
return "}\n\n";
}

} // namespace cemplate
#include "cemplate/cemplate.hpp"

int main()
{

diff --git a/ include/cemplate/cemplate.hpp b/ include/cemplate/cemplate.hpp

@@ -1,17 +1,29 @@

#pragma once

#include <string>
#include <vector>

#include "cemplate/cemplate_export.hpp"

class CEMPLATE_EXPORT exported_class
namespace cemplate
{
public:
exported_class();

auto name() const -> char const*;
std::string pragma_once();

std::string include(const std::string& header, bool local = false);

std::string nspace(const std::string& name);

std::string nspace_close(const std::string& name);

private:
CEMPLATE_SUPPRESS_C4251
std::string m_name;
struct param_t
{
std::string type;
std::string name;
};

std::string func(const std::string& ret,
const std::string& name,
std::vector<param_t> params);

std::string func_close();

} // namespace cemplate

diff --git a/ source/cemplate.cpp b/ source/cemplate.cpp

@@ -1,13 +1,53 @@

#include <string>
#include <format>

#include "cemplate/cemplate.hpp"

exported_class::exported_class()
: m_name {"cemplate"}
namespace cemplate
{

std::string pragma_once()
{
return "#pragma once\n\n";
}

std::string include(const std::string& header, bool local)
{
return local ? std::format("#include \"{}\"\n", header)
: std::format("#include <{}>\n", header);
}

char const* exported_class::name() const
std::string nspace(const std::string& name)
{
return m_name.c_str();
return std::format("namespace {}\n{{\n\n\n", name);
}

std::string nspace_close(const std::string& name)
{
return std::format("\n}} // namespace {}\n\n", name);
}

std::string func(const std::string& ret,
const std::string& name,
std::vector<param_t> params)
{
std::string res;

res += ret + ' ';
res += name + '(';
if (!params.empty()) {
res += params[0].type + ' ' + params[0].name;
for (std::size_t i = 1; i < params.size(); i++) {
res += ", " + params[i].type + ' ' + params[i].name;
}
}
res += ") {\n";

return res;
}

std::string func_close()
{
return "}\n\n";
}

} // namespace cemplate