aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/golang.org/x/text/encoding/htmlindex/htmlindex.go
diff options
context:
space:
mode:
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.go49
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
}