cleanup boot

This commit is contained in:
Arpad Ryszka 2017-10-29 16:38:32 +01:00
parent 6c381264bd
commit 278a4952b9

64
unescape.go Normal file
View File

@ -0,0 +1,64 @@
package treerack
func runesContain(rs []rune, r rune) bool {
for _, ri := range rs {
if ri == r {
return true
}
}
return false
}
func unescapeChar(c rune) rune {
switch c {
case 'n':
return '\n'
case 't':
return '\t'
case 'b':
return '\b'
case 'f':
return '\f'
case 'r':
return '\r'
case 'v':
return '\v'
default:
return c
}
}
func unescape(escape rune, banned []rune, chars []rune) ([]rune, error) {
var (
unescaped []rune
escaped bool
)
for _, ci := range chars {
if escaped {
unescaped = append(unescaped, unescapeChar(ci))
escaped = false
continue
}
switch {
case ci == escape:
escaped = true
case runesContain(banned, ci):
return nil, ErrInvalidEscapeCharacter
default:
unescaped = append(unescaped, ci)
}
}
if escaped {
return nil, ErrInvalidEscapeCharacter
}
return unescaped, nil
}
func unescapeCharSequence(s string) ([]rune, error) {
return unescape('\\', []rune{'"', '\\'}, []rune(s))
}