BmnRoot
Loading...
Searching...
No Matches
IndentedConfigParser.cxx
Go to the documentation of this file.
1
3// STL
4#include <regex>
5// FairRoot
6#include <FairLogger.h>
7
9{
10
11void PrintConfig(const Node& n, int indent)
12{
13 LOG(info) << std::string(indent, ' ') << " value : " << n.value << "\n";
14 for (const auto& p : n.children)
15 PrintConfig(p, indent + 4);
16}
17
18void ParseIStringStream(istringstream& iss, Node& root)
19{
20 std::regex rempty("\\s*\n*");
21 string line;
22 vector<Node*> stack{&root};
23 while (std::getline(iss, line)) {
24 if (line.empty())
25 break;
26 if (regex_match(line, rempty))
27 break;
28 size_t level = 0;
29 while (level < line.size() && line[level] == '\t')
30 ++level;
31 string text = line.substr(level);
32 if ((level + 1) > stack.size()) {
33 LOGF(error, "Parsing error! Level gap!");
34 break;
35 }
36 stack.resize(level + 1);
37 Node& node = stack.back()->children.emplace_back(Node{.value = text});
38 node.value = text;
39 stack.push_back(&node);
40 }
41 // PrintConfig(root);
42}
43
44void ParseString(string& str, Node& root)
45{
46 istringstream iss(str);
47 ParseIStringStream(iss, root);
48}
49
50} // namespace IndentedConfigParser
void PrintConfig(const Node &n, int indent)
void ParseIStringStream(istringstream &iss, Node &root)
void ParseString(string &str, Node &root)