--- /dev/null
+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();
+ }
+
+}