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
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
//! Wingdings 2 codepoint mapping table.
//!
//! Maps Wingdings 2 font codepoints (0x21–0xF9) to standard Unicode characters.
//!
//! Source: <https://github.com/jgm/pandoc/issues/9220#issuecomment-1828263607>
//! Last updated: 2026-06-10.
/// Wingdings 2 codepoint to Unicode character mapping.
///
/// Sorted by key (u8 codepoint). Used for binary search lookup.
pub(super) const TABLE: &[(u8, char)] = &[
(0x21, '\u{270a}'), // WRITING HAND
(0x22, '\u{270b}'), // RAISED HAND
(0x23, '\u{270c}'), // VICTORY HAND
(0x24, '\u{270d}'), // WRITING HAND (ALT)
(0x25, '\u{2704}'), // SCISSORS
(0x26, '\u{2700}'), // UPPER BLADE SCISSORS
(0x27, '\u{1f71e}'), // ALCHEMICAL SYMBOL FOR DISTILLATION
(0x28, '\u{1f71d}'), // ALCHEMICAL SYMBOL FOR SUBLIMATION
(0x29, '\u{1f5c5}'), // DOCUMENT WITH LINES
(0x2A, '\u{1f5c6}'), // DOCUMENT WITH LINES AND ARROW
(0x2B, '\u{1f5c7}'), // DOCUMENT WITH ARROW
(0x2C, '\u{1f5c8}'), // DOCUMENT WITH MULTIPLE LINES
(0x2D, '\u{1f5c9}'), // DOCUMENT WITH MULTIPLE LINES AND ARROW
(0x2E, '\u{1f5ca}'), // DOCUMENT WITH MULTIPLE LINES AND ARROW (ALT)
(0x2F, '\u{1f5cb}'), // DOCUMENT WITH MULTIPLE LINES (ALT)
(0x30, '\u{1f5cc}'), // DOCUMENT WITH MULTIPLE LINES (ALT2)
(0x31, '\u{1f5cd}'), // DOCUMENT WITH MULTIPLE LINES (ALT3)
(0x32, '\u{1f4cb}'), // CLIPBOARD
(0x33, '\u{1f5d1}'), // WASTEBASKET
(0x34, '\u{1f5d4}'), // FILE CABINET DRAWER
(0x35, '\u{1f5d5}'), // CARD INDEX DIVIDERS
(0x36, '\u{1f5d6}'), // CARD INDEX DIVIDERS (ALT)
(0x37, '\u{1f5d7}'), // CARD INDEX DIVIDERS (ALT2)
(0x38, '\u{1f5d8}'), // CARD INDEX DIVIDERS (ALT3)
(0x39, '\u{1f5ad}'), // LOWER LEFT PENCIL
(0x3A, '\u{1f5af}'), // LOWER RIGHT PENCIL
(0x3B, '\u{1f5b1}'), // LOWER LEFT PENCIL (ALT)
(0x3C, '\u{1f592}'), // LOWER LEFT PENCIL (ALT2)
(0x3D, '\u{1f593}'), // LOWER LEFT PENCIL (ALT3)
(0x3E, '\u{1f598}'), // LOWER LEFT PENCIL (ALT4)
(0x3F, '\u{1f599}'), // LOWER LEFT PENCIL (ALT5)
(0x40, '\u{1f59a}'), // LOWER LEFT PENCIL (ALT6)
(0x41, '\u{1f59b}'), // LOWER LEFT PENCIL (ALT7)
(0x42, '\u{1f448}'), // LEFTWARDS BLACK ARROW
(0x43, '\u{1f449}'), // RIGHTWARDS BLACK ARROW
(0x44, '\u{1f59c}'), // LOWER LEFT PENCIL (ALT8)
(0x45, '\u{1f59d}'), // LOWER LEFT PENCIL (ALT9)
(0x46, '\u{1f59e}'), // LOWER LEFT PENCIL (ALT10)
(0x47, '\u{1f59f}'), // LOWER LEFT PENCIL (ALT11)
(0x48, '\u{1f5a0}'), // LOWER LEFT PENCIL (ALT12)
(0x49, '\u{1f5a1}'), // LOWER LEFT PENCIL (ALT13)
(0x4A, '\u{1f446}'), // UPWARDS BLACK ARROW
(0x4B, '\u{1f447}'), // DOWNWARDS BLACK ARROW
(0x4C, '\u{1f5a2}'), // LOWER LEFT PENCIL (ALT14)
(0x4D, '\u{1f5a3}'), // LOWER LEFT PENCIL (ALT15)
(0x4E, '\u{1f591}'), // LOWER LEFT PENCIL (ALT16)
(0x4F, '\u{1f5b4}'), // LOWER LEFT PENCIL (ALT17)
(0x50, '\u{2713}'), // CHECK MARK
(0x51, '\u{1f5b5}'), // LOWER LEFT PENCIL (ALT18)
(0x52, '\u{2611}'), // BALLOT BOX WITH CHECK
(0x53, '\u{2612}'), // BALLOT BOX WITH X
(0x54, '\u{2612}'), // BALLOT BOX WITH X (DUP)
(0x55, '\u{2bbe}'), // UPPER LEFT CURVED ARROW
(0x56, '\u{2bbf}'), // UPPER RIGHT CURVED ARROW
(0x57, '\u{2a38}'), // CIRCLED REVERSE SOLIDUS
(0x58, '\u{2a38}'), // CIRCLED REVERSE SOLIDUS (DUP)
(0x59, '\u{1f669}'), // LOWER LEFT PENCIL (ALT19)
(0x5A, '\u{1f674}'), // LOWER LEFT PENCIL (ALT20)
(0x5B, '\u{1f672}'), // LOWER LEFT PENCIL (ALT21)
(0x5C, '\u{1f673}'), // LOWER LEFT PENCIL (ALT22)
(0x5D, '\u{203d}'), // INTERROBANG
(0x5E, '\u{1f679}'), // LOWER LEFT PENCIL (ALT23)
(0x5F, '\u{1f67a}'), // LOWER LEFT PENCIL (ALT24)
(0x60, '\u{1f67b}'), // LOWER LEFT PENCIL (ALT25)
(0x61, '\u{1f666}'), // LOWER LEFT PENCIL (ALT26)
(0x62, '\u{1f664}'), // LOWER LEFT PENCIL (ALT27)
(0x63, '\u{1f665}'), // LOWER LEFT PENCIL (ALT28)
(0x64, '\u{1f667}'), // LOWER LEFT PENCIL (ALT29)
(0x65, '\u{1f67a}'), // LOWER LEFT PENCIL (ALT30)
(0x66, '\u{1f668}'), // LOWER LEFT PENCIL (ALT31)
(0x67, '\u{1f669}'), // LOWER LEFT PENCIL (ALT32)
(0x68, '\u{1f67b}'), // LOWER LEFT PENCIL (ALT33)
(0x69, '\u{24ff}'), // CIRCLED DIGIT ZERO
(0x6A, '\u{2460}'), // CIRCLED DIGIT ONE
(0x6B, '\u{2461}'), // CIRCLED DIGIT TWO
(0x6C, '\u{2462}'), // CIRCLED DIGIT THREE
(0x6D, '\u{2463}'), // CIRCLED DIGIT FOUR
(0x6E, '\u{2464}'), // CIRCLED DIGIT FIVE
(0x6F, '\u{2465}'), // CIRCLED DIGIT SIX
(0x70, '\u{2466}'), // CIRCLED DIGIT SEVEN
(0x71, '\u{2467}'), // CIRCLED DIGIT EIGHT
(0x72, '\u{2468}'), // CIRCLED DIGIT NINE
(0x73, '\u{2469}'), // CIRCLED NUMBER TEN
(0x74, '\u{24ff}'), // CIRCLED DIGIT ZERO (ALT)
(0x75, '\u{2776}'), // DINGBAT CIRCLED SANS-SERIF DIGIT ONE
(0x76, '\u{2777}'), // DINGBAT CIRCLED SANS-SERIF DIGIT TWO
(0x77, '\u{2778}'), // DINGBAT CIRCLED SANS-SERIF DIGIT THREE
(0x78, '\u{2779}'), // DINGBAT CIRCLED SANS-SERIF DIGIT FOUR
(0x79, '\u{277a}'), // DINGBAT CIRCLED SANS-SERIF DIGIT FIVE
(0x7A, '\u{277b}'), // DINGBAT CIRCLED SANS-SERIF DIGIT SIX
(0x7B, '\u{277c}'), // DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN
(0x7C, '\u{277d}'), // DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT
(0x7D, '\u{277e}'), // DINGBAT CIRCLED SANS-SERIF DIGIT NINE
(0x7E, '\u{277f}'), // DINGBAT CIRCLED SANS-SERIF NUMBER TEN
(0x80, '\u{2609}'), // SUN
(0x81, '\u{1f315}'), // FULL MOON
(0x82, '\u{263d}'), // FIRST QUARTER MOON
(0x83, '\u{263e}'), // LAST QUARTER MOON
(0x84, '\u{2e3f}'), // RAISED DOT
(0x85, '\u{271d}'), // LATIN CROSS
(0x86, '\u{1f547}'), // LOWER LEFT PENCIL (ALT34)
(0x87, '\u{1f55c}'), // LOWER LEFT PENCIL (ALT35)
(0x88, '\u{1f55d}'), // LOWER LEFT PENCIL (ALT36)
(0x89, '\u{1f55e}'), // LOWER LEFT PENCIL (ALT37)
(0x8A, '\u{1f55f}'), // LOWER LEFT PENCIL (ALT38)
(0x8B, '\u{1f560}'), // LOWER LEFT PENCIL (ALT39)
(0x8C, '\u{1f561}'), // LOWER LEFT PENCIL (ALT40)
(0x8D, '\u{1f562}'), // LOWER LEFT PENCIL (ALT41)
(0x8E, '\u{1f563}'), // LOWER LEFT PENCIL (ALT42)
(0x8F, '\u{1f564}'), // LOWER LEFT PENCIL (ALT43)
(0x90, '\u{1f565}'), // LOWER LEFT PENCIL (ALT44)
(0x91, '\u{1f566}'), // LOWER LEFT PENCIL (ALT45)
(0x92, '\u{1f567}'), // LOWER LEFT PENCIL (ALT46)
(0x93, '\u{1f668}'), // LOWER LEFT PENCIL (ALT47)
(0x94, '\u{1f669}'), // LOWER LEFT PENCIL (ALT48)
(0x95, '\u{2022}'), // BULLET
(0x96, '\u{25cf}'), // BLACK CIRCLE
(0x97, '\u{26ab}'), // MEDIUM BLACK CIRCLE
(0x98, '\u{2b24}'), // BLACK LARGE CIRCLE
(0x99, '\u{1f785}'), // LOWER LEFT PENCIL (ALT49)
(0x9A, '\u{1f786}'), // LOWER LEFT PENCIL (ALT50)
(0x9B, '\u{1f787}'), // LOWER LEFT PENCIL (ALT51)
(0x9C, '\u{1f788}'), // LOWER LEFT PENCIL (ALT52)
(0x9D, '\u{1f78a}'), // LOWER LEFT PENCIL (ALT53)
(0x9E, '\u{29bf}'), // CIRCLED BULLET
(0x9F, '\u{25fe}'), // BLACK SMALL SQUARE
(0xA1, '\u{25fc}'), // BLACK MEDIUM SQUARE
(0xA2, '\u{2b1b}'), // BLACK LARGE SQUARE
(0xA3, '\u{2b1c}'), // WHITE LARGE SQUARE
(0xA4, '\u{1f791}'), // LOWER LEFT PENCIL (ALT54)
(0xA5, '\u{1f792}'), // LOWER LEFT PENCIL (ALT55)
(0xA6, '\u{1f793}'), // LOWER LEFT PENCIL (ALT56)
(0xA7, '\u{1f794}'), // LOWER LEFT PENCIL (ALT57)
(0xA8, '\u{25a3}'), // SQUARE WITH HORIZONTAL FILL
(0xA9, '\u{1f795}'), // LOWER LEFT PENCIL (ALT58)
(0xAA, '\u{1f796}'), // LOWER LEFT PENCIL (ALT59)
(0xAB, '\u{1f797}'), // LOWER LEFT PENCIL (ALT60)
(0xAC, '\u{2b29}'), // BLACK MEDIUM DIAMOND
(0xAD, '\u{25ad}'), // WHITE RECTANGLE
(0xAE, '\u{25c6}'), // BLACK DIAMOND
(0xAF, '\u{25c7}'), // WHITE DIAMOND
(0xB0, '\u{1f79a}'), // LOWER LEFT PENCIL (ALT61)
(0xB1, '\u{25c8}'), // WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
(0xB2, '\u{1f79b}'), // LOWER LEFT PENCIL (ALT62)
(0xB3, '\u{1f79c}'), // LOWER LEFT PENCIL (ALT63)
(0xB4, '\u{1f79d}'), // LOWER LEFT PENCIL (ALT64)
(0xB5, '\u{2b2a}'), // BLACK MEDIUM DIAMOND
(0xB6, '\u{25a7}'), // SQUARE WITH VERTICAL FILL
(0xB7, '\u{2b2b}'), // WHITE MEDIUM DIAMOND
(0xB8, '\u{25ca}'), // LOZENGE
(0xB9, '\u{1f7a0}'), // LOWER LEFT PENCIL (ALT65)
(0xBA, '\u{2596}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xBB, '\u{2597}'), // LOWER RIGHT QUADRANT CIRCULAR ARC
(0xBC, '\u{2bca}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xBD, '\u{2bcb}'), // LOWER RIGHT QUADRANT CIRCULAR ARC
(0xBE, '\u{25fc}'), // BLACK MEDIUM SQUARE (DUP)
(0xBF, '\u{25ad}'), // WHITE RECTANGLE (DUP)
(0xC0, '\u{2b1f}'), // WHITE HEXAGON
(0xC1, '\u{2bc2}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xC2, '\u{2b23}'), // WHITE HEXAGON (ALT)
(0xC3, '\u{2b22}'), // BLACK HEXAGON
(0xC4, '\u{2bc3}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xC5, '\u{2bc4}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xC6, '\u{1f7a1}'), // LOWER LEFT PENCIL (ALT66)
(0xC7, '\u{1f7a2}'), // LOWER LEFT PENCIL (ALT67)
(0xC8, '\u{1f7a3}'), // LOWER LEFT PENCIL (ALT68)
(0xC9, '\u{1f7a4}'), // LOWER LEFT PENCIL (ALT69)
(0xCA, '\u{1f7a5}'), // LOWER LEFT PENCIL (ALT70)
(0xCB, '\u{1f7a6}'), // LOWER LEFT PENCIL (ALT71)
(0xCC, '\u{1f7a7}'), // LOWER LEFT PENCIL (ALT72)
(0xCD, '\u{1f7a8}'), // LOWER LEFT PENCIL (ALT73)
(0xCE, '\u{1f7a9}'), // LOWER LEFT PENCIL (ALT74)
(0xCF, '\u{1f7aa}'), // LOWER LEFT PENCIL (ALT75)
(0xD0, '\u{1f7ab}'), // LOWER LEFT PENCIL (ALT76)
(0xD1, '\u{1f7ac}'), // LOWER LEFT PENCIL (ALT77)
(0xD2, '\u{1f7ad}'), // LOWER LEFT PENCIL (ALT78)
(0xD3, '\u{1f7ae}'), // LOWER LEFT PENCIL (ALT79)
(0xD4, '\u{1f7af}'), // LOWER LEFT PENCIL (ALT80)
(0xD5, '\u{1f7b0}'), // LOWER LEFT PENCIL (ALT81)
(0xD6, '\u{1f7b1}'), // LOWER LEFT PENCIL (ALT82)
(0xD7, '\u{1f7b2}'), // LOWER LEFT PENCIL (ALT83)
(0xD8, '\u{1f7b3}'), // LOWER LEFT PENCIL (ALT84)
(0xD9, '\u{1f7b4}'), // LOWER LEFT PENCIL (ALT85)
(0xDA, '\u{1f7b5}'), // LOWER LEFT PENCIL (ALT86)
(0xDB, '\u{1f7b6}'), // LOWER LEFT PENCIL (ALT87)
(0xDC, '\u{1f7b7}'), // LOWER LEFT PENCIL (ALT88)
(0xDD, '\u{1f7b8}'), // LOWER LEFT PENCIL (ALT89)
(0xDE, '\u{1f7b9}'), // LOWER LEFT PENCIL (ALT90)
(0xDF, '\u{1f7ba}'), // LOWER LEFT PENCIL (ALT91)
(0xE0, '\u{1f7bb}'), // LOWER LEFT PENCIL (ALT92)
(0xE1, '\u{1f7bc}'), // LOWER LEFT PENCIL (ALT93)
(0xE2, '\u{1f7bd}'), // LOWER LEFT PENCIL (ALT94)
(0xE3, '\u{1f7be}'), // LOWER LEFT PENCIL (ALT95)
(0xE4, '\u{1f7bf}'), // LOWER LEFT PENCIL (ALT96)
(0xE5, '\u{1f7c0}'), // LOWER LEFT PENCIL (ALT97)
(0xE6, '\u{1f7c2}'), // LOWER LEFT PENCIL (ALT98)
(0xE7, '\u{1f7c4}'), // LOWER LEFT PENCIL (ALT99)
(0xE8, '\u{2726}'), // BLACK FOUR POINTED STAR
(0xE9, '\u{1f7c9}'), // LOWER LEFT PENCIL (ALT100)
(0xEA, '\u{2605}'), // BLACK STAR
(0xEB, '\u{2736}'), // SIX POINTED STAR
(0xEC, '\u{1f7cb}'), // LOWER LEFT PENCIL (ALT101)
(0xED, '\u{2737}'), // EIGHT POINTED STAR
(0xEE, '\u{1f7cf}'), // LOWER LEFT PENCIL (ALT102)
(0xEF, '\u{1f7d2}'), // LOWER LEFT PENCIL (ALT103)
(0xF0, '\u{2739}'), // HEAVY TEARDROP SPOKED ASTERISK
(0xF1, '\u{1f7c3}'), // LOWER LEFT PENCIL (ALT104)
(0xF2, '\u{1f7c7}'), // LOWER LEFT PENCIL (ALT105)
(0xF3, '\u{272f}'), // HEAVY TEARDROP SPOKED ASTERISK (ALT)
(0xF4, '\u{1f7cd}'), // LOWER LEFT PENCIL (ALT106)
(0xF5, '\u{1f7d4}'), // LOWER LEFT PENCIL (ALT107)
(0xF6, '\u{2bcc}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xF7, '\u{2bcd}'), // LOWER LEFT QUADRANT CIRCULAR ARC
(0xF8, '\u{203b}'), // REFERENCE MARK
(0xF9, '\u{2042}'), // ASTERISM
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn table_sorted() {
for (prev, curr) in TABLE.iter().zip(TABLE.iter().skip(1)) {
assert!(
prev.0 < curr.0,
"table not sorted: {:#04X} >= {:#04X}",
prev.0,
curr.0
);
}
}
#[test]
fn table_no_duplicates() {
for (prev, curr) in TABLE.iter().zip(TABLE.iter().skip(1)) {
assert_ne!(prev.0, curr.0, "duplicate key: {:#04X}", curr.0);
}
}
}