diff --git a/src/coders/toml.cpp b/src/coders/toml.cpp index 740c2733..e20a0875 100644 --- a/src/coders/toml.cpp +++ b/src/coders/toml.cpp @@ -137,16 +137,23 @@ void toml::parse( } } -std::string toml::stringify(dynamic::Map& root) { +std::string toml::stringify(dynamic::Map& root, const std::string& name) { std::stringstream ss; - for (auto& sectionEntry : root.values) { - ss << "[" << sectionEntry.first << "]\n"; - auto sectionMap = std::get_if(§ionEntry.second); - for (auto& entry : (*sectionMap)->values) { + if (!name.empty()) { + ss << "[" << name << "]\n"; + } + for (auto& entry : root.values) { + if (!std::holds_alternative(entry.second)) { ss << entry.first << " = "; ss << entry.second << "\n"; } - ss << "\n"; + } + for (auto& entry : root.values) { + if (auto submap = std::get_if(&entry.second)) { + ss << "\n" << toml::stringify( + **submap, name.empty() ? entry.first : name+"."+entry.first + ); + } } return ss.str(); } diff --git a/src/coders/toml.hpp b/src/coders/toml.hpp index b4b5d356..d658eb20 100644 --- a/src/coders/toml.hpp +++ b/src/coders/toml.hpp @@ -10,7 +10,7 @@ class SettingsHandler; namespace toml { std::string stringify(SettingsHandler& handler); - std::string stringify(dynamic::Map& root); + std::string stringify(dynamic::Map& root, const std::string& name=""); dynamic::Map_sptr parse(std::string_view file, std::string_view source); void parse(