summaryrefslogtreecommitdiffstats
path: root/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go
diff options
context:
space:
mode:
authorHyeseong Kim <cometkim.kr@gmail.com>2018-05-01 01:54:11 +0900
committerChristopher Speller <crspeller@gmail.com>2018-04-30 09:54:11 -0700
commite73f1d73143ebba9c7e80d21c45bba9b61f2611c (patch)
treee84e85d12308ae5624643ff7768f55be45c3350c /vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go
parent9c5815ee41f29e27774d17382d9a4bd10d208545 (diff)
downloadchat-e73f1d73143ebba9c7e80d21c45bba9b61f2611c.tar.gz
chat-e73f1d73143ebba9c7e80d21c45bba9b61f2611c.tar.bz2
chat-e73f1d73143ebba9c7e80d21c45bba9b61f2611c.zip
MM-9072/MM-10185 Force-convert the encoding of OpenGraph metadata to UTF-8 (#8631)
* Force-convert non-UTF8 HTML to UTF8 before opengraph processing * Split the force-encoding function * Add benchmark Test for the forceHTMLEncodingToUTF8() ``` Running tool: /home/comet/go-v1.9.2/bin/go test -benchmem -run=^$ github.com/mattermost/mattermost-server/app -bench ^BenchmarkForceHTMLEncodingToUTF8$ [03:32:58 KST 2018/04/21] [INFO] (github.com/mattermost/mattermost-server/app.TestMain:28) -test.run used, not creating temporary containers goos: linux goarch: amd64 pkg: github.com/mattermost/mattermost-server/app BenchmarkForceHTMLEncodingToUTF8/with_converting-4 100000 11201 ns/op 18704 B/op 32 allocs/op BenchmarkForceHTMLEncodingToUTF8/without_converting-4 300000 3931 ns/op 4632 B/op 13 allocs/op PASS ok github.com/mattermost/mattermost-server/app 2.703s Success: Benchmarks passed. ``` * Remove an unnecessary constraint * Add pre-check if content-type header is already utf-8 * Move the checking for utf-8 into forceHTMLEncodingToUTF8() for testing * Revert df3f347213faa0d023c26d201fa6531f46391086..HEAD, without Gopkg.lock
Diffstat (limited to 'vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go')
-rw-r--r--vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go86
1 files changed, 86 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go
new file mode 100644
index 000000000..bdc7d15dd
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go
@@ -0,0 +1,86 @@
+// Copyright 2015 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.
+
+//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
+
+// TODO: perhaps have a "bare" version of the index (used by this package) that
+// is not pre-loaded with all encodings. Global variables in encodings prevent
+// the linker from being able to purge unneeded tables. This means that
+// referencing all encodings, as this package does for the default index, links
+// in all encodings unconditionally.
+//
+// This issue can be solved by either solving the linking issue (see
+// https://github.com/golang/go/issues/6330) or refactoring the encoding tables
+// (e.g. moving the tables to internal packages that do not use global
+// variables).
+
+// 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 {
+ matcherOnce.Do(func() {
+ tags := []language.Tag{}
+ for _, t := range strings.Split(locales, " ") {
+ tags = append(tags, language.MustParse(t))
+ }
+ matcher = language.NewMatcher(tags, language.PreferSameScript(true))
+ })
+ _, 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) {
+ 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) {
+ 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
+}