1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // Copyright 2019 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 ianaindex
- import (
- "unicode"
- "unicode/utf8"
- "golang.org/x/text/encoding"
- "golang.org/x/text/encoding/internal"
- "golang.org/x/text/transform"
- "golang.org/x/text/encoding/internal/identifier"
- )
- type asciiDecoder struct {
- transform.NopResetter
- }
- func (d asciiDecoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
- for _, c := range src {
- if c > unicode.MaxASCII {
- r := unicode.ReplacementChar
- if nDst + utf8.RuneLen(r) > len(dst) {
- err = transform.ErrShortDst
- break
- }
- nDst += utf8.EncodeRune(dst[nDst:], r)
- nSrc++
- continue
- }
- if nDst >= len(dst) {
- err = transform.ErrShortDst
- break
- }
- dst[nDst] = c
- nDst++
- nSrc++
- }
- return nDst, nSrc, err
- }
- type asciiEncoder struct {
- transform.NopResetter
- }
- func (d asciiEncoder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
- for _, c := range src {
- if c > unicode.MaxASCII {
- err = internal.RepertoireError(encoding.ASCIISub)
- break
- }
- if nDst >= len(dst) {
- err = transform.ErrShortDst
- break
- }
- dst[nDst] = c
- nDst++
- nSrc++
- }
- return nDst, nSrc, err
- }
- var asciiEnc = &internal.Encoding{
- Encoding: &internal.SimpleEncoding{
- asciiDecoder{},
- asciiEncoder{},
- },
- Name: "US-ASCII",
- MIB: identifier.ASCII,
- }
|