From: mfranz Date: Sun, 29 Jul 2007 12:26:33 +0000 (+0000) Subject: add unescape function for conversion of \t, \n, \x1b etc. in strings X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=991c2ff06adad4d92c78507c5d1b2241aea87f3f;p=flightgear.git add unescape function for conversion of \t, \n, \x1b etc. in strings --- diff --git a/src/Main/util.cxx b/src/Main/util.cxx index c6efd7b0a..1d0d6440f 100644 --- a/src/Main/util.cxx +++ b/src/Main/util.cxx @@ -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 diff --git a/src/Main/util.hxx b/src/Main/util.hxx index a3dba939a..bcd64658a 100644 --- a/src/Main/util.hxx +++ b/src/Main/util.hxx @@ -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