]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/string/StringEscape.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.runtime / src / org / simantics / scl / runtime / string / StringEscape.java
diff --git a/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/string/StringEscape.java b/bundles/org.simantics.scl.runtime/src/org/simantics/scl/runtime/string/StringEscape.java
new file mode 100644 (file)
index 0000000..96dc5f4
--- /dev/null
@@ -0,0 +1,93 @@
+package org.simantics.scl.runtime.string;
+
+
+public class StringEscape {
+
+    public static String escapeJava(String str) {
+        return appendEscapedString(new StringBuilder(str.length()), str).toString();
+    }
+    
+    public static StringBuilder appendEscapedString(StringBuilder b, String str) {
+        int length = str.length();
+        for(int i = 0; i < length; i++) {
+            char c = str.charAt(i);
+            if (c < 32) {
+                switch (c) {
+                case '\b' :
+                    b.append('\\');
+                    b.append('b');
+                    break;
+                case '\n' :
+                    b.append('\\');
+                    b.append('n');
+                    break;
+                case '\t' :
+                    b.append('\\');
+                    b.append('t');
+                    break;
+                case '\f' :
+                    b.append('\\');
+                    b.append('f');
+                    break;
+                case '\r' :
+                    b.append('\\');
+                    b.append('r');
+                    break;
+                default :
+                    if (c > 0xf)
+                        b.append("\\u00" + Integer.toHexString(c));
+                    else
+                        b.append("\\u000" + Integer.toHexString(c));
+                    break;
+                }
+            }
+            else {
+                switch (c) {
+                case '"' :
+                    b.append('\\').append('"');
+                    break;
+                case '\\' :
+                    b.append('\\').append('\\');
+                    break;
+                default :
+                    b.append(c);
+                    break;
+                }
+            }
+        }
+        return b;
+    }
+    
+    public static String unescapeJava(String str) {
+        int length = str.length();
+        StringBuilder b = new StringBuilder(length*3/2);
+        for(int i = 0; i < length; i++) {
+            char c = str.charAt(i);
+            if(c == '\\') {
+                ++i;
+                c = str.charAt(i); // if i==length, this throws an exception, which is OK
+                switch(c) {
+                case 'b': b.append('\b'); break;
+                case 't': b.append('\t'); break;
+                case 'n': b.append('\n'); break;
+                case 'f': b.append('\f'); break;
+                case 'r': b.append('\r'); break;
+                case 'u':
+                    b.append((char)Integer.parseInt(str.substring(i+1, i+5), 16));
+                    i+=4;
+                    break;
+                default:
+                    if(c >= '0' && c <= '9') {
+                        b.append(c - '0');
+                    }
+                    else
+                        b.append(c);
+                }
+            }
+            else
+                b.append(c);
+        }
+        return b.toString();
+    }
+    
+}