1//go:build none
2// +build none
3
4package main
5
6import (
7 "bytes"
8 "compress/zlib"
9 "encoding/binary"
10 "fmt"
11 "go/format"
12 "io/ioutil"
13 "strconv"
14 "strings"
15)
16
17func main() {
18 data, err := ioutil.ReadFile("table.txt")
19 if err != nil {
20 panic(err)
21 }
22 var buf bytes.Buffer
23 previousVal := int64(-1)
24 for _, line := range strings.Split(string(data), "\n") {
25 if strings.HasPrefix(line, "/*") || line == "" {
26 continue
27 }
28 sep := strings.IndexByte(line, ':')
29 if sep == -1 {
30 panic(line)
31 }
32 val, err := strconv.ParseInt(line[:sep], 0, 32)
33 if err != nil {
34 panic(err)
35 }
36
37 if previousVal+1 != val {
38 rangechars := 0
39 for i := previousVal + 1; i <= val-1; i++ {
40 if err := binary.Write(&buf, binary.LittleEndian, uint8(0xff)); err != nil {
41 panic(err)
42 }
43 rangechars++
44 }
45 fmt.Printf("Filled dummy range: 0x%04x - 0x%04x (%4d chars)\n", previousVal+1, val-1, rangechars)
46 }
47
48 s, err := strconv.Unquote(line[sep+2:])
49 if err != nil {
50 panic(err)
51 }
52 if err := binary.Write(&buf, binary.LittleEndian, uint8(len(s))); err != nil {
53 panic(err)
54 }
55 previousVal = val
56 buf.WriteString(s)
57 }
58 var cbuf bytes.Buffer
59 w, err := zlib.NewWriterLevel(&cbuf, zlib.BestCompression)
60 if err != nil {
61 panic(err)
62 }
63 if _, err := w.Write(buf.Bytes()); err != nil {
64 panic(err)
65 }
66 if err := w.Close(); err != nil {
67 panic(err)
68 }
69 buf.Reset()
70 buf.WriteString("package unidecode\n")
71 buf.WriteString("// AUTOGENERATED - DO NOT EDIT!\n\n")
72 fmt.Fprintf(&buf, "const tableData = %q;\n", cbuf.String())
73 dst, err := format.Source(buf.Bytes())
74 if err != nil {
75 panic(err)
76 }
77 if err := ioutil.WriteFile("table.go", dst, 0644); err != nil {
78 panic(err)
79 }
80}