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