]> git.mxchange.org Git - flightgear.git/commitdiff
add unescape function for conversion of \t, \n, \x1b etc. in <format> strings
authormfranz <mfranz>
Sun, 29 Jul 2007 12:26:33 +0000 (12:26 +0000)
committermfranz <mfranz>
Sun, 29 Jul 2007 12:26:33 +0000 (12:26 +0000)
src/Main/util.cxx
src/Main/util.hxx

index c6efd7b0a5e33b1bca426f198c81ffb4ff8dde69..1d0d6440f5ed2c3f9e92a207e06c1a0003aa2906 100644 (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
 
index a3dba939abc2783455affea66dd867b5bf25c307..bcd64658a3bfc81fdb077154b8b1986c2f415b11 100644 (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