From 2cae1aa33f80ce0844fb54a84ce103146a7fe7ad Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 19 Apr 2021 13:46:14 -0400 Subject: Started earnest work on cli --- src/settings.cc | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/settings.cc (limited to 'src/settings.cc') diff --git a/src/settings.cc b/src/settings.cc new file mode 100644 index 0000000..e9a6165 --- /dev/null +++ b/src/settings.cc @@ -0,0 +1,41 @@ +#include "settings.h" +#include +#include +#include + +namespace settings { + const std::map dummySettings { + {"weapon", "parser/items/weapons/"}, + {"armor", "parser/items/armor/"}, + {"spellcasting", "parser/spells/"}, + {"savedir", "~/.dmtool/"} + }; + + + // Update the input string. + // Obtained from https://stackoverflow.com/a/23442780 + void autoExpandEnvironmentVariables(std::string& text) { + std::size_t tilde; + while((tilde = text.find("~")) != std::string::npos) { + text.replace(tilde, tilde+1, "${HOME}"); + } + static std::regex env("\\$(?:\\{([^}]+)\\}|([^/]+))"); + std::smatch match; + while(std::regex_search(text, match, env)) { + std::string matchStr = match[1].str().empty()? match[2].str() : match[1].str(); + auto s = getenv(matchStr.c_str()); + const std::string var(s == NULL? "" : s); + text.replace(match[0].first, match[0].second, var); + } + } + + // Returns the setting, or an empty string in the case of an error + std::string getString(const std::string& key) { + if(! dummySettings.contains(key)) { + return ""; + } + std::string ret = dummySettings.at(key); + autoExpandEnvironmentVariables(ret); + return ret; + } +} -- cgit v1.2.3