github.com/c12o16h1/go/src@v0.0.0-20200114212001-5a151c0f00ed/mime/grammar.go (about)

     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  }