| // 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 | |
| } |