diff options
| -rw-r--r-- | plugin/drumgizmo_plugin.cc | 2 | ||||
| -rw-r--r-- | src/configparser.cc | 40 | 
2 files changed, 41 insertions, 1 deletions
| diff --git a/plugin/drumgizmo_plugin.cc b/plugin/drumgizmo_plugin.cc index d8130f3..3328f6b 100644 --- a/plugin/drumgizmo_plugin.cc +++ b/plugin/drumgizmo_plugin.cc @@ -580,7 +580,7 @@ DrumGizmoPlugin::ConfigStringIO::ConfigStringIO(Settings& settings)  std::string DrumGizmoPlugin::ConfigStringIO::get()  {  	return -		"<config>\n" +		"<config version=\"1.0\">\n"  		"  <value name=\"drumkitfile\">" + settings.drumkit_file.load() + "</value>\n"  		"  <value name=\"midimapfile\">" + settings.midimap_file.load() + "</value>\n"  		"  <value name=\"enable_velocity_modifier\">" + diff --git a/src/configparser.cc b/src/configparser.cc index 30b981f..6906236 100644 --- a/src/configparser.cc +++ b/src/configparser.cc @@ -29,6 +29,36 @@  #include <hugin.hpp>  #include <pugixml.hpp> +static bool assign(std::string& dest, const std::string& val) +{ +	dest = val; +	return true; +} + +template<typename T> +static bool attrcpy(T& dest, const pugi::xml_node& src, const std::string& attr, bool opt = false) +{ +	const char* val = src.attribute(attr.c_str()).as_string(nullptr); +	if(!val) +	{ +		if(!opt) +		{ +			ERR(configparser, "Attribute %s not found in %s, offset %d\n", +			    attr.data(), src.path().data(), (int)src.offset_debug()); +		} +		return opt; +	} + +	if(!assign(dest, std::string(val))) +	{ +		ERR(configparser, "Attribute %s could not be assigned, offset %d\n", +		    attr.data(), (int)src.offset_debug()); +		return false; +	} + +	return true; +} +  bool ConfigParser::parseString(const std::string& xml)  {  	pugi::xml_document doc; @@ -40,6 +70,16 @@ bool ConfigParser::parseString(const std::string& xml)  	}  	pugi::xml_node config_node = doc.child("config"); + +	// Config xml without the version tag defaults to 1.0 +	std::string version = "1.0"; +	attrcpy(version, config_node, "version", true); +	if(version != "1.0") +	{ +		ERR(configparser, "Only config v1.0 XML supported."); +		return false; +	} +  	for(pugi::xml_node value_node : config_node.children("value"))  	{  		auto name = value_node.attribute("name").as_string(); | 
