Escape message tag values (ref #684)

This commit is contained in:
J-P Nurmi
2014-09-29 14:23:06 +02:00
parent 615801c40e
commit 92c9a2e6ae
5 changed files with 81 additions and 9 deletions
+39
View File
@@ -174,6 +174,8 @@ CString::EEscape CString::ToEscape(const CString& sEsc) {
return ENAMEDFMT;
} else if (sEsc.Equals("DEBUG")) {
return EDEBUG;
} else if (sEsc.Equals("MSGTAG")) {
return EMSGTAG;
}
return EASCII;
@@ -314,6 +316,33 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const {
} else {
ch = *p;
}
break;
case EMSGTAG:
if (*p != '\\' || iLength < (a +1)) {
ch = *p;
} else {
a++;
p++;
if (*p == ':') {
ch = ';';
} else if (*p == 's') {
ch = ' ';
} else if (*p == '0') {
ch = '\0';
} else if (*p == '\\') {
ch = '\\';
} else if (*p == 'r') {
ch = '\r';
} else if (*p == 'n') {
ch = '\n';
} else {
ch = *p;
}
}
break;
}
switch (eTo) {
@@ -372,6 +401,16 @@ CString CString::Escape_n(EEscape eFrom, EEscape eTo) const {
sRet += ch;
}
break;
case EMSGTAG:
if (ch == ';') { sRet += '\\'; sRet += ':';
} else if (ch == ' ') { sRet += '\\'; sRet += 's';
} else if (ch == '\0') { sRet += '\\'; sRet += '0';
} else if (ch == '\\') { sRet += '\\'; sRet += '\\';
} else if (ch == '\r') { sRet += '\\'; sRet += 'r';
} else if (ch == '\n') { sRet += '\\'; sRet += 'n';
} else { sRet += ch; }
break;
}
}