github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/src/pkg/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 returns true if rune is in 'tspecials' as defined by RFC
    12  // 1521 and RFC 2045.
    13  func isTSpecial(r rune) bool {
    14  	return strings.IndexRune(`()<>@,;:\"/[]?=`, r) != -1
    15  }
    16  
    17  // isTokenChar returns true if 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 returns true if 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  
    34  // isQText returns true if rune is in 'qtext' as defined by RFC 822.
    35  func isQText(r int) bool {
    36  	// CHAR        =  <any ASCII character>        ; (  0-177,  0.-127.)
    37  	// qtext       =  <any CHAR excepting <">,     ; => may be folded
    38  	//                "\" & CR, and including
    39  	//                linear-white-space>
    40  	switch r {
    41  	case '"', '\\', '\r':
    42  		return false
    43  	}
    44  	return r < 0x80
    45  }