blob: 8c2b5a913b7c6232d7d62f08f7b03d8d980b941f [file] [log] [blame]
// Package charset provides common text encodings for HTML documents.
//
// The mapping from encoding labels to encodings is defined at
// http://encoding.spec.whatwg.org.
package charset
import (
"errors"
"strings"
"code.google.com/p/go.text/encoding"
"code.google.com/p/go.text/transform"
)
// Encoding returns the encoding with the specified label, or nil if label is
// not one of the standard encodings for HTML. Matching is case-insensitive
// and ignores leading and trailing whitespace.
func Encoding(label string) encoding.Encoding {
label = strings.ToLower(strings.Trim(label, "\t\n\r\f "))
return encodings[label]
}
type utf8Encoding struct{}
func (utf8Encoding) NewDecoder() transform.Transformer {
return transform.Nop
}
func (utf8Encoding) NewEncoder() transform.Transformer {
return transform.Nop
}
var ErrReplacementEncoding = errors.New("charset: ISO-2022-CN and ISO-2022-KR are obsolete encodings for HTML")
type errorTransformer struct {
err error
}
func (t errorTransformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
return 0, 0, t.err
}
type replacementEncoding struct{}
func (replacementEncoding) NewDecoder() transform.Transformer {
return errorTransformer{ErrReplacementEncoding}
}
func (replacementEncoding) NewEncoder() transform.Transformer {
return transform.Nop
}