-
Notifications
You must be signed in to change notification settings - Fork 0
/
UnescapeString.go
45 lines (42 loc) · 1.08 KB
/
UnescapeString.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// =================================================================
//
// Copyright (C) 2019 Spatial Current, Inc. - All Rights Reserved
// Released as open source under the MIT License. See LICENSE file.
//
// =================================================================
package dfl
import (
"strconv"
)
// UnescapeString unescapes a string
//
// - \\ => \
// - \n => new line
// - \r => carriage return
// - \t => horizontal tab
// - \s => space
// - \u1234 => unicode value
func UnescapeString(in string) string {
for i, c := range in {
if c == '\\' {
switch in[i+1] {
case '\\':
return in[0:i] + "\\" + UnescapeString(in[i+2:])
case 'n':
return in[0:i] + "\n" + UnescapeString(in[i+2:])
case 'r':
return in[0:i] + "\r" + UnescapeString(in[i+2:])
case 't':
return in[0:i] + "\t" + UnescapeString(in[i+2:])
case 's':
return in[0:i] + " " + UnescapeString(in[i+2:])
case 'u':
v, _, _, err := strconv.UnquoteChar("\\u"+in[i+2:i+6], '"')
if err == nil {
return in[0:i] + string(v) + UnescapeString(in[i+6:])
}
}
}
}
return in
}