-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.rs
193 lines (173 loc) · 10 KB
/
build.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
extern crate unicode_names;
extern crate itertools;
use std::env;
use std::fs::File;
use std::io::Write;
use std::path::Path;
use itertools::Itertools;
// This is the list of emoji names in our alphabet.
static ALPHABET: &'static [&'static str] = &[
// 0 -- 31
"THUMBS UP SIGN", "THUMBS DOWN SIGN",
"FISTED HAND SIGN", "VICTORY HAND",
"RAISED HAND", "OK HAND SIGN",
"CLAPPING HANDS SIGN", "WAVING HAND SIGN",
"WHITE UP POINTING BACKHAND INDEX", "WHITE DOWN POINTING BACKHAND INDEX",
"WHITE LEFT POINTING BACKHAND INDEX", "WHITE RIGHT POINTING BACKHAND INDEX",
"WRITING HAND", "EYE",
"EAR", "NOSE",
"FOOTPRINTS", "ROBOT FACE",
"CROSS MARK", "HEAVY PLUS SIGN",
"HEAVY MINUS SIGN", "HEAVY DIVISION SIGN",
"HEAVY CHECK MARK", "HEAVY EXCLAMATION MARK SYMBOL",
"BLACK QUESTION MARK ORNAMENT", "EXCLAMATION QUESTION MARK",
"CROSSED FLAGS", "HUNDRED POINTS SYMBOL",
"KISS MARK", "RING",
"GEM STONE", "HEAVY BLACK HEART",
// 32 -- 63
"GUITAR", "SAXOPHONE",
"MUSICAL KEYBOARD", "VIOLIN",
"AMERICAN FOOTBALL", "BASKETBALL AND HOOP",
"SOCCER BALL", "BASEBALL",
"TROPHY", "CHEQUERED FLAG",
"BOW AND ARROW", "SPORTS MEDAL",
"VOLLEYBALL", "CLOUD",
"CLOUD WITH TORNADO", "CLOUD WITH RAIN",
"CLOUD WITH LIGHTNING", "CURLY LOOP",
"CHICKEN", "PENGUIN",
"WHALE", "CRAB",
"MONKEY", "SHEEP",
"SNAKE", "HORSE",
"ELEPHANT", "OCTOPUS",
"TURTLE", "HONEYBEE",
"PIG", "CROCODILE",
// 64 -- 95
"MOUSE", "COW",
"BIRD", "SNAIL",
"BACTRIAN CAMEL", "DOLPHIN",
"DRAGON", "SPIDER",
"SPIDER WEB", "CAT",
"RABBIT", "ANT",
"FISH", "SUSHI",
"ICE CREAM", "DOUGHNUT",
"COOKIE", "CHOCOLATE BAR",
"LOLLIPOP", "HAMBURGER",
"SLICE OF PIZZA", "BREAD",
"BIRTHDAY CAKE", "TACO",
"HOT DOG", "CHEESE WEDGE",
"RICE BALL", "SPAGHETTI",
"POPCORN", "RED APPLE",
"PINEAPPLE", "BANANA",
// 96 -- 127
"GRAPES", "WATERMELON",
"CHERRIES", "STRAWBERRY",
"TANGERINE", "LEMON",
"PEACH", "PEAR",
"MUSHROOM", "TOMATO",
"AUBERGINE", "HOT PEPPER",
"EAR OF MAIZE", "WINE GLASS",
"BEER MUG", "HOT BEVERAGE",
"COCKTAIL GLASS", "BOTTLE WITH POPPING CORK",
"JACK-O-LANTERN", "CHRISTMAS TREE",
"FATHER CHRISTMAS", "WRAPPED PRESENT",
"SNOWMAN", "SNOWFLAKE",
"WATCH", "HOURGLASS",
"ALARM CLOCK", "BLACK TELEPHONE",
"BALLOON", "PARTY POPPER",
"CONFETTI BALL", "FIREWORKS",
// 128 -- 159
"GHOST", "SKULL",
"IMP", "EXTRATERRESTRIAL ALIEN",
"BLACK SUN WITH RAYS", "RAINBOW",
"CRESCENT MOON", "UMBRELLA WITH RAIN DROPS",
"WHITE MEDIUM STAR", "CACTUS",
"ROSE", "SUNFLOWER",
"FOUR LEAF CLOVER", "MAPLE LEAF",
"SEEDLING", "PALM TREE",
"LIPSTICK", "NAIL POLISH",
"TOP HAT", "MICROPHONE",
"MOVIE CAMERA", "ARTIST PALETTE",
"GAME DIE", "WARNING SIGN",
"CAMERA", "MONEY BAG",
"CREDIT CARD", "HEAVY DOLLAR SIGN",
"BLACK SPADE SUIT", "BLACK CLUB SUIT",
"BLACK HEART SUIT", "BLACK DIAMOND SUIT",
// 160 -- 191
"ROCKET", "FIRE ENGINE",
"AUTOMOBILE", "SHIP",
"NO ENTRY SIGN", "BICYCLE",
"TRACTOR", "HELICOPTER",
"AIRPLANE", "VERTICAL TRAFFIC LIGHT",
"FLOPPY DISK", "OPTICAL DISC",
"SATELLITE ANTENNA", "OPEN BOOK",
"CALENDAR", "CLIPBOARD",
"PAPERCLIP", "STRAIGHT RULER",
"PUSHPIN", "PENCIL",
"BLACK SCISSORS", "LEFT-POINTING MAGNIFYING GLASS",
"KEY", "LOCK",
"HOCHO", "PISTOL",
"WRENCH", "HAMMER",
"FORK AND KNIFE", "FIRE",
"BOMB", "SMOKING SYMBOL",
// 192 -- 223
"HIGH-HEELED SHOE", "ATHLETIC SHOE",
"T-SHIRT", "JEANS",
"BIKINI", "DRESS",
"NECKTIE", "CROWN",
"EYEGLASSES", "HANDBAG",
"PILE OF POO", "TOILET",
"SHOWER", "BATH",
"GRADUATION CAP", "VOLCANO",
"CHURCH", "SQUARED OK",
"RIBBON", "PILL",
"SYRINGE", "BELL",
"MICROSCOPE", "CANDLE",
"BLACK LEFT-POINTING TRIANGLE", "BLACK RIGHT-POINTING TRIANGLE",
"LEFTWARDS BLACK ARROW", "UPWARDS BLACK ARROW",
"DOWNWARDS BLACK ARROW", "NORTH EAST ARROW",
"NORTH WEST ARROW", "SOUTH EAST ARROW",
// NOTE: we explicitly don't have "BLACK RIGHTWARDS ARROW" or "RIGHTWARDS BLACK ARROW" (yes,
// they're different) in the above list, due to the following problem:
// http://xahlee.info/comp/unicode_BLACK_RIGHTWARDS_problem.html
// 224 - 255
"SOUTH WEST ARROW", "LEFTWARDS ARROW WITH HOOK",
"RIGHTWARDS ARROW WITH HOOK", "ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS",
"BLACK RIGHT-POINTING DOUBLE TRIANGLE", "BLACK LEFT-POINTING DOUBLE TRIANGLE",
"BLACK UP-POINTING DOUBLE TRIANGLE", "BLACK DOWN-POINTING DOUBLE TRIANGLE",
"DOUBLE VERTICAL BAR", "SPARKLES",
"PEACE SYMBOL", "RADIOACTIVE SIGN",
"YIN YANG", "STAR OF DAVID",
"ANCHOR", "GEAR",
"ROLLER COASTER", "FERRIS WHEEL",
"CIRCUS TENT", "TRIANGULAR FLAG ON POST",
"CLAPPER BOARD", "VIDEO GAME",
"SLOT MACHINE", "BILLIARDS",
"MUSICAL NOTE", "TRUMPET",
"SKI AND SKI BOOT", "WEIGHT LIFTER",
"FACTORY", "TONGUE",
"EYES", "WOMAN WITH BUNNY EARS",
];
fn main() {
assert_eq!(ALPHABET.len(), 256);
let out_dir = env::var("OUT_DIR").expect("no OUT_DIR environment variable");
let dest_path = Path::new(&out_dir).join("table.rs");
let mut f = File::create(&dest_path).expect("couldn't create file");
write!(f, "static LOOKUP_TABLE: &'static [&'static [u8]] = &[\n").unwrap();
for name in ALPHABET.iter() {
if let Some(ch) = unicode_names::character(name) {
let mut buf = [0; 4];
let bytes = {
let s = ch.encode_utf8(&mut buf);
s.len()
};
let hex = &buf[0..bytes]
.iter()
.map(|b| format!("0x{:2X}", b))
.join(", ");
write!(f, " &[{}],\n", hex).unwrap();
} else {
panic!("could not get Unicode character for name: {}", name);
}
}
write!(f, "];\n").unwrap();
}