|  | // Copyright 2010 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package mime | 
|  |  | 
|  | import ( | 
|  | "strings" | 
|  | ) | 
|  |  | 
|  | // isTSpecial reports whether rune is in 'tspecials' as defined by RFC | 
|  | // 1521 and RFC 2045. | 
|  | func isTSpecial(r rune) bool { | 
|  | return strings.ContainsRune(`()<>@,;:\"/[]?=`, r) | 
|  | } | 
|  |  | 
|  | // isTokenChar reports whether rune is in 'token' as defined by RFC | 
|  | // 1521 and RFC 2045. | 
|  | func isTokenChar(r rune) bool { | 
|  | // token := 1*<any (US-ASCII) CHAR except SPACE, CTLs, | 
|  | //             or tspecials> | 
|  | return r > 0x20 && r < 0x7f && !isTSpecial(r) | 
|  | } | 
|  |  | 
|  | // isToken reports whether s is a 'token' as defined by RFC 1521 | 
|  | // and RFC 2045. | 
|  | func isToken(s string) bool { | 
|  | if s == "" { | 
|  | return false | 
|  | } | 
|  | return strings.IndexFunc(s, isNotTokenChar) < 0 | 
|  | } |