summaryrefslogtreecommitdiffstats
path: root/modules/base
diff options
context:
space:
mode:
authorPeter Smit <peter@smitmail.eu>2014-12-22 11:01:52 +0200
committerPeter Smit <peter@smitmail.eu>2014-12-22 11:01:52 +0200
commit3af757ed77b5c8763b81f913ec6981671fdd6f26 (patch)
treef003b458aedc56b731bc5b1f84c2f8ffc81db997 /modules/base
parent0f77ad219c1f455005fd507c4fa7396ebe1b1bc5 (diff)
downloadgitea-3af757ed77b5c8763b81f913ec6981671fdd6f26.tar.gz
gitea-3af757ed77b5c8763b81f913ec6981671fdd6f26.zip
Replace mahonia with the standard functions in the Golang Sub-repositories
Diffstat (limited to 'modules/base')
-rw-r--r--modules/base/template.go27
1 files changed, 19 insertions, 8 deletions
diff --git a/modules/base/template.go b/modules/base/template.go
index 462269aa4e..9107f3e129 100644
--- a/modules/base/template.go
+++ b/modules/base/template.go
@@ -7,14 +7,15 @@ package base
import (
"container/list"
"encoding/json"
- "errors"
"fmt"
"html/template"
"runtime"
"strings"
"time"
- "github.com/gogits/gogs/modules/mahonia"
+ "golang.org/x/net/html/charset"
+ "golang.org/x/text/transform"
+
"github.com/gogits/gogs/modules/setting"
"github.com/saintfish/chardet"
)
@@ -54,20 +55,30 @@ func DetectEncoding(content []byte) (string, error) {
}
func ToUtf8WithErr(content []byte) (error, string) {
- charset, err := DetectEncoding(content)
+ charsetLabel, err := DetectEncoding(content)
if err != nil {
return err, ""
}
- if charset == "utf8" {
+ if charsetLabel == "utf8" {
return nil, string(content)
}
- decoder := mahonia.NewDecoder(charset)
- if decoder != nil {
- return nil, decoder.ConvertString(string(content))
+ encoding, _ := charset.Lookup(charsetLabel)
+
+ if encoding == nil {
+ return fmt.Errorf("unknow char decoder %s", charsetLabel), string(content)
}
- return errors.New("unknow char decoder"), string(content)
+
+ result, n, err := transform.String(encoding.NewDecoder(), string(content))
+
+ // If there is an error, we concatenate the nicely decoded part and the
+ // original left over. This way we won't loose data.
+ if err != nil {
+ result = result + string(content[n:])
+ }
+
+ return err, result
}
func ToUtf8(content string) string {