#include "ConfigFile.h" #include "Regex.h" ConfigFile::ConfigFile(Handle * f) throw (GeneralException) { Regex r("^\\[.*\\]$"), comment("^#.*$"), empty("^ *$"), line("^.*=.*$"); bool started = false; String s, section, key, value; ConfigSectionContents contents; int pos; while (!f->IsClosed()) { (*f) >> s; if (comment.Match(s) || empty.Match(s)) continue; if (r.Match(s)) { if (!started) { started = true; } else { c[section] = contents; contents.clear(); } section = s.extract(1, s.strlen() - 2); continue; } if (line.Match(s)) { if (!started) { throw GeneralException("Config file must begin with a section"); } pos = s.strchr('='); key = s.extract(0, pos - 1).trim(); value = s.extract(pos + 1).trim(); contents[key] = value; continue; } throw GeneralException("Invalid line: " + s); } c[section] = contents; } ConfigSectionContents & ConfigFile::operator[](String s) { return c[s]; }