diff options
Diffstat (limited to 'Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go')
-rw-r--r-- | Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go b/Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go index 0d75987f5..70f2ac4bc 100644 --- a/Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go +++ b/Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:generate go run gen.go + // Package htmlindex maps character set encoding names to Encodings as // recommended by the W3C for use in HTML 5. See http://www.w3.org/TR/encoding. package htmlindex @@ -20,26 +22,65 @@ package htmlindex // TODO: allow canonicalizing names import ( + "errors" + "strings" + "sync" + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/internal/identifier" "golang.org/x/text/language" ) +var ( + errInvalidName = errors.New("htmlindex: invalid encoding name") + errUnknown = errors.New("htmlindex: unknown Encoding") + errUnsupported = errors.New("htmlindex: this encoding is not supported") +) + +var ( + matcherOnce sync.Once + matcher language.Matcher +) + // LanguageDefault returns the canonical name of the default encoding for a // given language. func LanguageDefault(tag language.Tag) string { - // Note: we'll use the map defined in the W3C spec. - panic("TODO: implement") + matcherOnce.Do(func() { + tags := []language.Tag{} + for _, t := range strings.Split(locales, " ") { + tags = append(tags, language.MustParse(t)) + } + matcher = language.NewMatcher(tags) + }) + _, i, _ := matcher.Match(tag) + return canonical[localeMap[i]] // Default is Windows-1252. } // Get returns an Encoding for one of the names listed in // http://www.w3.org/TR/encoding using the Default Index. Matching is case- // insensitive. func Get(name string) (encoding.Encoding, error) { - panic("TODO: implement") + x, ok := nameMap[strings.ToLower(strings.TrimSpace(name))] + if !ok { + return nil, errInvalidName + } + return encodings[x], nil } // Name reports the canonical name of the given Encoding. It will return // an error if e is not associated with a supported encoding scheme. func Name(e encoding.Encoding) (string, error) { - panic("TODO: implement") + id, ok := e.(identifier.Interface) + if !ok { + return "", errUnknown + } + mib, _ := id.ID() + if mib == 0 { + return "", errUnknown + } + v, ok := mibMap[mib] + if !ok { + return "", errUnsupported + } + return canonical[v], nil } |