int SettingRegistry::loadJSONsettings(std::string filename, SettingsBase* settings_base, bool warn_base_file_duplicates) { rapidjson::Document json_document; log("Loading %s...\n", filename.c_str()); int err = loadJSON(filename, json_document); if (err) { return err; } if (json_document.HasMember("inherits") && json_document["inherits"].IsString()) { std::string child_filename; bool found = getDefinitionFile(json_document["inherits"].GetString(), filename, child_filename); if (!found) { return -1; } err = loadJSONsettings(child_filename, settings_base, warn_base_file_duplicates); // load child first if (err) { return err; } err = loadJSONsettingsFromDoc(json_document, settings_base, false); } else { err = loadJSONsettingsFromDoc(json_document, settings_base, warn_base_file_duplicates); } if (json_document.HasMember("metadata") && json_document["metadata"].IsObject()) { const rapidjson::Value& json_metadata = json_document["metadata"]; if (json_metadata.HasMember("machine_extruder_trains") && json_metadata["machine_extruder_trains"].IsObject()) { const rapidjson::Value& json_machine_extruder_trains = json_metadata["machine_extruder_trains"]; for (rapidjson::Value::ConstMemberIterator extr_train_iterator = json_machine_extruder_trains.MemberBegin(); extr_train_iterator != json_machine_extruder_trains.MemberEnd(); ++extr_train_iterator) { int extruder_train_nr = atoi(extr_train_iterator->name.GetString()); if (extruder_train_nr < 0) { continue; } const rapidjson::Value& json_id = extr_train_iterator->value; if (!json_id.IsString()) { continue; } const char* id = json_id.GetString(); if (extruder_train_nr >= (int) extruder_train_ids.size()) { extruder_train_ids.resize(extruder_train_nr + 1); } extruder_train_ids[extruder_train_nr] = std::string(id); } } } return err; }
int SettingRegistry::loadJSONsettings(std::string filename) { rapidjson::Document json_document; int err = loadJSON(filename, json_document); if (err) { return err; } if (json_document.HasMember("inherits")) { std::string filename_copy = std::string(filename.c_str()); // copy the string because dirname(.) changes the input string!!! char* filename_cstr = (char*)filename_copy.c_str(); int err = loadJSONsettings(std::string(dirname(filename_cstr)) + std::string("/") + json_document["inherits"].GetString()); if (err) { return err; } return loadJSONsettingsFromDoc(json_document, false); } else { return loadJSONsettingsFromDoc(json_document, true); } }