summaryrefslogtreecommitdiff
path: root/src/utils/paramerers.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2016-02-10 16:36:04 +0300
committerAndrei Karas <akaras@inbox.ru>2016-02-10 16:36:04 +0300
commit5a15b718a475f8c2809521ea3166de379bf85b36 (patch)
tree9b50a62cf5192469dc23448aace0d7ba7996ccf0 /src/utils/paramerers.cpp
parente19faa6874b92a949703e37e07e912c693545496 (diff)
downloadmanaplus-5a15b718a475f8c2809521ea3166de379bf85b36.tar.gz
manaplus-5a15b718a475f8c2809521ea3166de379bf85b36.tar.bz2
manaplus-5a15b718a475f8c2809521ea3166de379bf85b36.tar.xz
manaplus-5a15b718a475f8c2809521ea3166de379bf85b36.zip
In parameters parsing function add support for multiply separators.
Diffstat (limited to 'src/utils/paramerers.cpp')
-rw-r--r--src/utils/paramerers.cpp24
1 files changed, 12 insertions, 12 deletions
diff --git a/src/utils/paramerers.cpp b/src/utils/paramerers.cpp
index 12c20a18e..418e15ab7 100644
--- a/src/utils/paramerers.cpp
+++ b/src/utils/paramerers.cpp
@@ -31,22 +31,20 @@
static inline void addToken(StringVect &tokens,
std::string str)
{
- const size_t sz = str.size();
- std::string item;
+ std::string item = trim(str);
+ const size_t sz = item.size();
if (sz > 1)
{
if (str[0] == '\"' &&
str[sz - 1] == '\"' &&
str[sz - 2] != '\\')
{
- str = str.substr(1, sz - 2);
- item = trim(str);
+ item = item.substr(1, sz - 2);
replaceAll(item, "\\\"", "\"");
tokens.push_back(item);
return;
}
}
- item = trim(str);
replaceAll(item, "\\\"", "\"");
if (!item.empty())
tokens.push_back(item);
@@ -57,15 +55,17 @@ static inline size_t findNextQuote(const std::string &str,
const size_t pos)
{
size_t idx = str.find(quote, pos);
- if (idx == std::string::npos)
- return idx;
- while (idx > 0 && str[idx - 1] == '\\')
+ while (idx > 0 &&
+ idx != std::string::npos &&
+ str[idx - 1] == '\\')
+ {
idx = str.find(quote, idx + 1);
+ }
return idx;
}
-static inline size_t findNextSplit(std::string &str,
- const char separator,
+static inline size_t findNextSplit(const std::string &str,
+ const std::string &separator,
const char quote)
{
size_t pos = 0;
@@ -73,7 +73,7 @@ static inline size_t findNextSplit(std::string &str,
while (true)
{
// search for next separator
- idx1 = str.find(separator, pos);
+ idx1 = findAny(str, separator, pos);
// search for next open quote, skipping escaped quotes
size_t idx2 = findNextQuote(str, quote, pos);
if (idx2 == std::string::npos) // not quotes, return next separator
@@ -99,7 +99,7 @@ static inline size_t findNextSplit(std::string &str,
bool splitParameters(StringVect &tokens,
std::string text,
- const char separator,
+ const std::string &separator,
const char quote)
{
size_t idx = findNextSplit(text, separator, quote);