43 lines
774 B
Go
43 lines
774 B
Go
package core
|
|
|
|
import "bytes"
|
|
|
|
// String replaces the escape sequences in the contents of a string token with the respective characters.
|
|
func String(data []byte) []byte {
|
|
data = data[1 : len(data)-1]
|
|
escape := bytes.IndexByte(data, '\\')
|
|
|
|
if escape == -1 {
|
|
return data
|
|
}
|
|
|
|
tmp := make([]byte, 0, len(data))
|
|
|
|
for {
|
|
tmp = append(tmp, data[:escape]...)
|
|
|
|
switch data[escape+1] {
|
|
case '0':
|
|
tmp = append(tmp, '\000')
|
|
case 't':
|
|
tmp = append(tmp, '\t')
|
|
case 'n':
|
|
tmp = append(tmp, '\n')
|
|
case 'r':
|
|
tmp = append(tmp, '\r')
|
|
case '"':
|
|
tmp = append(tmp, '"')
|
|
case '\'':
|
|
tmp = append(tmp, '\'')
|
|
case '\\':
|
|
tmp = append(tmp, '\\')
|
|
}
|
|
|
|
data = data[escape+2:]
|
|
escape = bytes.IndexByte(data, '\\')
|
|
|
|
if escape == -1 {
|
|
return tmp
|
|
}
|
|
}
|
|
}
|