cleanup boot
This commit is contained in:
parent
6c381264bd
commit
278a4952b9
64
unescape.go
Normal file
64
unescape.go
Normal 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))
|
||||
}
|
Loading…
Reference in New Issue
Block a user