decode.go 771 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. package unidecode
  2. import (
  3. "compress/zlib"
  4. "encoding/binary"
  5. "io"
  6. "strings"
  7. )
  8. var (
  9. transliterations [65536][]rune
  10. transCount = rune(len(transliterations))
  11. getUint16 = binary.LittleEndian.Uint16
  12. )
  13. func decodeTransliterations() {
  14. r, err := zlib.NewReader(strings.NewReader(tableData))
  15. if err != nil {
  16. panic(err)
  17. }
  18. defer r.Close()
  19. tmp1 := make([]byte, 2)
  20. tmp2 := tmp1[:1]
  21. for {
  22. if _, err := io.ReadAtLeast(r, tmp1, 2); err != nil {
  23. if err == io.EOF {
  24. break
  25. }
  26. panic(err)
  27. }
  28. chr := getUint16(tmp1)
  29. if _, err := io.ReadAtLeast(r, tmp2, 1); err != nil {
  30. panic(err)
  31. }
  32. b := make([]byte, int(tmp2[0]))
  33. if _, err := io.ReadFull(r, b); err != nil {
  34. panic(err)
  35. }
  36. transliterations[int(chr)] = []rune(string(b))
  37. }
  38. }