1package unidecode
2
3import (
4 "compress/zlib"
5 "io"
6 "strings"
7)
8
9const (
10 dummyLenght = byte(0xff)
11)
12
13var (
14 transliterations [65536][]rune
15 transCount = rune(len(transliterations))
16)
17
18func decodeTransliterations() {
19 r, err := zlib.NewReader(strings.NewReader(tableData))
20 if err != nil {
21 panic(err)
22 }
23 defer r.Close()
24 b := make([]byte, 0, 13) // 13 = longest transliteration, adjust if needed
25 lenB := b[:1]
26 chr := uint16(0xffff) // char counter, rely on overflow on first pass
27 for {
28 chr++
29 if _, err := io.ReadFull(r, lenB); err != nil {
30 if err == io.EOF {
31 break
32 }
33 panic(err)
34 }
35 if lenB[0] == dummyLenght {
36 continue
37 }
38 b = b[:lenB[0]] // resize, preserving allocation
39 if _, err := io.ReadFull(r, b); err != nil {
40 panic(err)
41 }
42 transliterations[int(chr)] = []rune(string(b))
43 }
44}