From dac2461ba66560c00efb43a12e35394a698b60f7 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 6 Sep 2006 19:05:23 +0000 Subject: Fixed LADSPA plugins with invalid OSC path port names (eg containing spaces). Fixed node destruction. git-svn-id: http://svn.drobilla.net/lad/ingen@114 a436a847-0d15-0410-975c-d299462d15a1 --- src/common/util/Path.h | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) (limited to 'src/common/util') diff --git a/src/common/util/Path.h b/src/common/util/Path.h index d79a95c2..353ecaca 100644 --- a/src/common/util/Path.h +++ b/src/common/util/Path.h @@ -94,6 +94,81 @@ public: return true; } + /** Convert a string in to a valid full path. + * + * This will make a best effort at turning @a str into a complete, valid + * Path, and will always return one. + */ + static string pathify(const std::basic_string& str) + { + string path = str; + + if (path.length() == 0) + return "/"; // this might not be wise + + // Must start with a / + if (path.at(0) != '/') + path = string("/").append(path); + + // Must not end with a slash unless "/" + if (path.length() > 1 && path.at(path.length()-1) == '/') + path = path.substr(0, path.length()-1); // chop trailing slash + + assert(path.find_last_of("/") != string::npos); + + // Replace any invalid characters with "." (for lack of a better idea) + for (size_t i=0; i < path.length(); ++i) { + if (path.at(i) < 32 || path.at(i) > 126 + || path.at(i) == ' ' + || path.at(i) == '#' + || path.at(i) == '*' + || path.at(i) == ',' + || path.at(i) == '?' + || path.at(i) == '[' + || path.at(i) == ']' + || path.at(i) == '{' + || path.at(i) == '}') { + path[i] = '.'; + } + } + + assert(is_valid(path)); + + return path; + } + + /** Convert a string into a valid name (or "method" - tokens between slashes) + * + * This will strip all slashes and always return a valid name/method. + */ + static string nameify(const std::basic_string& str) + { + string name = str; + + if (name.length() == 0) + return "."; // this might not be wise + + // Replace any invalid characters with "." (for lack of a better idea) + for (size_t i=0; i < name.length(); ++i) { + if (name.at(i) < 32 || name.at(i) > 126 + || name.at(i) == ' ' + || name.at(i) == '#' + || name.at(i) == '*' + || name.at(i) == ',' + || name.at(i) == '?' + || name.at(i) == '[' + || name.at(i) == ']' + || name.at(i) == '{' + || name.at(i) == '}' + || name.at(i) == '/') { + name[i] = '.'; + } + } + + return name; + } + + /** Return the name of this object (everything after the last '/'). * This is the "method name" for OSC paths. */ -- cgit v1.2.1