add unescape function for conversion of \t, \n, \x1b etc. in <format> strings
This commit is contained in:
parent
ed677676c0
commit
991c2ff06a
2 changed files with 61 additions and 0 deletions
|
@ -143,5 +143,57 @@ fgGetLowPass (double current, double target, double timeratio)
|
|||
return current;
|
||||
}
|
||||
|
||||
|
||||
string
|
||||
fgUnescape(const char *s)
|
||||
{
|
||||
string r;
|
||||
while (*s) {
|
||||
if (*s != '\\') {
|
||||
r += *s++;
|
||||
continue;
|
||||
}
|
||||
if (!*++s)
|
||||
break;
|
||||
if (*s == '\\') {
|
||||
r += '\\';
|
||||
} else if (*s == 'n') {
|
||||
r += '\n';
|
||||
} else if (*s == 'r') {
|
||||
r += '\r';
|
||||
} else if (*s == 't') {
|
||||
r += '\t';
|
||||
} else if (*s == 'v') {
|
||||
r += '\v';
|
||||
} else if (*s == 'f') {
|
||||
r += '\f';
|
||||
} else if (*s == 'a') {
|
||||
;
|
||||
} else if (*s == 'b') {
|
||||
;
|
||||
} else if (*s == 'x') {
|
||||
if (!*++s)
|
||||
break;
|
||||
int v = 0;
|
||||
for (int i = 0; i < 2 && isxdigit(*s); i++, s++)
|
||||
v = v * 16 + (isdigit(*s) ? *s - '0' : 10 + tolower(*s) - 'a');
|
||||
r += v;
|
||||
continue;
|
||||
|
||||
} else if (*s >= '0' && *s <= '7') {
|
||||
int v = *s++ - '0';
|
||||
for (int i = 0; i < 3 && *s >= '0' && *s <= '7'; i++, s++)
|
||||
v = v * 8 + *s - '0';
|
||||
r += v;
|
||||
continue;
|
||||
|
||||
} else {
|
||||
r += *s;
|
||||
}
|
||||
s++;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
// end of util.cxx
|
||||
|
||||
|
|
|
@ -74,4 +74,13 @@ extern void fgExit (int status = 0);
|
|||
extern double fgGetLowPass (double current, double target, double timeratio);
|
||||
|
||||
|
||||
/**
|
||||
* Unescape string.
|
||||
*
|
||||
* @param str String possibly containing escaped characters.
|
||||
* @return string with escaped characters replaced by single character values.
|
||||
*/
|
||||
extern std::string fgUnescape (const char *str);
|
||||
|
||||
|
||||
#endif // __UTIL_HXX
|
||||
|
|
Loading…
Add table
Reference in a new issue