Home | History | Annotate | Download | only in mime
      1 // Copyright 2010 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package mime
      6 
      7 import (
      8 	"strings"
      9 )
     10 
     11 // isTSpecial reports whether rune is in 'tspecials' as defined by RFC
     12 // 1521 and RFC 2045.
     13 func isTSpecial(r rune) bool {
     14 	return strings.ContainsRune(`()<>@,;:\"/[]?=`, r)
     15 }
     16 
     17 // isTokenChar reports whether rune is in 'token' as defined by RFC
     18 // 1521 and RFC 2045.
     19 func isTokenChar(r rune) bool {
     20 	// token := 1*<any (US-ASCII) CHAR except SPACE, CTLs,
     21 	//             or tspecials>
     22 	return r > 0x20 && r < 0x7f && !isTSpecial(r)
     23 }
     24 
     25 // isToken reports whether s is a 'token' as defined by RFC 1521
     26 // and RFC 2045.
     27 func isToken(s string) bool {
     28 	if s == "" {
     29 		return false
     30 	}
     31 	return strings.IndexFunc(s, isNotTokenChar) < 0
     32 }
     33