]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.scl.runtime.string;
2
3
4 public class StringEscape {
5
6     public static String escapeJava(String str) {
7         return appendEscapedString(new StringBuilder(str.length()), str).toString();
8     }
9     
10     public static StringBuilder appendEscapedString(StringBuilder b, String str) {
11         int length = str.length();
12         for(int i = 0; i < length; i++) {
13             char c = str.charAt(i);
14             if (c < 32) {
15                 switch (c) {
16                 case '\b' :
17                     b.append('\\');
18                     b.append('b');
19                     break;
20                 case '\n' :
21                     b.append('\\');
22                     b.append('n');
23                     break;
24                 case '\t' :
25                     b.append('\\');
26                     b.append('t');
27                     break;
28                 case '\f' :
29                     b.append('\\');
30                     b.append('f');
31                     break;
32                 case '\r' :
33                     b.append('\\');
34                     b.append('r');
35                     break;
36                 default :
37                     if (c > 0xf)
38                         b.append("\\u00" + Integer.toHexString(c));
39                     else
40                         b.append("\\u000" + Integer.toHexString(c));
41                     break;
42                 }
43             }
44             else {
45                 switch (c) {
46                 case '"' :
47                     b.append('\\').append('"');
48                     break;
49                 case '\\' :
50                     b.append('\\').append('\\');
51                     break;
52                 default :
53                     b.append(c);
54                     break;
55                 }
56             }
57         }
58         return b;
59     }
60     
61     public static String unescapeJava(String str) {
62         int length = str.length();
63         StringBuilder b = new StringBuilder(length*3/2);
64         for(int i = 0; i < length; i++) {
65             char c = str.charAt(i);
66             if(c == '\\') {
67                 ++i;
68                 c = str.charAt(i); // if i==length, this throws an exception, which is OK
69                 switch(c) {
70                 case 'b': b.append('\b'); break;
71                 case 't': b.append('\t'); break;
72                 case 'n': b.append('\n'); break;
73                 case 'f': b.append('\f'); break;
74                 case 'r': b.append('\r'); break;
75                 case 'u':
76                     b.append((char)Integer.parseInt(str.substring(i+1, i+5), 16));
77                     i+=4;
78                     break;
79                 default:
80                     if(c >= '0' && c <= '9') {
81                         b.append(c - '0');
82                     }
83                     else
84                         b.append(c);
85                 }
86             }
87             else
88                 b.append(c);
89         }
90         return b.toString();
91     }
92     
93 }