diff options
Diffstat (limited to 'depends/settings')
-rw-r--r-- | depends/settings/inifile.cpp | 48 | ||||
-rw-r--r-- | depends/settings/inifile.h | 4 |
2 files changed, 42 insertions, 10 deletions
diff --git a/depends/settings/inifile.cpp b/depends/settings/inifile.cpp index 1170f0b1..b2098913 100644 --- a/depends/settings/inifile.cpp +++ b/depends/settings/inifile.cpp @@ -25,17 +25,49 @@ INIFile::INIFile() QString INIFile::unescape(QString orig) { - orig.replace("\\n", "\n"); - orig.replace("\\t", "\t"); - orig.replace("\\\\", "\\"); - return orig; + QString out; + QChar prev = 0; + for(auto c: orig) + { + if(prev == '\\') + { + if(c == 'n') + out += '\n'; + else if (c == 't') + out += '\t'; + else + out += c; + prev = 0; + } + else + { + if(c == '\\') + { + prev = c; + continue; + } + out += c; + prev = 0; + } + } + return out; } + QString INIFile::escape(QString orig) { - orig.replace("\\", "\\\\"); - orig.replace("\n", "\\n"); - orig.replace("\t", "\\t"); - return orig; + QString out; + for(auto c: orig) + { + if(c == '\n') + out += "\\n"; + else if (c == '\t') + out += "\\t"; + else if(c == '\\') + out += "\\\\"; + else + out += c; + } + return out; } bool INIFile::saveFile(QString fileName) diff --git a/depends/settings/inifile.h b/depends/settings/inifile.h index 27da7bf0..4fb0054d 100644 --- a/depends/settings/inifile.h +++ b/depends/settings/inifile.h @@ -33,6 +33,6 @@ public: QVariant get(QString key, QVariant def) const; void set(QString key, QVariant val); - QString unescape(QString orig); - QString escape(QString orig); + static QString unescape(QString orig); + static QString escape(QString orig); }; |