Merge pull request #693 from jpnurmi/tags

Valueless & escaped message tags
This commit is contained in:
Alexey Sokolov
2014-09-29 23:53:55 +01:00
5 changed files with 93 additions and 9 deletions

View File

@@ -182,6 +182,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;
@@ -322,6 +324,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) {
@@ -380,6 +409,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;
}
}