mirror of https://github.com/knative/pkg.git
bump net and text packages (#2692)
* Allow reconcilers to listen to leader promotion events (#2688) * Generator: allow reconcilers to listen to leader promotion events Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com> * Run hack/update-codegen.sh Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com> --------- Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com> * run update-deps --------- Signed-off-by: Pierangelo Di Pilato <pierdipi@redhat.com> Co-authored-by: Pierangelo Di Pilato <pierdipi@redhat.com>
This commit is contained in:
parent
2fdd6bf8be
commit
0591b75bb6
6
go.mod
6
go.mod
|
@ -32,10 +32,10 @@ require (
|
||||||
go.uber.org/atomic v1.9.0
|
go.uber.org/atomic v1.9.0
|
||||||
go.uber.org/automaxprocs v1.4.0
|
go.uber.org/automaxprocs v1.4.0
|
||||||
go.uber.org/zap v1.19.1
|
go.uber.org/zap v1.19.1
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b
|
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c
|
||||||
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
|
golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
|
||||||
golang.org/x/text v0.3.7
|
golang.org/x/text v0.3.8
|
||||||
golang.org/x/tools v0.1.12
|
golang.org/x/tools v0.1.12
|
||||||
gomodules.xyz/jsonpatch/v2 v2.2.0
|
gomodules.xyz/jsonpatch/v2 v2.2.0
|
||||||
google.golang.org/api v0.61.0
|
google.golang.org/api v0.61.0
|
||||||
|
@ -96,7 +96,7 @@ require (
|
||||||
go.uber.org/multierr v1.6.0 // indirect
|
go.uber.org/multierr v1.6.0 // indirect
|
||||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect
|
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd // indirect
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f // indirect
|
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect
|
||||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
|
|
11
go.sum
11
go.sum
|
@ -577,8 +577,8 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT
|
||||||
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0=
|
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c h1:yKufUcDwucU5urd+50/Opbt4AYpqthk7wHpHok8f1lo=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
@ -673,8 +673,8 @@ golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||||
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f h1:v4INt8xihDGvnrfjMDVXGxw9wrfxYyCjk0KbXjhR55s=
|
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
@ -686,8 +686,9 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
|
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY=
|
||||||
|
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
|
|
@ -23,7 +23,7 @@ const frameHeaderLen = 9
|
||||||
var padZeros = make([]byte, 255) // zeros for padding
|
var padZeros = make([]byte, 255) // zeros for padding
|
||||||
|
|
||||||
// A FrameType is a registered frame type as defined in
|
// A FrameType is a registered frame type as defined in
|
||||||
// http://http2.github.io/http2-spec/#rfc.section.11.2
|
// https://httpwg.org/specs/rfc7540.html#rfc.section.11.2
|
||||||
type FrameType uint8
|
type FrameType uint8
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -146,7 +146,7 @@ func typeFrameParser(t FrameType) frameParser {
|
||||||
|
|
||||||
// A FrameHeader is the 9 byte header of all HTTP/2 frames.
|
// A FrameHeader is the 9 byte header of all HTTP/2 frames.
|
||||||
//
|
//
|
||||||
// See http://http2.github.io/http2-spec/#FrameHeader
|
// See https://httpwg.org/specs/rfc7540.html#FrameHeader
|
||||||
type FrameHeader struct {
|
type FrameHeader struct {
|
||||||
valid bool // caller can access []byte fields in the Frame
|
valid bool // caller can access []byte fields in the Frame
|
||||||
|
|
||||||
|
@ -575,7 +575,7 @@ func (fr *Framer) checkFrameOrder(f Frame) error {
|
||||||
|
|
||||||
// A DataFrame conveys arbitrary, variable-length sequences of octets
|
// A DataFrame conveys arbitrary, variable-length sequences of octets
|
||||||
// associated with a stream.
|
// associated with a stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.1
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.1
|
||||||
type DataFrame struct {
|
type DataFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
data []byte
|
data []byte
|
||||||
|
@ -698,7 +698,7 @@ func (f *Framer) WriteDataPadded(streamID uint32, endStream bool, data, pad []by
|
||||||
// endpoints communicate, such as preferences and constraints on peer
|
// endpoints communicate, such as preferences and constraints on peer
|
||||||
// behavior.
|
// behavior.
|
||||||
//
|
//
|
||||||
// See http://http2.github.io/http2-spec/#SETTINGS
|
// See https://httpwg.org/specs/rfc7540.html#SETTINGS
|
||||||
type SettingsFrame struct {
|
type SettingsFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
p []byte
|
p []byte
|
||||||
|
@ -837,7 +837,7 @@ func (f *Framer) WriteSettingsAck() error {
|
||||||
// A PingFrame is a mechanism for measuring a minimal round trip time
|
// A PingFrame is a mechanism for measuring a minimal round trip time
|
||||||
// from the sender, as well as determining whether an idle connection
|
// from the sender, as well as determining whether an idle connection
|
||||||
// is still functional.
|
// is still functional.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.7
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.7
|
||||||
type PingFrame struct {
|
type PingFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
Data [8]byte
|
Data [8]byte
|
||||||
|
@ -870,7 +870,7 @@ func (f *Framer) WritePing(ack bool, data [8]byte) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A GoAwayFrame informs the remote peer to stop creating streams on this connection.
|
// A GoAwayFrame informs the remote peer to stop creating streams on this connection.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.8
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.8
|
||||||
type GoAwayFrame struct {
|
type GoAwayFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
LastStreamID uint32
|
LastStreamID uint32
|
||||||
|
@ -934,7 +934,7 @@ func parseUnknownFrame(_ *frameCache, fh FrameHeader, countError func(string), p
|
||||||
}
|
}
|
||||||
|
|
||||||
// A WindowUpdateFrame is used to implement flow control.
|
// A WindowUpdateFrame is used to implement flow control.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.9
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.9
|
||||||
type WindowUpdateFrame struct {
|
type WindowUpdateFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
Increment uint32 // never read with high bit set
|
Increment uint32 // never read with high bit set
|
||||||
|
@ -1123,7 +1123,7 @@ func (f *Framer) WriteHeaders(p HeadersFrameParam) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A PriorityFrame specifies the sender-advised priority of a stream.
|
// A PriorityFrame specifies the sender-advised priority of a stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.3
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.3
|
||||||
type PriorityFrame struct {
|
type PriorityFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
PriorityParam
|
PriorityParam
|
||||||
|
@ -1193,7 +1193,7 @@ func (f *Framer) WritePriority(streamID uint32, p PriorityParam) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A RSTStreamFrame allows for abnormal termination of a stream.
|
// A RSTStreamFrame allows for abnormal termination of a stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.4
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.4
|
||||||
type RSTStreamFrame struct {
|
type RSTStreamFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
ErrCode ErrCode
|
ErrCode ErrCode
|
||||||
|
@ -1225,7 +1225,7 @@ func (f *Framer) WriteRSTStream(streamID uint32, code ErrCode) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A ContinuationFrame is used to continue a sequence of header block fragments.
|
// A ContinuationFrame is used to continue a sequence of header block fragments.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.10
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.10
|
||||||
type ContinuationFrame struct {
|
type ContinuationFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
headerFragBuf []byte
|
headerFragBuf []byte
|
||||||
|
@ -1266,7 +1266,7 @@ func (f *Framer) WriteContinuation(streamID uint32, endHeaders bool, headerBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
// A PushPromiseFrame is used to initiate a server stream.
|
// A PushPromiseFrame is used to initiate a server stream.
|
||||||
// See http://http2.github.io/http2-spec/#rfc.section.6.6
|
// See https://httpwg.org/specs/rfc7540.html#rfc.section.6.6
|
||||||
type PushPromiseFrame struct {
|
type PushPromiseFrame struct {
|
||||||
FrameHeader
|
FrameHeader
|
||||||
PromiseID uint32
|
PromiseID uint32
|
||||||
|
|
|
@ -191,7 +191,7 @@ func appendTableSize(dst []byte, v uint32) []byte {
|
||||||
// bit prefix, to dst and returns the extended buffer.
|
// bit prefix, to dst and returns the extended buffer.
|
||||||
//
|
//
|
||||||
// See
|
// See
|
||||||
// http://http2.github.io/http2-spec/compression.html#integer.representation
|
// https://httpwg.org/specs/rfc7541.html#integer.representation
|
||||||
func appendVarInt(dst []byte, n byte, i uint64) []byte {
|
func appendVarInt(dst []byte, n byte, i uint64) []byte {
|
||||||
k := uint64((1 << n) - 1)
|
k := uint64((1 << n) - 1)
|
||||||
if i < k {
|
if i < k {
|
||||||
|
|
|
@ -59,7 +59,7 @@ func (hf HeaderField) String() string {
|
||||||
|
|
||||||
// Size returns the size of an entry per RFC 7541 section 4.1.
|
// Size returns the size of an entry per RFC 7541 section 4.1.
|
||||||
func (hf HeaderField) Size() uint32 {
|
func (hf HeaderField) Size() uint32 {
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.4.1
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.4.1
|
||||||
// "The size of the dynamic table is the sum of the size of
|
// "The size of the dynamic table is the sum of the size of
|
||||||
// its entries. The size of an entry is the sum of its name's
|
// its entries. The size of an entry is the sum of its name's
|
||||||
// length in octets (as defined in Section 5.2), its value's
|
// length in octets (as defined in Section 5.2), its value's
|
||||||
|
@ -158,7 +158,7 @@ func (d *Decoder) SetAllowedMaxDynamicTableSize(v uint32) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type dynamicTable struct {
|
type dynamicTable struct {
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.2.3.2
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.2.3.2
|
||||||
table headerFieldTable
|
table headerFieldTable
|
||||||
size uint32 // in bytes
|
size uint32 // in bytes
|
||||||
maxSize uint32 // current maxSize
|
maxSize uint32 // current maxSize
|
||||||
|
@ -307,27 +307,27 @@ func (d *Decoder) parseHeaderFieldRepr() error {
|
||||||
case b&128 != 0:
|
case b&128 != 0:
|
||||||
// Indexed representation.
|
// Indexed representation.
|
||||||
// High bit set?
|
// High bit set?
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.1
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.1
|
||||||
return d.parseFieldIndexed()
|
return d.parseFieldIndexed()
|
||||||
case b&192 == 64:
|
case b&192 == 64:
|
||||||
// 6.2.1 Literal Header Field with Incremental Indexing
|
// 6.2.1 Literal Header Field with Incremental Indexing
|
||||||
// 0b10xxxxxx: top two bits are 10
|
// 0b10xxxxxx: top two bits are 10
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.1
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.1
|
||||||
return d.parseFieldLiteral(6, indexedTrue)
|
return d.parseFieldLiteral(6, indexedTrue)
|
||||||
case b&240 == 0:
|
case b&240 == 0:
|
||||||
// 6.2.2 Literal Header Field without Indexing
|
// 6.2.2 Literal Header Field without Indexing
|
||||||
// 0b0000xxxx: top four bits are 0000
|
// 0b0000xxxx: top four bits are 0000
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.2
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.2
|
||||||
return d.parseFieldLiteral(4, indexedFalse)
|
return d.parseFieldLiteral(4, indexedFalse)
|
||||||
case b&240 == 16:
|
case b&240 == 16:
|
||||||
// 6.2.3 Literal Header Field never Indexed
|
// 6.2.3 Literal Header Field never Indexed
|
||||||
// 0b0001xxxx: top four bits are 0001
|
// 0b0001xxxx: top four bits are 0001
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.2.3
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.2.3
|
||||||
return d.parseFieldLiteral(4, indexedNever)
|
return d.parseFieldLiteral(4, indexedNever)
|
||||||
case b&224 == 32:
|
case b&224 == 32:
|
||||||
// 6.3 Dynamic Table Size Update
|
// 6.3 Dynamic Table Size Update
|
||||||
// Top three bits are '001'.
|
// Top three bits are '001'.
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.6.3
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.6.3
|
||||||
return d.parseDynamicTableSizeUpdate()
|
return d.parseDynamicTableSizeUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ var errVarintOverflow = DecodingError{errors.New("varint integer overflow")}
|
||||||
|
|
||||||
// readVarInt reads an unsigned variable length integer off the
|
// readVarInt reads an unsigned variable length integer off the
|
||||||
// beginning of p. n is the parameter as described in
|
// beginning of p. n is the parameter as described in
|
||||||
// http://http2.github.io/http2-spec/compression.html#rfc.section.5.1.
|
// https://httpwg.org/specs/rfc7541.html#rfc.section.5.1.
|
||||||
//
|
//
|
||||||
// n must always be between 1 and 8.
|
// n must always be between 1 and 8.
|
||||||
//
|
//
|
||||||
|
|
|
@ -55,14 +55,14 @@ const (
|
||||||
ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
ClientPreface = "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"
|
||||||
|
|
||||||
// SETTINGS_MAX_FRAME_SIZE default
|
// SETTINGS_MAX_FRAME_SIZE default
|
||||||
// http://http2.github.io/http2-spec/#rfc.section.6.5.2
|
// https://httpwg.org/specs/rfc7540.html#rfc.section.6.5.2
|
||||||
initialMaxFrameSize = 16384
|
initialMaxFrameSize = 16384
|
||||||
|
|
||||||
// NextProtoTLS is the NPN/ALPN protocol negotiated during
|
// NextProtoTLS is the NPN/ALPN protocol negotiated during
|
||||||
// HTTP/2's TLS setup.
|
// HTTP/2's TLS setup.
|
||||||
NextProtoTLS = "h2"
|
NextProtoTLS = "h2"
|
||||||
|
|
||||||
// http://http2.github.io/http2-spec/#SettingValues
|
// https://httpwg.org/specs/rfc7540.html#SettingValues
|
||||||
initialHeaderTableSize = 4096
|
initialHeaderTableSize = 4096
|
||||||
|
|
||||||
initialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size
|
initialWindowSize = 65535 // 6.9.2 Initial Flow Control Window Size
|
||||||
|
@ -111,7 +111,7 @@ func (st streamState) String() string {
|
||||||
// Setting is a setting parameter: which setting it is, and its value.
|
// Setting is a setting parameter: which setting it is, and its value.
|
||||||
type Setting struct {
|
type Setting struct {
|
||||||
// ID is which setting is being set.
|
// ID is which setting is being set.
|
||||||
// See http://http2.github.io/http2-spec/#SettingValues
|
// See https://httpwg.org/specs/rfc7540.html#SettingFormat
|
||||||
ID SettingID
|
ID SettingID
|
||||||
|
|
||||||
// Val is the value.
|
// Val is the value.
|
||||||
|
@ -143,7 +143,7 @@ func (s Setting) Valid() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// A SettingID is an HTTP/2 setting as defined in
|
// A SettingID is an HTTP/2 setting as defined in
|
||||||
// http://http2.github.io/http2-spec/#iana-settings
|
// https://httpwg.org/specs/rfc7540.html#iana-settings
|
||||||
type SettingID uint16
|
type SettingID uint16
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1371,6 +1371,9 @@ func (sc *serverConn) startGracefulShutdownInternal() {
|
||||||
func (sc *serverConn) goAway(code ErrCode) {
|
func (sc *serverConn) goAway(code ErrCode) {
|
||||||
sc.serveG.check()
|
sc.serveG.check()
|
||||||
if sc.inGoAway {
|
if sc.inGoAway {
|
||||||
|
if sc.goAwayCode == ErrCodeNo {
|
||||||
|
sc.goAwayCode = code
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
sc.inGoAway = true
|
sc.inGoAway = true
|
||||||
|
@ -1747,6 +1750,12 @@ func (sc *serverConn) processData(f *DataFrame) error {
|
||||||
|
|
||||||
// Sender sending more than they'd declared?
|
// Sender sending more than they'd declared?
|
||||||
if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {
|
if st.declBodyBytes != -1 && st.bodyBytes+int64(len(data)) > st.declBodyBytes {
|
||||||
|
if sc.inflow.available() < int32(f.Length) {
|
||||||
|
return sc.countError("data_flow", streamError(id, ErrCodeFlowControl))
|
||||||
|
}
|
||||||
|
sc.inflow.take(int32(f.Length))
|
||||||
|
sc.sendWindowUpdate(nil, int(f.Length)) // conn-level
|
||||||
|
|
||||||
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
|
st.body.CloseWithError(fmt.Errorf("sender tried to send more than declared Content-Length of %d bytes", st.declBodyBytes))
|
||||||
// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
|
// RFC 7540, sec 8.1.2.6: A request or response is also malformed if the
|
||||||
// value of a content-length header field does not equal the sum of the
|
// value of a content-length header field does not equal the sum of the
|
||||||
|
@ -2223,6 +2232,9 @@ func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler
|
||||||
didPanic := true
|
didPanic := true
|
||||||
defer func() {
|
defer func() {
|
||||||
rw.rws.stream.cancelCtx()
|
rw.rws.stream.cancelCtx()
|
||||||
|
if req.MultipartForm != nil {
|
||||||
|
req.MultipartForm.RemoveAll()
|
||||||
|
}
|
||||||
if didPanic {
|
if didPanic {
|
||||||
e := recover()
|
e := recover()
|
||||||
sc.writeFrameFromHandler(FrameWriteRequest{
|
sc.writeFrameFromHandler(FrameWriteRequest{
|
||||||
|
|
|
@ -67,13 +67,23 @@ const (
|
||||||
// A Transport internally caches connections to servers. It is safe
|
// A Transport internally caches connections to servers. It is safe
|
||||||
// for concurrent use by multiple goroutines.
|
// for concurrent use by multiple goroutines.
|
||||||
type Transport struct {
|
type Transport struct {
|
||||||
// DialTLS specifies an optional dial function for creating
|
// DialTLSContext specifies an optional dial function with context for
|
||||||
// TLS connections for requests.
|
// creating TLS connections for requests.
|
||||||
//
|
//
|
||||||
// If DialTLS is nil, tls.Dial is used.
|
// If DialTLSContext and DialTLS is nil, tls.Dial is used.
|
||||||
//
|
//
|
||||||
// If the returned net.Conn has a ConnectionState method like tls.Conn,
|
// If the returned net.Conn has a ConnectionState method like tls.Conn,
|
||||||
// it will be used to set http.Response.TLS.
|
// it will be used to set http.Response.TLS.
|
||||||
|
DialTLSContext func(ctx context.Context, network, addr string, cfg *tls.Config) (net.Conn, error)
|
||||||
|
|
||||||
|
// DialTLS specifies an optional dial function for creating
|
||||||
|
// TLS connections for requests.
|
||||||
|
//
|
||||||
|
// If DialTLSContext and DialTLS is nil, tls.Dial is used.
|
||||||
|
//
|
||||||
|
// Deprecated: Use DialTLSContext instead, which allows the transport
|
||||||
|
// to cancel dials as soon as they are no longer needed.
|
||||||
|
// If both are set, DialTLSContext takes priority.
|
||||||
DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
|
DialTLS func(network, addr string, cfg *tls.Config) (net.Conn, error)
|
||||||
|
|
||||||
// TLSClientConfig specifies the TLS configuration to use with
|
// TLSClientConfig specifies the TLS configuration to use with
|
||||||
|
@ -592,7 +602,7 @@ func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse b
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
tconn, err := t.dialTLS(ctx)("tcp", addr, t.newTLSConfig(host))
|
tconn, err := t.dialTLS(ctx, "tcp", addr, t.newTLSConfig(host))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -613,24 +623,25 @@ func (t *Transport) newTLSConfig(host string) *tls.Config {
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transport) dialTLS(ctx context.Context) func(string, string, *tls.Config) (net.Conn, error) {
|
func (t *Transport) dialTLS(ctx context.Context, network, addr string, tlsCfg *tls.Config) (net.Conn, error) {
|
||||||
if t.DialTLS != nil {
|
if t.DialTLSContext != nil {
|
||||||
return t.DialTLS
|
return t.DialTLSContext(ctx, network, addr, tlsCfg)
|
||||||
|
} else if t.DialTLS != nil {
|
||||||
|
return t.DialTLS(network, addr, tlsCfg)
|
||||||
}
|
}
|
||||||
return func(network, addr string, cfg *tls.Config) (net.Conn, error) {
|
|
||||||
tlsCn, err := t.dialTLSWithContext(ctx, network, addr, cfg)
|
tlsCn, err := t.dialTLSWithContext(ctx, network, addr, tlsCfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
|
||||||
state := tlsCn.ConnectionState()
|
|
||||||
if p := state.NegotiatedProtocol; p != NextProtoTLS {
|
|
||||||
return nil, fmt.Errorf("http2: unexpected ALPN protocol %q; want %q", p, NextProtoTLS)
|
|
||||||
}
|
|
||||||
if !state.NegotiatedProtocolIsMutual {
|
|
||||||
return nil, errors.New("http2: could not negotiate protocol mutually")
|
|
||||||
}
|
|
||||||
return tlsCn, nil
|
|
||||||
}
|
}
|
||||||
|
state := tlsCn.ConnectionState()
|
||||||
|
if p := state.NegotiatedProtocol; p != NextProtoTLS {
|
||||||
|
return nil, fmt.Errorf("http2: unexpected ALPN protocol %q; want %q", p, NextProtoTLS)
|
||||||
|
}
|
||||||
|
if !state.NegotiatedProtocolIsMutual {
|
||||||
|
return nil, errors.New("http2: could not negotiate protocol mutually")
|
||||||
|
}
|
||||||
|
return tlsCn, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// disableKeepAlives reports whether connections should be closed as
|
// disableKeepAlives reports whether connections should be closed as
|
||||||
|
|
|
@ -218,13 +218,62 @@ func Accept(fd int) (nfd int, sa Sockaddr, err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
func recvmsgRaw(fd int, iov []Iovec, oob []byte, flags int, rsa *RawSockaddrAny) (n, oobn int, recvflags int, err error) {
|
||||||
// Recvmsg not implemented on AIX
|
var msg Msghdr
|
||||||
return -1, -1, -1, ENOSYS
|
msg.Name = (*byte)(unsafe.Pointer(rsa))
|
||||||
|
msg.Namelen = uint32(SizeofSockaddrAny)
|
||||||
|
var dummy byte
|
||||||
|
if len(oob) > 0 {
|
||||||
|
// receive at least one normal byte
|
||||||
|
if emptyIovecs(iov) {
|
||||||
|
var iova [1]Iovec
|
||||||
|
iova[0].Base = &dummy
|
||||||
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
|
}
|
||||||
|
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
||||||
|
msg.SetControllen(len(oob))
|
||||||
|
}
|
||||||
|
if len(iov) > 0 {
|
||||||
|
msg.Iov = &iov[0]
|
||||||
|
msg.SetIovlen(len(iov))
|
||||||
|
}
|
||||||
|
if n, err = recvmsg(fd, &msg, flags); n == -1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
oobn = int(msg.Controllen)
|
||||||
|
recvflags = int(msg.Flags)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
func sendmsgN(fd int, iov []Iovec, oob []byte, ptr unsafe.Pointer, salen _Socklen, flags int) (n int, err error) {
|
||||||
// SendmsgN not implemented on AIX
|
var msg Msghdr
|
||||||
return -1, ENOSYS
|
msg.Name = (*byte)(unsafe.Pointer(ptr))
|
||||||
|
msg.Namelen = uint32(salen)
|
||||||
|
var dummy byte
|
||||||
|
var empty bool
|
||||||
|
if len(oob) > 0 {
|
||||||
|
// send at least one normal byte
|
||||||
|
empty := emptyIovecs(iov)
|
||||||
|
if empty {
|
||||||
|
var iova [1]Iovec
|
||||||
|
iova[0].Base = &dummy
|
||||||
|
iova[0].SetLen(1)
|
||||||
|
iov = iova[:]
|
||||||
|
}
|
||||||
|
msg.Control = (*byte)(unsafe.Pointer(&oob[0]))
|
||||||
|
msg.SetControllen(len(oob))
|
||||||
|
}
|
||||||
|
if len(iov) > 0 {
|
||||||
|
msg.Iov = &iov[0]
|
||||||
|
msg.SetIovlen(len(iov))
|
||||||
|
}
|
||||||
|
if n, err = sendmsg(fd, &msg, flags); err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
if len(oob) > 0 && empty {
|
||||||
|
n = 0
|
||||||
|
}
|
||||||
|
return n, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) {
|
||||||
|
|
|
@ -1,3 +0,0 @@
|
||||||
# This source code refers to The Go Authors for copyright purposes.
|
|
||||||
# The master list of authors is in the main Go distribution,
|
|
||||||
# visible at http://tip.golang.org/AUTHORS.
|
|
|
@ -1,3 +0,0 @@
|
||||||
# This source code was written by the Go contributors.
|
|
||||||
# The master list of contributors is in the main Go distribution,
|
|
||||||
# visible at http://tip.golang.org/CONTRIBUTORS.
|
|
|
@ -14,19 +14,19 @@ package cases
|
||||||
//
|
//
|
||||||
// The per-rune values have the following format:
|
// The per-rune values have the following format:
|
||||||
//
|
//
|
||||||
// if (exception) {
|
// if (exception) {
|
||||||
// 15..4 unsigned exception index
|
// 15..4 unsigned exception index
|
||||||
// } else {
|
// } else {
|
||||||
// 15..8 XOR pattern or index to XOR pattern for case mapping
|
// 15..8 XOR pattern or index to XOR pattern for case mapping
|
||||||
// Only 13..8 are used for XOR patterns.
|
// Only 13..8 are used for XOR patterns.
|
||||||
// 7 inverseFold (fold to upper, not to lower)
|
// 7 inverseFold (fold to upper, not to lower)
|
||||||
// 6 index: interpret the XOR pattern as an index
|
// 6 index: interpret the XOR pattern as an index
|
||||||
// or isMid if case mode is cIgnorableUncased.
|
// or isMid if case mode is cIgnorableUncased.
|
||||||
// 5..4 CCC: zero (normal or break), above or other
|
// 5..4 CCC: zero (normal or break), above or other
|
||||||
// }
|
// }
|
||||||
// 3 exception: interpret this value as an exception index
|
// 3 exception: interpret this value as an exception index
|
||||||
// (TODO: is this bit necessary? Probably implied from case mode.)
|
// (TODO: is this bit necessary? Probably implied from case mode.)
|
||||||
// 2..0 case mode
|
// 2..0 case mode
|
||||||
//
|
//
|
||||||
// For the non-exceptional cases, a rune must be either uncased, lowercase or
|
// For the non-exceptional cases, a rune must be either uncased, lowercase or
|
||||||
// uppercase. If the rune is cased, the XOR pattern maps either a lowercase
|
// uppercase. If the rune is cased, the XOR pattern maps either a lowercase
|
||||||
|
@ -128,37 +128,40 @@ const (
|
||||||
// The entry is pointed to by the exception index in an entry. It has the
|
// The entry is pointed to by the exception index in an entry. It has the
|
||||||
// following format:
|
// following format:
|
||||||
//
|
//
|
||||||
// Header
|
// Header:
|
||||||
// byte 0:
|
|
||||||
// 7..6 unused
|
|
||||||
// 5..4 CCC type (same bits as entry)
|
|
||||||
// 3 unused
|
|
||||||
// 2..0 length of fold
|
|
||||||
//
|
//
|
||||||
// byte 1:
|
// byte 0:
|
||||||
// 7..6 unused
|
// 7..6 unused
|
||||||
// 5..3 length of 1st mapping of case type
|
// 5..4 CCC type (same bits as entry)
|
||||||
// 2..0 length of 2nd mapping of case type
|
// 3 unused
|
||||||
|
// 2..0 length of fold
|
||||||
//
|
//
|
||||||
// case 1st 2nd
|
// byte 1:
|
||||||
// lower -> upper, title
|
// 7..6 unused
|
||||||
// upper -> lower, title
|
// 5..3 length of 1st mapping of case type
|
||||||
// title -> lower, upper
|
// 2..0 length of 2nd mapping of case type
|
||||||
|
//
|
||||||
|
// case 1st 2nd
|
||||||
|
// lower -> upper, title
|
||||||
|
// upper -> lower, title
|
||||||
|
// title -> lower, upper
|
||||||
//
|
//
|
||||||
// Lengths with the value 0x7 indicate no value and implies no change.
|
// Lengths with the value 0x7 indicate no value and implies no change.
|
||||||
// A length of 0 indicates a mapping to zero-length string.
|
// A length of 0 indicates a mapping to zero-length string.
|
||||||
//
|
//
|
||||||
// Body bytes:
|
// Body bytes:
|
||||||
// case folding bytes
|
//
|
||||||
// lowercase mapping bytes
|
// case folding bytes
|
||||||
// uppercase mapping bytes
|
// lowercase mapping bytes
|
||||||
// titlecase mapping bytes
|
// uppercase mapping bytes
|
||||||
// closure mapping bytes (for NFKC_Casefold). (TODO)
|
// titlecase mapping bytes
|
||||||
|
// closure mapping bytes (for NFKC_Casefold). (TODO)
|
||||||
//
|
//
|
||||||
// Fallbacks:
|
// Fallbacks:
|
||||||
// missing fold -> lower
|
//
|
||||||
// missing title -> upper
|
// missing fold -> lower
|
||||||
// all missing -> original rune
|
// missing title -> upper
|
||||||
|
// all missing -> original rune
|
||||||
//
|
//
|
||||||
// exceptions starts with a dummy byte to enforce that there is no zero index
|
// exceptions starts with a dummy byte to enforce that there is no zero index
|
||||||
// value.
|
// value.
|
||||||
|
|
|
@ -966,7 +966,7 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements
|
||||||
0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c,
|
0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c,
|
||||||
0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3,
|
0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3,
|
||||||
0x40200000, 0x4020004c, 0x40700000, 0x40800000,
|
0x40200000, 0x4020004c, 0x40700000, 0x40800000,
|
||||||
0x4085a000, 0x4085a0ba, 0x408e3000, 0x408e30ba,
|
0x4085a000, 0x4085a0ba, 0x408e8000, 0x408e80ba,
|
||||||
0x40c00000, 0x40c000b3, 0x41200000, 0x41200111,
|
0x40c00000, 0x40c000b3, 0x41200000, 0x41200111,
|
||||||
0x41600000, 0x4160010f, 0x41c00000, 0x41d00000,
|
0x41600000, 0x4160010f, 0x41c00000, 0x41d00000,
|
||||||
// Entry 280 - 29F
|
// Entry 280 - 29F
|
||||||
|
@ -994,7 +994,7 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements
|
||||||
0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8,
|
0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8,
|
||||||
0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000,
|
0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000,
|
||||||
0x4bc20137, 0x4bc5a000, 0x4bc5a137, 0x4be00000,
|
0x4bc20137, 0x4bc5a000, 0x4bc5a137, 0x4be00000,
|
||||||
0x4be5a000, 0x4be5a0b4, 0x4beeb000, 0x4beeb0b4,
|
0x4be5a000, 0x4be5a0b4, 0x4bef1000, 0x4bef10b4,
|
||||||
0x4c000000, 0x4c300000, 0x4c30013e, 0x4c900000,
|
0x4c000000, 0x4c300000, 0x4c30013e, 0x4c900000,
|
||||||
// Entry 2E0 - 2FF
|
// Entry 2E0 - 2FF
|
||||||
0x4c900001, 0x4cc00000, 0x4cc0012f, 0x4ce00000,
|
0x4c900001, 0x4cc00000, 0x4cc0012f, 0x4ce00000,
|
||||||
|
@ -1012,4 +1012,4 @@ var coreTags = []language.CompactCoreInfo{ // 773 elements
|
||||||
|
|
||||||
const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix"
|
const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix"
|
||||||
|
|
||||||
// Total table size 3147 bytes (3KiB); checksum: BE816D44
|
// Total table size 3147 bytes (3KiB); checksum: 6772C83C
|
||||||
|
|
|
@ -328,7 +328,7 @@ func (r Region) IsPrivateUse() bool {
|
||||||
return r.typ()&iso3166UserAssigned != 0
|
return r.typ()&iso3166UserAssigned != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
type Script uint8
|
type Script uint16
|
||||||
|
|
||||||
// getScriptID returns the script id for string s. It assumes that s
|
// getScriptID returns the script id for string s. It assumes that s
|
||||||
// is of the format [A-Z][a-z]{3}.
|
// is of the format [A-Z][a-z]{3}.
|
||||||
|
|
|
@ -270,7 +270,7 @@ func parse(scan *scanner, s string) (t Tag, err error) {
|
||||||
} else if n >= 4 {
|
} else if n >= 4 {
|
||||||
return Und, ErrSyntax
|
return Und, ErrSyntax
|
||||||
} else { // the usual case
|
} else { // the usual case
|
||||||
t, end = parseTag(scan)
|
t, end = parseTag(scan, true)
|
||||||
if n := len(scan.token); n == 1 {
|
if n := len(scan.token); n == 1 {
|
||||||
t.pExt = uint16(end)
|
t.pExt = uint16(end)
|
||||||
end = parseExtensions(scan)
|
end = parseExtensions(scan)
|
||||||
|
@ -296,7 +296,8 @@ func parse(scan *scanner, s string) (t Tag, err error) {
|
||||||
|
|
||||||
// parseTag parses language, script, region and variants.
|
// parseTag parses language, script, region and variants.
|
||||||
// It returns a Tag and the end position in the input that was parsed.
|
// It returns a Tag and the end position in the input that was parsed.
|
||||||
func parseTag(scan *scanner) (t Tag, end int) {
|
// If doNorm is true, then <lang>-<extlang> will be normalized to <extlang>.
|
||||||
|
func parseTag(scan *scanner, doNorm bool) (t Tag, end int) {
|
||||||
var e error
|
var e error
|
||||||
// TODO: set an error if an unknown lang, script or region is encountered.
|
// TODO: set an error if an unknown lang, script or region is encountered.
|
||||||
t.LangID, e = getLangID(scan.token)
|
t.LangID, e = getLangID(scan.token)
|
||||||
|
@ -307,14 +308,17 @@ func parseTag(scan *scanner) (t Tag, end int) {
|
||||||
for len(scan.token) == 3 && isAlpha(scan.token[0]) {
|
for len(scan.token) == 3 && isAlpha(scan.token[0]) {
|
||||||
// From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent
|
// From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent
|
||||||
// to a tag of the form <extlang>.
|
// to a tag of the form <extlang>.
|
||||||
lang, e := getLangID(scan.token)
|
if doNorm {
|
||||||
if lang != 0 {
|
lang, e := getLangID(scan.token)
|
||||||
t.LangID = lang
|
if lang != 0 {
|
||||||
copy(scan.b[langStart:], lang.String())
|
t.LangID = lang
|
||||||
scan.b[langStart+3] = '-'
|
langStr := lang.String()
|
||||||
scan.start = langStart + 4
|
copy(scan.b[langStart:], langStr)
|
||||||
|
scan.b[langStart+len(langStr)] = '-'
|
||||||
|
scan.start = langStart + len(langStr) + 1
|
||||||
|
}
|
||||||
|
scan.gobble(e)
|
||||||
}
|
}
|
||||||
scan.gobble(e)
|
|
||||||
end = scan.scan()
|
end = scan.scan()
|
||||||
}
|
}
|
||||||
if len(scan.token) == 4 && isAlpha(scan.token[0]) {
|
if len(scan.token) == 4 && isAlpha(scan.token[0]) {
|
||||||
|
@ -559,7 +563,7 @@ func parseExtension(scan *scanner) int {
|
||||||
case 't': // https://www.ietf.org/rfc/rfc6497.txt
|
case 't': // https://www.ietf.org/rfc/rfc6497.txt
|
||||||
scan.scan()
|
scan.scan()
|
||||||
if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) {
|
if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) {
|
||||||
_, end = parseTag(scan)
|
_, end = parseTag(scan, false)
|
||||||
scan.toLower(start, end)
|
scan.toLower(start, end)
|
||||||
}
|
}
|
||||||
for len(scan.token) == 2 && !isAlpha(scan.token[1]) {
|
for len(scan.token) == 2 && !isAlpha(scan.token[1]) {
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -10,18 +10,17 @@
|
||||||
// and provides the user with the best experience
|
// and provides the user with the best experience
|
||||||
// (see https://blog.golang.org/matchlang).
|
// (see https://blog.golang.org/matchlang).
|
||||||
//
|
//
|
||||||
//
|
// # Matching preferred against supported languages
|
||||||
// Matching preferred against supported languages
|
|
||||||
//
|
//
|
||||||
// A Matcher for an application that supports English, Australian English,
|
// A Matcher for an application that supports English, Australian English,
|
||||||
// Danish, and standard Mandarin can be created as follows:
|
// Danish, and standard Mandarin can be created as follows:
|
||||||
//
|
//
|
||||||
// var matcher = language.NewMatcher([]language.Tag{
|
// var matcher = language.NewMatcher([]language.Tag{
|
||||||
// language.English, // The first language is used as fallback.
|
// language.English, // The first language is used as fallback.
|
||||||
// language.MustParse("en-AU"),
|
// language.MustParse("en-AU"),
|
||||||
// language.Danish,
|
// language.Danish,
|
||||||
// language.Chinese,
|
// language.Chinese,
|
||||||
// })
|
// })
|
||||||
//
|
//
|
||||||
// This list of supported languages is typically implied by the languages for
|
// This list of supported languages is typically implied by the languages for
|
||||||
// which there exists translations of the user interface.
|
// which there exists translations of the user interface.
|
||||||
|
@ -30,14 +29,14 @@
|
||||||
// language tags.
|
// language tags.
|
||||||
// The MatchString finds best matches for such strings:
|
// The MatchString finds best matches for such strings:
|
||||||
//
|
//
|
||||||
// handler(w http.ResponseWriter, r *http.Request) {
|
// handler(w http.ResponseWriter, r *http.Request) {
|
||||||
// lang, _ := r.Cookie("lang")
|
// lang, _ := r.Cookie("lang")
|
||||||
// accept := r.Header.Get("Accept-Language")
|
// accept := r.Header.Get("Accept-Language")
|
||||||
// tag, _ := language.MatchStrings(matcher, lang.String(), accept)
|
// tag, _ := language.MatchStrings(matcher, lang.String(), accept)
|
||||||
//
|
//
|
||||||
// // tag should now be used for the initialization of any
|
// // tag should now be used for the initialization of any
|
||||||
// // locale-specific service.
|
// // locale-specific service.
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// The Matcher's Match method can be used to match Tags directly.
|
// The Matcher's Match method can be used to match Tags directly.
|
||||||
//
|
//
|
||||||
|
@ -48,8 +47,7 @@
|
||||||
// For instance, it will know that a reader of Bokmål Danish can read Norwegian
|
// For instance, it will know that a reader of Bokmål Danish can read Norwegian
|
||||||
// and will know that Cantonese ("yue") is a good match for "zh-HK".
|
// and will know that Cantonese ("yue") is a good match for "zh-HK".
|
||||||
//
|
//
|
||||||
//
|
// # Using match results
|
||||||
// Using match results
|
|
||||||
//
|
//
|
||||||
// To guarantee a consistent user experience to the user it is important to
|
// To guarantee a consistent user experience to the user it is important to
|
||||||
// use the same language tag for the selection of any locale-specific services.
|
// use the same language tag for the selection of any locale-specific services.
|
||||||
|
@ -58,9 +56,9 @@
|
||||||
// More subtly confusing is using the wrong sorting order or casing
|
// More subtly confusing is using the wrong sorting order or casing
|
||||||
// algorithm for a certain language.
|
// algorithm for a certain language.
|
||||||
//
|
//
|
||||||
// All the packages in x/text that provide locale-specific services
|
// All the packages in x/text that provide locale-specific services
|
||||||
// (e.g. collate, cases) should be initialized with the tag that was
|
// (e.g. collate, cases) should be initialized with the tag that was
|
||||||
// obtained at the start of an interaction with the user.
|
// obtained at the start of an interaction with the user.
|
||||||
//
|
//
|
||||||
// Note that Tag that is returned by Match and MatchString may differ from any
|
// Note that Tag that is returned by Match and MatchString may differ from any
|
||||||
// of the supported languages, as it may contain carried over settings from
|
// of the supported languages, as it may contain carried over settings from
|
||||||
|
@ -70,8 +68,7 @@
|
||||||
// Match and MatchString both return the index of the matched supported tag
|
// Match and MatchString both return the index of the matched supported tag
|
||||||
// to simplify associating such data with the matched tag.
|
// to simplify associating such data with the matched tag.
|
||||||
//
|
//
|
||||||
//
|
// # Canonicalization
|
||||||
// Canonicalization
|
|
||||||
//
|
//
|
||||||
// If one uses the Matcher to compare languages one does not need to
|
// If one uses the Matcher to compare languages one does not need to
|
||||||
// worry about canonicalization.
|
// worry about canonicalization.
|
||||||
|
@ -92,10 +89,9 @@
|
||||||
// equivalence relations. The CanonType type can be used to alter the
|
// equivalence relations. The CanonType type can be used to alter the
|
||||||
// canonicalization form.
|
// canonicalization form.
|
||||||
//
|
//
|
||||||
// References
|
// # References
|
||||||
//
|
//
|
||||||
// BCP 47 - Tags for Identifying Languages http://tools.ietf.org/html/bcp47
|
// BCP 47 - Tags for Identifying Languages http://tools.ietf.org/html/bcp47
|
||||||
//
|
|
||||||
package language // import "golang.org/x/text/language"
|
package language // import "golang.org/x/text/language"
|
||||||
|
|
||||||
// TODO: explanation on how to match languages for your own locale-specific
|
// TODO: explanation on how to match languages for your own locale-specific
|
||||||
|
|
|
@ -545,7 +545,7 @@ type bestMatch struct {
|
||||||
// match as the preferred match.
|
// match as the preferred match.
|
||||||
//
|
//
|
||||||
// If pin is true and have and tag are a strong match, it will henceforth only
|
// If pin is true and have and tag are a strong match, it will henceforth only
|
||||||
// consider matches for this language. This corresponds to the nothing that most
|
// consider matches for this language. This corresponds to the idea that most
|
||||||
// users have a strong preference for the first defined language. A user can
|
// users have a strong preference for the first defined language. A user can
|
||||||
// still prefer a second language over a dialect of the preferred language by
|
// still prefer a second language over a dialect of the preferred language by
|
||||||
// explicitly specifying dialects, e.g. "en, nl, en-GB". In this case pin should
|
// explicitly specifying dialects, e.g. "en, nl, en-GB". In this case pin should
|
||||||
|
|
|
@ -147,6 +147,7 @@ func update(b *language.Builder, part ...interface{}) (err error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight")
|
var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight")
|
||||||
|
var errTagListTooLarge = errors.New("tag list exceeds max length")
|
||||||
|
|
||||||
// ParseAcceptLanguage parses the contents of an Accept-Language header as
|
// ParseAcceptLanguage parses the contents of an Accept-Language header as
|
||||||
// defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and
|
// defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and
|
||||||
|
@ -164,6 +165,10 @@ func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) {
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
if strings.Count(s, "-") > 1000 {
|
||||||
|
return nil, nil, errTagListTooLarge
|
||||||
|
}
|
||||||
|
|
||||||
var entry string
|
var entry string
|
||||||
for s != "" {
|
for s != "" {
|
||||||
if entry, s = split(s, ','); entry == "" {
|
if entry, s = split(s, ','); entry == "" {
|
||||||
|
|
|
@ -39,12 +39,12 @@ const (
|
||||||
_Hani = 57
|
_Hani = 57
|
||||||
_Hans = 59
|
_Hans = 59
|
||||||
_Hant = 60
|
_Hant = 60
|
||||||
_Qaaa = 143
|
_Qaaa = 147
|
||||||
_Qaai = 151
|
_Qaai = 155
|
||||||
_Qabx = 192
|
_Qabx = 196
|
||||||
_Zinh = 245
|
_Zinh = 252
|
||||||
_Zyyy = 250
|
_Zyyy = 257
|
||||||
_Zzzz = 251
|
_Zzzz = 258
|
||||||
)
|
)
|
||||||
|
|
||||||
var regionToGroups = []uint8{ // 358 elements
|
var regionToGroups = []uint8{ // 358 elements
|
||||||
|
@ -265,9 +265,9 @@ var matchScript = []scriptIntelligibility{ // 26 elements
|
||||||
13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5a, distance: 0xa},
|
13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5a, distance: 0xa},
|
||||||
14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
|
14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
|
||||||
15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
|
15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
|
||||||
16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xcf, haveScript: 0x5a, distance: 0xa},
|
16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xd4, haveScript: 0x5a, distance: 0xa},
|
||||||
17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xde, haveScript: 0x5a, distance: 0xa},
|
17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xe3, haveScript: 0x5a, distance: 0xa},
|
||||||
18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe1, haveScript: 0x5a, distance: 0xa},
|
18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe6, haveScript: 0x5a, distance: 0xa},
|
||||||
19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5a, distance: 0xa},
|
19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5a, distance: 0xa},
|
||||||
20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
|
20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
|
||||||
21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
|
21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
|
||||||
|
|
|
@ -193,14 +193,14 @@ func (p *paragraph) run() {
|
||||||
//
|
//
|
||||||
// At the end of this function:
|
// At the end of this function:
|
||||||
//
|
//
|
||||||
// - The member variable matchingPDI is set to point to the index of the
|
// - The member variable matchingPDI is set to point to the index of the
|
||||||
// matching PDI character for each isolate initiator character. If there is
|
// matching PDI character for each isolate initiator character. If there is
|
||||||
// no matching PDI, it is set to the length of the input text. For other
|
// no matching PDI, it is set to the length of the input text. For other
|
||||||
// characters, it is set to -1.
|
// characters, it is set to -1.
|
||||||
// - The member variable matchingIsolateInitiator is set to point to the
|
// - The member variable matchingIsolateInitiator is set to point to the
|
||||||
// index of the matching isolate initiator character for each PDI character.
|
// index of the matching isolate initiator character for each PDI character.
|
||||||
// If there is no matching isolate initiator, or the character is not a PDI,
|
// If there is no matching isolate initiator, or the character is not a PDI,
|
||||||
// it is set to -1.
|
// it is set to -1.
|
||||||
func (p *paragraph) determineMatchingIsolates() {
|
func (p *paragraph) determineMatchingIsolates() {
|
||||||
p.matchingPDI = make([]int, p.Len())
|
p.matchingPDI = make([]int, p.Len())
|
||||||
p.matchingIsolateInitiator = make([]int, p.Len())
|
p.matchingIsolateInitiator = make([]int, p.Len())
|
||||||
|
@ -435,7 +435,7 @@ func maxLevel(a, b level) level {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types,
|
// Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types,
|
||||||
// either L or R, for each isolating run sequence.
|
// either L or R, for each isolating run sequence.
|
||||||
func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence {
|
func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence {
|
||||||
length := len(indexes)
|
length := len(indexes)
|
||||||
types := make([]Class, length)
|
types := make([]Class, length)
|
||||||
|
@ -495,9 +495,9 @@ func (s *isolatingRunSequence) resolveWeakTypes() {
|
||||||
if t == NSM {
|
if t == NSM {
|
||||||
s.types[i] = precedingCharacterType
|
s.types[i] = precedingCharacterType
|
||||||
} else {
|
} else {
|
||||||
if t.in(LRI, RLI, FSI, PDI) {
|
// if t.in(LRI, RLI, FSI, PDI) {
|
||||||
precedingCharacterType = ON
|
// precedingCharacterType = ON
|
||||||
}
|
// }
|
||||||
precedingCharacterType = t
|
precedingCharacterType = t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -905,7 +905,7 @@ func (p *paragraph) getLevels(linebreaks []int) []level {
|
||||||
// Lines are concatenated from left to right. So for example, the fifth
|
// Lines are concatenated from left to right. So for example, the fifth
|
||||||
// character from the left on the third line is
|
// character from the left on the third line is
|
||||||
//
|
//
|
||||||
// getReordering(linebreaks)[linebreaks[1] + 4]
|
// getReordering(linebreaks)[linebreaks[1] + 4]
|
||||||
//
|
//
|
||||||
// (linebreaks[1] is the position after the last character of the second
|
// (linebreaks[1] is the position after the last character of the second
|
||||||
// line, which is also the index of the first character on the third line,
|
// line, which is also the index of the first character on the third line,
|
||||||
|
|
|
@ -110,10 +110,11 @@ func (p Properties) BoundaryAfter() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
// We pack quick check data in 4 bits:
|
// We pack quick check data in 4 bits:
|
||||||
// 5: Combines forward (0 == false, 1 == true)
|
//
|
||||||
// 4..3: NFC_QC Yes(00), No (10), or Maybe (11)
|
// 5: Combines forward (0 == false, 1 == true)
|
||||||
// 2: NFD_QC Yes (0) or No (1). No also means there is a decomposition.
|
// 4..3: NFC_QC Yes(00), No (10), or Maybe (11)
|
||||||
// 1..0: Number of trailing non-starters.
|
// 2: NFD_QC Yes (0) or No (1). No also means there is a decomposition.
|
||||||
|
// 1..0: Number of trailing non-starters.
|
||||||
//
|
//
|
||||||
// When all 4 bits are zero, the character is inert, meaning it is never
|
// When all 4 bits are zero, the character is inert, meaning it is never
|
||||||
// influenced by normalization.
|
// influenced by normalization.
|
||||||
|
|
|
@ -18,16 +18,17 @@ import (
|
||||||
// A Form denotes a canonical representation of Unicode code points.
|
// A Form denotes a canonical representation of Unicode code points.
|
||||||
// The Unicode-defined normalization and equivalence forms are:
|
// The Unicode-defined normalization and equivalence forms are:
|
||||||
//
|
//
|
||||||
// NFC Unicode Normalization Form C
|
// NFC Unicode Normalization Form C
|
||||||
// NFD Unicode Normalization Form D
|
// NFD Unicode Normalization Form D
|
||||||
// NFKC Unicode Normalization Form KC
|
// NFKC Unicode Normalization Form KC
|
||||||
// NFKD Unicode Normalization Form KD
|
// NFKD Unicode Normalization Form KD
|
||||||
//
|
//
|
||||||
// For a Form f, this documentation uses the notation f(x) to mean
|
// For a Form f, this documentation uses the notation f(x) to mean
|
||||||
// the bytes or string x converted to the given form.
|
// the bytes or string x converted to the given form.
|
||||||
// A position n in x is called a boundary if conversion to the form can
|
// A position n in x is called a boundary if conversion to the form can
|
||||||
// proceed independently on both sides:
|
// proceed independently on both sides:
|
||||||
// f(x) == append(f(x[0:n]), f(x[n:])...)
|
//
|
||||||
|
// f(x) == append(f(x[0:n]), f(x[n:])...)
|
||||||
//
|
//
|
||||||
// References: https://unicode.org/reports/tr15/ and
|
// References: https://unicode.org/reports/tr15/ and
|
||||||
// https://unicode.org/notes/tn5/.
|
// https://unicode.org/notes/tn5/.
|
||||||
|
|
|
@ -7315,7 +7315,7 @@ const recompMapPacked = "" +
|
||||||
"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
|
"\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C
|
||||||
"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
|
"\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D
|
||||||
"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
|
"\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E
|
||||||
"\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F
|
"\x00v\x03#\x00\x00\x1e\x7f" + // 0x00760323: 0x00001E7F
|
||||||
"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
|
"\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80
|
||||||
"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
|
"\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81
|
||||||
"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
|
"\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82
|
||||||
|
@ -7342,7 +7342,7 @@ const recompMapPacked = "" +
|
||||||
"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
|
"\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97
|
||||||
"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
|
"\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98
|
||||||
"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
|
"\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99
|
||||||
"\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
|
"\x01\x7f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B
|
||||||
"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
|
"\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0
|
||||||
"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
|
"\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1
|
||||||
"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
|
"\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2
|
||||||
|
|
|
@ -1146,21 +1146,31 @@ var widthIndex = [1408]uint8{
|
||||||
}
|
}
|
||||||
|
|
||||||
// inverseData contains 4-byte entries of the following format:
|
// inverseData contains 4-byte entries of the following format:
|
||||||
// <length> <modified UTF-8-encoded rune> <0 padding>
|
//
|
||||||
|
// <length> <modified UTF-8-encoded rune> <0 padding>
|
||||||
|
//
|
||||||
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
||||||
// UTF-8 encoding of the original rune. Mappings often have the following
|
// UTF-8 encoding of the original rune. Mappings often have the following
|
||||||
// pattern:
|
// pattern:
|
||||||
// A -> A (U+FF21 -> U+0041)
|
//
|
||||||
// B -> B (U+FF22 -> U+0042)
|
// A -> A (U+FF21 -> U+0041)
|
||||||
// ...
|
// B -> B (U+FF22 -> U+0042)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
||||||
// reduces the total number of distinct entries by about two thirds.
|
// reduces the total number of distinct entries by about two thirds.
|
||||||
// The resulting entry for the aforementioned mappings is
|
// The resulting entry for the aforementioned mappings is
|
||||||
// { 0x01, 0xE0, 0x00, 0x00 }
|
//
|
||||||
|
// { 0x01, 0xE0, 0x00, 0x00 }
|
||||||
|
//
|
||||||
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
||||||
// E0 ^ A1 = 41.
|
//
|
||||||
|
// E0 ^ A1 = 41.
|
||||||
|
//
|
||||||
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
||||||
// E0 ^ A2 = 42.
|
//
|
||||||
|
// E0 ^ A2 = 42.
|
||||||
|
//
|
||||||
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
||||||
// not valid UTF-8.
|
// not valid UTF-8.
|
||||||
var inverseData = [150][4]byte{
|
var inverseData = [150][4]byte{
|
||||||
|
|
|
@ -1158,21 +1158,31 @@ var widthIndex = [1408]uint8{
|
||||||
}
|
}
|
||||||
|
|
||||||
// inverseData contains 4-byte entries of the following format:
|
// inverseData contains 4-byte entries of the following format:
|
||||||
// <length> <modified UTF-8-encoded rune> <0 padding>
|
//
|
||||||
|
// <length> <modified UTF-8-encoded rune> <0 padding>
|
||||||
|
//
|
||||||
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
||||||
// UTF-8 encoding of the original rune. Mappings often have the following
|
// UTF-8 encoding of the original rune. Mappings often have the following
|
||||||
// pattern:
|
// pattern:
|
||||||
// A -> A (U+FF21 -> U+0041)
|
//
|
||||||
// B -> B (U+FF22 -> U+0042)
|
// A -> A (U+FF21 -> U+0041)
|
||||||
// ...
|
// B -> B (U+FF22 -> U+0042)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
||||||
// reduces the total number of distinct entries by about two thirds.
|
// reduces the total number of distinct entries by about two thirds.
|
||||||
// The resulting entry for the aforementioned mappings is
|
// The resulting entry for the aforementioned mappings is
|
||||||
// { 0x01, 0xE0, 0x00, 0x00 }
|
//
|
||||||
|
// { 0x01, 0xE0, 0x00, 0x00 }
|
||||||
|
//
|
||||||
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
||||||
// E0 ^ A1 = 41.
|
//
|
||||||
|
// E0 ^ A1 = 41.
|
||||||
|
//
|
||||||
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
||||||
// E0 ^ A2 = 42.
|
//
|
||||||
|
// E0 ^ A2 = 42.
|
||||||
|
//
|
||||||
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
||||||
// not valid UTF-8.
|
// not valid UTF-8.
|
||||||
var inverseData = [150][4]byte{
|
var inverseData = [150][4]byte{
|
||||||
|
|
|
@ -1178,21 +1178,31 @@ var widthIndex = [1408]uint8{
|
||||||
}
|
}
|
||||||
|
|
||||||
// inverseData contains 4-byte entries of the following format:
|
// inverseData contains 4-byte entries of the following format:
|
||||||
// <length> <modified UTF-8-encoded rune> <0 padding>
|
//
|
||||||
|
// <length> <modified UTF-8-encoded rune> <0 padding>
|
||||||
|
//
|
||||||
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
||||||
// UTF-8 encoding of the original rune. Mappings often have the following
|
// UTF-8 encoding of the original rune. Mappings often have the following
|
||||||
// pattern:
|
// pattern:
|
||||||
// A -> A (U+FF21 -> U+0041)
|
//
|
||||||
// B -> B (U+FF22 -> U+0042)
|
// A -> A (U+FF21 -> U+0041)
|
||||||
// ...
|
// B -> B (U+FF22 -> U+0042)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
||||||
// reduces the total number of distinct entries by about two thirds.
|
// reduces the total number of distinct entries by about two thirds.
|
||||||
// The resulting entry for the aforementioned mappings is
|
// The resulting entry for the aforementioned mappings is
|
||||||
// { 0x01, 0xE0, 0x00, 0x00 }
|
//
|
||||||
|
// { 0x01, 0xE0, 0x00, 0x00 }
|
||||||
|
//
|
||||||
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
||||||
// E0 ^ A1 = 41.
|
//
|
||||||
|
// E0 ^ A1 = 41.
|
||||||
|
//
|
||||||
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
||||||
// E0 ^ A2 = 42.
|
//
|
||||||
|
// E0 ^ A2 = 42.
|
||||||
|
//
|
||||||
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
||||||
// not valid UTF-8.
|
// not valid UTF-8.
|
||||||
var inverseData = [150][4]byte{
|
var inverseData = [150][4]byte{
|
||||||
|
|
|
@ -1179,21 +1179,31 @@ var widthIndex = [1408]uint8{
|
||||||
}
|
}
|
||||||
|
|
||||||
// inverseData contains 4-byte entries of the following format:
|
// inverseData contains 4-byte entries of the following format:
|
||||||
// <length> <modified UTF-8-encoded rune> <0 padding>
|
//
|
||||||
|
// <length> <modified UTF-8-encoded rune> <0 padding>
|
||||||
|
//
|
||||||
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
||||||
// UTF-8 encoding of the original rune. Mappings often have the following
|
// UTF-8 encoding of the original rune. Mappings often have the following
|
||||||
// pattern:
|
// pattern:
|
||||||
// A -> A (U+FF21 -> U+0041)
|
//
|
||||||
// B -> B (U+FF22 -> U+0042)
|
// A -> A (U+FF21 -> U+0041)
|
||||||
// ...
|
// B -> B (U+FF22 -> U+0042)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
||||||
// reduces the total number of distinct entries by about two thirds.
|
// reduces the total number of distinct entries by about two thirds.
|
||||||
// The resulting entry for the aforementioned mappings is
|
// The resulting entry for the aforementioned mappings is
|
||||||
// { 0x01, 0xE0, 0x00, 0x00 }
|
//
|
||||||
|
// { 0x01, 0xE0, 0x00, 0x00 }
|
||||||
|
//
|
||||||
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
||||||
// E0 ^ A1 = 41.
|
//
|
||||||
|
// E0 ^ A1 = 41.
|
||||||
|
//
|
||||||
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
||||||
// E0 ^ A2 = 42.
|
//
|
||||||
|
// E0 ^ A2 = 42.
|
||||||
|
//
|
||||||
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
||||||
// not valid UTF-8.
|
// not valid UTF-8.
|
||||||
var inverseData = [150][4]byte{
|
var inverseData = [150][4]byte{
|
||||||
|
|
|
@ -1114,21 +1114,31 @@ var widthIndex = [1408]uint8{
|
||||||
}
|
}
|
||||||
|
|
||||||
// inverseData contains 4-byte entries of the following format:
|
// inverseData contains 4-byte entries of the following format:
|
||||||
// <length> <modified UTF-8-encoded rune> <0 padding>
|
//
|
||||||
|
// <length> <modified UTF-8-encoded rune> <0 padding>
|
||||||
|
//
|
||||||
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the
|
||||||
// UTF-8 encoding of the original rune. Mappings often have the following
|
// UTF-8 encoding of the original rune. Mappings often have the following
|
||||||
// pattern:
|
// pattern:
|
||||||
// A -> A (U+FF21 -> U+0041)
|
//
|
||||||
// B -> B (U+FF22 -> U+0042)
|
// A -> A (U+FF21 -> U+0041)
|
||||||
// ...
|
// B -> B (U+FF22 -> U+0042)
|
||||||
|
// ...
|
||||||
|
//
|
||||||
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
// By xor-ing the last byte the same entry can be shared by many mappings. This
|
||||||
// reduces the total number of distinct entries by about two thirds.
|
// reduces the total number of distinct entries by about two thirds.
|
||||||
// The resulting entry for the aforementioned mappings is
|
// The resulting entry for the aforementioned mappings is
|
||||||
// { 0x01, 0xE0, 0x00, 0x00 }
|
//
|
||||||
|
// { 0x01, 0xE0, 0x00, 0x00 }
|
||||||
|
//
|
||||||
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get
|
||||||
// E0 ^ A1 = 41.
|
//
|
||||||
|
// E0 ^ A1 = 41.
|
||||||
|
//
|
||||||
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get
|
||||||
// E0 ^ A2 = 42.
|
//
|
||||||
|
// E0 ^ A2 = 42.
|
||||||
|
//
|
||||||
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
// Note that because of the xor-ing, the byte sequence stored in the entry is
|
||||||
// not valid UTF-8.
|
// not valid UTF-8.
|
||||||
var inverseData = [150][4]byte{
|
var inverseData = [150][4]byte{
|
||||||
|
|
|
@ -355,7 +355,7 @@ golang.org/x/crypto/openpgp/s2k
|
||||||
golang.org/x/mod/internal/lazyregexp
|
golang.org/x/mod/internal/lazyregexp
|
||||||
golang.org/x/mod/module
|
golang.org/x/mod/module
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/net v0.0.0-20220722155237-a158d28d115b
|
# golang.org/x/net v0.0.0-20220906165146-f3363e06e74c
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/net/context
|
golang.org/x/net/context
|
||||||
golang.org/x/net/context/ctxhttp
|
golang.org/x/net/context/ctxhttp
|
||||||
|
@ -379,7 +379,7 @@ golang.org/x/oauth2/jwt
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/sync/errgroup
|
golang.org/x/sync/errgroup
|
||||||
golang.org/x/sync/semaphore
|
golang.org/x/sync/semaphore
|
||||||
# golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f
|
# golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/sys/execabs
|
golang.org/x/sys/execabs
|
||||||
golang.org/x/sys/internal/unsafeheader
|
golang.org/x/sys/internal/unsafeheader
|
||||||
|
@ -389,7 +389,7 @@ golang.org/x/sys/windows
|
||||||
# golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
# golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/term
|
golang.org/x/term
|
||||||
# golang.org/x/text v0.3.7
|
# golang.org/x/text v0.3.8
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
golang.org/x/text/cases
|
golang.org/x/text/cases
|
||||||
golang.org/x/text/internal
|
golang.org/x/text/internal
|
||||||
|
|
Loading…
Reference in New Issue