1
0
Fork 0

add unescape function for conversion of \t, \n, \x1b etc. in <format> strings

This commit is contained in:
mfranz 2007-07-29 12:26:33 +00:00
parent ed677676c0
commit 991c2ff06a
2 changed files with 61 additions and 0 deletions

View file

@ -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

View file

@ -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