main.mx raw
1 package main
2
3 import (
4 "os"
5 "unicode"
6 )
7
8 func writeFile(path string, data []byte) {
9 os.WriteFile(path, data, 0644)
10 }
11
12 func le16(v uint16) []byte {
13 return []byte{byte(v), byte(v >> 8)}
14 }
15
16 func le32(v uint32) []byte {
17 return []byte{byte(v), byte(v >> 8), byte(v >> 16), byte(v >> 24)}
18 }
19
20 func encodeR16(ranges []unicode.Range16) []byte {
21 out := []byte{:0:len(ranges) * 6}
22 for _, r := range ranges {
23 out = append(out, le16(r.Lo)...)
24 out = append(out, le16(r.Hi)...)
25 out = append(out, le16(r.Stride)...)
26 }
27 return out
28 }
29
30 func encodeR32(ranges []unicode.Range32) []byte {
31 out := []byte{:0:len(ranges) * 12}
32 for _, r := range ranges {
33 out = append(out, le32(r.Lo)...)
34 out = append(out, le32(r.Hi)...)
35 out = append(out, le32(r.Stride)...)
36 }
37 return out
38 }
39
40 func writeTable(dir, name string, t *unicode.RangeTable) {
41 if t == nil {
42 return
43 }
44 writeFile(dir | "/" | name | "_r16.bin", encodeR16(t.R16))
45 writeFile(dir | "/" | name | "_r32.bin", encodeR32(t.R32))
46 println(" " | name)
47 }
48
49 func main() {
50 catDir := "src/unicode/data/cat"
51 os.MkdirAll(catDir, 0755)
52
53 println("categories:")
54 writeTable(catDir, "C", unicode.C())
55 writeTable(catDir, "Cc", unicode.Cc())
56 writeTable(catDir, "Cf", unicode.Cf())
57 writeTable(catDir, "Cn", unicode.Cn())
58 writeTable(catDir, "Co", unicode.Co())
59 writeTable(catDir, "Cs", unicode.Cs())
60 writeTable(catDir, "L", unicode.L())
61 writeTable(catDir, "LC", unicode.LC())
62 writeTable(catDir, "Ll", unicode.Ll())
63 writeTable(catDir, "Lm", unicode.Lm())
64 writeTable(catDir, "Lo", unicode.Lo())
65 writeTable(catDir, "Lt", unicode.Lt())
66 writeTable(catDir, "Lu", unicode.Lu())
67 writeTable(catDir, "M", unicode.M())
68 writeTable(catDir, "Mc", unicode.Mc())
69 writeTable(catDir, "Me", unicode.Me())
70 writeTable(catDir, "Mn", unicode.Mn())
71 writeTable(catDir, "N", unicode.N())
72 writeTable(catDir, "Nd", unicode.Nd())
73 writeTable(catDir, "Nl", unicode.Nl())
74 writeTable(catDir, "No", unicode.No())
75 writeTable(catDir, "P", unicode.P())
76 writeTable(catDir, "Pc", unicode.Pc())
77 writeTable(catDir, "Pd", unicode.Pd())
78 writeTable(catDir, "Pe", unicode.Pe())
79 writeTable(catDir, "Pf", unicode.Pf())
80 writeTable(catDir, "Pi", unicode.Pi())
81 writeTable(catDir, "Po", unicode.Po())
82 writeTable(catDir, "Ps", unicode.Ps())
83 writeTable(catDir, "S", unicode.S())
84 writeTable(catDir, "Sc", unicode.Sc())
85 writeTable(catDir, "Sk", unicode.Sk())
86 writeTable(catDir, "Sm", unicode.Sm())
87 writeTable(catDir, "So", unicode.So())
88 writeTable(catDir, "Z", unicode.Z())
89 writeTable(catDir, "Zl", unicode.Zl())
90 writeTable(catDir, "Zp", unicode.Zp())
91 writeTable(catDir, "Zs", unicode.Zs())
92 writeTable(catDir, "White_Space", unicode.Space())
93
94 println("done")
95 }
96