GH-1813 Escape # in INI (and better reader)

This commit is contained in:
janrupf 2019-06-17 16:38:32 +02:00 committed by Petr Mrázek
parent ce12f1a734
commit f87c890912

View File

@ -28,49 +28,20 @@ INIFile::INIFile()
QString INIFile::unescape(QString 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;
return orig
.replace("\\#", "#")
.replace("\\t", "\t")
.replace("\\n", "\n")
.replace("\\\\", "\\");
}
QString INIFile::escape(QString 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;
return orig
.replace('\\', "\\\\")
.replace('\n', "\\n")
.replace('\t', "\\t")
.replace('#', "\\#");
}
bool INIFile::saveFile(QString fileName)
@ -120,7 +91,15 @@ bool INIFile::loadFile(QByteArray file)
{
QString &lineRaw = lines[i];
// Ignore comments.
QString line = lineRaw.left(lineRaw.indexOf('#')).trimmed();
int commentIndex = 0;
QString line = lineRaw;
// Search for comments until no more escaped # are available
while((commentIndex = line.indexOf('#', commentIndex + 1)) != -1) {
if(commentIndex > 0 && line.at(commentIndex - 1) == '\\') {
continue;
}
line = line.left(lineRaw.indexOf('#')).trimmed();
}
int eqPos = line.indexOf('=');
if (eqPos == -1)