decode.go 834 B

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