stamen

Stamen - static menu generator
git clone git://git.dimitrijedobrota.com/stamen.git
Log | Files | Refs | README | LICENSE

commit 223faf962edad1fc475af8a65afc8319d683bc0e
parent cd12b2fea38be76fe6bd2c607598c785d979c25e
Author: Dimitrije Dobrota <mail@dimitrijedobrota.com>
Date:   Fri, 14 Jun 2024 13:27:37 +0200

Add support for custom free function header

Diffstat:
Mdemo/main.cpp | 2+-
Msrc/generate.cpp | 27++++++++++++++-------------
2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/demo/main.cpp b/demo/main.cpp @@ -1,5 +1,5 @@ #include "demo_menu.hpp" -#include "stamen.h" +#include "stamen.hpp" #include <iostream> diff --git a/src/generate.cpp b/src/generate.cpp @@ -11,26 +11,18 @@ struct arguments_t { std::string config; std::string display; + std::string header = "shared.h"; bool cpp = false; bool user = false; } opt; void generateIncludeHeaders(std::ostream &os) { - if (opt.user) { - if (opt.cpp) os << "#include \"stamen.hpp\"\n\n"; - else os << "#include \"stamen.h\"\n\n"; - } else { - if (opt.cpp) os << "#include <stamen/stamen.hpp>\n\n"; - else os << "#include <stamen/stamen.h>\n\n"; - } } void generateInclude(std::ostream &os) { os << "#ifndef STAMEN_MENU_H\n"; os << "#define STAMEN_MENU_H\n\n"; - generateIncludeHeaders(os); - for (const auto &[code, menu] : stamen::menu::menu_lookup) { os << std::format("int {}(int);\n", menu.getCode()); } @@ -39,8 +31,14 @@ void generateInclude(std::ostream &os) { } void generateSource(std::ostream &os) { - os << "#include \"shared.h\"\n"; - generateIncludeHeaders(os); + os << std::format("#include \"{}\"\n", opt.header); + if (opt.user) { + if (opt.cpp) os << "#include \"stamen.hpp\"\n\n"; + else os << "#include \"stamen.h\"\n\n"; + } else { + if (opt.cpp) os << "#include <stamen/stamen.hpp>\n\n"; + else os << "#include <stamen/stamen.h>\n\n"; + } os << std::format("extern int {}(const char *title, ", opt.display); if (opt.cpp) os << "const stamen::item_t itemv[], int size);\n\n"; @@ -68,13 +66,15 @@ void generateSource(std::ostream &os) { int parse_opt(int key, const char *arg, args::Parser *parser) { auto arguments = (arguments_t *)parser->input(); switch (key) { - case 'u': arguments->user = true; break; case 'd': arguments->display = arg; break; + case 'h': arguments->header = arg; break; + case 'u': arguments->user = true; break; case 666: arguments->cpp = false; break; case 777: arguments->cpp = true; break; case args::ARG: if (!arguments->config.empty()) { - args::failure(parser, 1, 0, "Too many arguments"); + args::failure(parser, 0, 0, "Too many arguments"); + args::help(parser, stderr, args::STD_USAGE); } arguments->config = arg; break; @@ -98,6 +98,7 @@ static const args::option_t options[]{ {0, 0, 0, 0, "Output settings", 2}, {"display", 'd', "FUNC", 0, "Set display function to be called"}, {"user", 'u', 0, 0, "Include user stamen headers"}, + {"header", 'h', "FUNC", 0, "Header with free functions, default: shared.h"}, {0, 0, 0, 0, "Informational Options", -1}, {0}, };