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}