std::map<std::string, std::string> config;
-void init_theme()
+void read_config(const char *filename)
{
- FILE *fp = fopen("theme.config", "rb");
+ FILE *fp = fopen(filename, "r");
if (fp == NULL)
- throw std::runtime_error("Couldn't open theme.config.");
+ throw std::runtime_error("Couldn't open theme file.");
while (!feof(fp)) {
char buf[1024];
continue;
}
- config.insert(std::make_pair(key, value));
+ fprintf(stderr, "%s = %s\n", key, value);
+ config[key] = value;
}
fclose(fp);
}
+void init_theme()
+{
+ read_config("theme.config");
+ try {
+ read_config("theme.config.local");
+ } catch (...) {
+ // Ignore.
+ }
+}
+
std::string get_theme_config(const std::string &key, const std::string subkey)
{
if (config.count(key + "." + subkey)) {
return config[key + "." + subkey];
}
+ std::string modkey = key;
+ while (modkey.find_last_of(".") != std::string::npos) {
+ modkey.resize(modkey.find_last_of("."));
+ if (config.count(modkey + "." + subkey)) {
+ return config[modkey + "." + subkey];
+ }
+ }
+
return config["default." + subkey];
}