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