1// Modified UTF-7 encoding defined in RFC 3501 section 5.1.3
2package utf7
3
4import (
5	"encoding/base64"
6
7	"golang.org/x/text/encoding"
8)
9
10const (
11	min = 0x20 // Minimum self-representing UTF-7 value
12	max = 0x7E // Maximum self-representing UTF-7 value
13
14	repl = '\uFFFD' // Unicode replacement code point
15)
16
17var b64Enc = base64.NewEncoding("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,")
18
19type enc struct{}
20
21func (e enc) NewDecoder() *encoding.Decoder {
22	return &encoding.Decoder{
23		Transformer: &decoder{true},
24	}
25}
26
27func (e enc) NewEncoder() *encoding.Encoder {
28	return &encoding.Encoder{
29		Transformer: &encoder{},
30	}
31}
32
33// Encoding is the modified UTF-7 encoding.
34var Encoding encoding.Encoding = enc{}
35