44 lines
580 B
Go
44 lines
580 B
Go
|
package domainlabel
|
||
|
|
||
|
import (
|
||
|
"sourcecode.social/reiver/go-rfc2396/alphanum"
|
||
|
)
|
||
|
|
||
|
func Bytes(p []byte) (result []byte, rest []byte, ok bool) {
|
||
|
|
||
|
length := len(p)
|
||
|
|
||
|
if length < 1 {
|
||
|
return nil, p, false
|
||
|
}
|
||
|
|
||
|
{
|
||
|
p0 := p[0]
|
||
|
|
||
|
if !alphanum.ByteIs(p0) {
|
||
|
return nil, p, false
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
for i,b := range p {
|
||
|
if !alphanum.ByteIs(b) && '-' != b {
|
||
|
|
||
|
if !alphanum.ByteIs(p[i-1]) {
|
||
|
return p[:i-1], p[i-1:], true
|
||
|
}
|
||
|
|
||
|
return p[:i], p[i:], true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if !alphanum.ByteIs(p[length-1]) {
|
||
|
return p[:length-1], p[length-1:], true
|
||
|
}
|
||
|
|
||
|
|
||
|
return p, nil, true
|
||
|
}
|
||
|
}
|