Remove dependency on iconv with the help of @mmorton's patches

master
casept 2017-03-25 14:39:14 +01:00 zatwierdzone przez joshua stein
rodzic db0dbebd68
commit 4436e8a5ab
7 zmienionych plików z 87 dodań i 10 usunięć

Wyświetl plik

@ -0,0 +1,78 @@
package encodedbytes
import (
"golang.org/x/text/transform"
"golang.org/x/text/encoding"
"golang.org/x/text/encoding/charmap"
"golang.org/x/text/encoding/unicode"
"bytes"
"io/ioutil"
)
type (
Converter struct {
from string
to string
}
)
func resolveEncoding(b []byte, name string) encoding.Encoding {
switch name {
case "UTF-8":
return nil
case "UTF-16":
if b == nil || len(b) < 2 {
return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
} else if b[0] == 0xFE && b[1] == 0xFF {
return unicode.UTF16(unicode.BigEndian, unicode.ExpectBOM)
} else if b[0] == 0xFF && b[1] == 0xFE {
return unicode.UTF16(unicode.LittleEndian, unicode.ExpectBOM)
} else {
return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
}
case "UTF-16LE":
return unicode.UTF16(unicode.LittleEndian, unicode.IgnoreBOM)
case "UTF-16BE":
return unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM)
case "ISO-8859-1":
return charmap.Windows1252
}
return nil
}
func (c Converter) ConvertString(s string) (string, error) {
var native []byte
b := []byte(s)
fromEncoding := resolveEncoding(b, c.from)
if fromEncoding != nil {
in := bytes.NewReader(b)
reader := transform.NewReader(in, fromEncoding.NewDecoder())
n, err := ioutil.ReadAll(reader)
if err != nil {
return "", err
}
native = n
} else {
native = b
}
toEncoding := resolveEncoding(nil, c.to)
if toEncoding != nil {
out := &bytes.Buffer{}
writer := transform.NewWriter(out, toEncoding.NewEncoder())
defer writer.Close()
_, err := writer.Write(native)
if err != nil {
return "", err
}
return string(out.Bytes()), nil
} else {
return string(native), nil
}
}
func NewConverter(from string, to string) (*Converter, error) {
return &Converter{from:from, to:to}, nil
}

Wyświetl plik

@ -6,7 +6,6 @@ package encodedbytes
import (
"bytes"
"errors"
iconv "github.com/djimenez/iconv-go"
)
const (
@ -28,15 +27,15 @@ var (
{Name: "UTF-16BE", NullLength: 2},
{Name: "UTF-8", NullLength: 1},
}
Decoders = make([]*iconv.Converter, len(EncodingMap))
Encoders = make([]*iconv.Converter, len(EncodingMap))
Decoders = make([]*Converter, len(EncodingMap))
Encoders = make([]*Converter, len(EncodingMap))
)
func init() {
n := EncodingForIndex(NativeEncoding)
for i, e := range EncodingMap {
Decoders[i], _ = iconv.NewConverter(e.Name, n)
Encoders[i], _ = iconv.NewConverter(n, e.Name)
Decoders[i], _ = NewConverter(e.Name, n)
Encoders[i], _ = NewConverter(n, e.Name)
}
}

Wyświetl plik

@ -50,7 +50,7 @@ func TestOpen(t *testing.T) {
actual := resultFrame.Description()
if expected != actual {
t.Errorf("Expected %q, got %q", expected, actual)
t.Errorf("Expected %x, got %x", expected, actual)
}
actual = resultFrame.Text()

Wyświetl plik

@ -8,7 +8,7 @@ import (
"encoding/binary"
"errors"
"fmt"
"github.com/mikkyang/id3-go/encodedbytes"
"github.com/jcs/id3-go/encodedbytes"
)
const (

Wyświetl plik

@ -5,7 +5,7 @@ package v2
import (
"fmt"
"github.com/mikkyang/id3-go/encodedbytes"
"github.com/jcs/id3-go/encodedbytes"
"io"
"os"
)

Wyświetl plik

@ -4,7 +4,7 @@
package v2
import (
"github.com/mikkyang/id3-go/encodedbytes"
"github.com/jcs/id3-go/encodedbytes"
"io"
)

Wyświetl plik

@ -4,7 +4,7 @@
package v2
import (
"github.com/mikkyang/id3-go/encodedbytes"
"github.com/jcs/id3-go/encodedbytes"
"io"
)