From 0d71b001187ec79dbdbddde4ebaabbdff8e2b9bd Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 6 May 2020 00:50:37 +0200 Subject: Allow ignoring of specifications in NameFormat. --- src/name_format.cc | 15 ++++++++++++--- src/name_format.h | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/name_format.cc b/src/name_format.cc index 7b9cfd63..76cca3fd 100644 --- a/src/name_format.cc +++ b/src/name_format.cc @@ -64,15 +64,24 @@ filter (string c) return o; } + +/** @param values Values to replace our specifications with; e.g. + * if the specification contains %c it will be be replaced with the + * value corresponding to the key 'c'. + * @param suffix Suffix to add on after processing the specification. + * @param ignore Any specification characters in this string will not + * be replaced, but left as-is. + */ string -NameFormat::get (Map values, string suffix) const +NameFormat::get (Map values, string suffix, string ignore) const { string result; for (size_t i = 0; i < _specification.length(); ++i) { bool done = false; if (_specification[i] == '%' && (i < _specification.length() - 1)) { - Map::const_iterator j = values.find(_specification[i + 1]); - if (j != values.end()) { + char const key = _specification[i + 1]; + Map::const_iterator j = values.find(key); + if (j != values.end() && ignore.find(key) == string::npos) { result += filter (j->second); ++i; done = true; diff --git a/src/name_format.h b/src/name_format.h index e5cfb76d..e6fc9d72 100644 --- a/src/name_format.h +++ b/src/name_format.h @@ -60,7 +60,7 @@ public: typedef std::map Map; - std::string get (Map, std::string suffix) const; + std::string get (Map, std::string suffix, std::string ignore = "") const; private: std::string _specification; -- cgit v1.2.3