go_service/vendor/github.com/gosimple/unidecode/decode.go

45 lines
827 B
Go

package unidecode
import (
"compress/zlib"
"io"
"strings"
)
const (
dummyLenght = byte(0xff)
)
var (
transliterations [65536][]rune
transCount = rune(len(transliterations))
)
func decodeTransliterations() {
r, err := zlib.NewReader(strings.NewReader(tableData))
if err != nil {
panic(err)
}
defer r.Close()
b := make([]byte, 0, 13) // 13 = longest transliteration, adjust if needed
lenB := b[:1]
chr := uint16(0xffff) // char counter, rely on overflow on first pass
for {
chr++
if _, err := io.ReadFull(r, lenB); err != nil {
if err == io.EOF {
break
}
panic(err)
}
if lenB[0] == dummyLenght {
continue
}
b = b[:lenB[0]] // resize, preserving allocation
if _, err := io.ReadFull(r, b); err != nil {
panic(err)
}
transliterations[int(chr)] = []rune(string(b))
}
}